CVPR:Weakly-supervised Deep Convolutional Neural Network Learning for Facial Action Intensity Estima

Weakly-supervised Deep Convolutional Neural Network Learning for Facial Action Intensity Estimation

Abstract

AU强度检测在情感计算和人机交互中有着重要的作用,实际上以及有很多工作利用CNN来进行AU强度的检测,但是都需要大量的标注数据。因此本文提出一个“基于知识的半监督的深度卷积神经网络”来进行AU强度的检测,只需要少量的标注数据(在训练序列中只需要有AU强度标注的peak和valley frames)。

Introduction

我们知道表情可以通过面部肌肉的运动来衡量,Ekman和Friesen创造了Facial Action Coding System(FACS)来描述面部肌肉的运动,定义了AU来表示肌肉的运动。FACS将AU强度划分为6个离散的等级(0~6):
N e u r a l ( 0 ) < T r a c e ( A ) < S l i g h t ( B ) < P r o n o u n c e d ( C ) < E x t r e m e ( D ) < M a x i m u m ( E )
所谓的AU强度检测就是:给定一副未见过的图片,来预测AU的强度。

本文的“基于知识的半监督的深度卷积神经网络”模型使用先验知识来促进模型的学习,减少数据间的依赖性。该模型只需要少量的标注数据:有AU强度标注的peak和valley frames。为了利用未标记的帧(unlabeled frames),作者还尝试挖掘AU强度中的领域知识(domain knowledge),包括:appearance similarity,temporal intensity ordering,facial symmetry以及contrastive appearance difference,为模型的训练提供了额外的约束。

这里写图片描述

上面所谓的domain knowledge来源于对AU强度在表情序列(emotional sequence)中的观察。
1. 上图-(b)展示了AU12的强度随时间的变化。一开始,由于肌肉的变化比较平滑(smooth),所以AU变化的比较平滑,接下来AU强度逐渐上升,从valley frame变为临近的peak frame(这个过程称为rising duration),然后逐渐从peak frame下降到临近的valley frame(这个过程称为decaying duration)本文的网络在进行AU强度预测时会保留这种关系。
2. 在rising以及decaying duration中,两个帧越相近,则他们的外表看起来会越相似(appearance similarity),在学习中促使提取的特征保持这种特性
3. 人脸是对称的。因此AU的出现和强度对于人脸的左右两侧是几乎一致的。因此面部左右的特征表示应该相近。尽管图片中存在不同的头部角度,但是学习的特征应该对于不同的角度应具有不变性(invariant to head pose)。
4. 一个具有表情的面部肯定是和中性的面部(neural face)在表现上是不同的,因此两者的特征也应该是容易被区分的。

这些领域知识为弱监督(weak supervision)提供了可行的手段,且有利于挖掘无标记帧所蕴含的信息。

本文的贡献:

  • 提出“基于知识的半监督的深度卷积神经网络”模型,只需要少量的标注数据:有AU强度标注的peak和valley frames。降低了对大量标注数据的依赖。
  • 挖掘了四种领域知识:appearance similarity,temporal intensity ordering,facial symmetry以及contrastive appearance difference,为有标记数据和无标记数据建立了联系。
  • 提出在模型训练中使用五元组(5-elements tuples),而不是单个的帧(individual frame)或者帧对(frame pairs),可以有效的利用多帧(multiple frames)之间的高阶关系。

Proposed Method

这里写图片描述

如图-1(b)所示,给定了有标注的peak和valley frames,这个帧序列就可以划分为不同的segment。根据AU强度的趋势,segments可以分为三组:

  • 由valley frame到peak frame
  • 由peak frame到valley frame
  • AU强度保持不变

为了使趋势一致,作者反转了从peak frame到valley frame的顺序,由此每个训练segment或是由valley frame到peak frame,或是AU强度保持不变。

符号标记:
对某个AU,训练集定义为 D = { X m , y m 1 , y m N m } m = 1 M ,其中 X m = { X m n } n = 1 N m ,其中 X m n 表示训练集中第m个segment中的第n个帧。 N m 表示第m个序列的长度。在每个segment中,只有第一帧和最后一帧拥有AU强度的标记,所以 y m 1 表示 X m 1 的强度, y m N m 表示 X m N m 。又定义 Θ 表示CNN的参数, y ~ m n = f ( X m n ; Θ ) 表示对 X m n 的预测强度, f m n 表示对 X m n 抽取的特征,换言之,CNN的最后一层全连接层。另外,定义 d ( a , b ) 表示两者之间距离 d ( a , b ) = | a b | 2

我们的目标是学习参数 Θ ,由于对每一个AU,peak和valley的frames的位置是不同的,因此训练CNN每次用于识别一个AU的强度。

Domain Knowledge

Relative appearance similarity:
因为面部容貌变化平滑,在一个segment中,两帧越近,看起来越像。所以对于相近的两幅图,我们使CNN提取的图片的特征也相近。

(1) d ( f m i , f m j ) d ( f m i , f m k ) , 1 i < j < k N m

其中 d ( f m i , f m j ) = f m i f m j 2 。当i,j,k包含第一帧和最后一帧时,上式就将有标记的帧和无标记的帧联系了起来。

Teporal intensity ordering:
前面说过,在面部运动中,当肌肉变化平滑时,面部容貌(facial appearance)的变化也是平滑的。对于AU强度也是如此。相邻的帧有着相似的面部容貌和AU强度。对于整个序列,根据peak和valley可以划分为一系列的segment,对每一个segment,AU强度单调的变化(注意前面所说的反转操作)。为了利用AU强度的顺序来监督模型的训练过程,对预测的一个segment中的AU强度进行如下的限制:

(2) y ~ m 1 y ~ m 2 y ~ m N m , m = 1 , 2 , , M

Facial symmetry:
人脸具有对称的特性,对于一张根据两眼中心归一化后的人脸,从中间进行反转后(horizontally flipped face)需要与原有的特征相近,即:

(3) d ( f m n , f ^ m n ) = f m n f ^ m n 2

应该具有很小的值。其中 f ^ m n 表示翻转后的面部。

Contrastive appearance difference:
对每一个人(subject),一个具有表情的面部是不同于中性的面部的(neutral faces)。因此对于本文的CNN,使其能够区分有表情的面部和中性的面部。即定义两者之间的距离满足:

(4) d ( f m n , f m N ) = f m n f m N η

其中, η 是阈值, f m N 是有标记的中性面部的特征,且属于第m个segment的某个人(subject)。

Encoding knowledge

这里写图片描述
Trainging tuples:
本文没有直接利用公式2-4来构造目标函数,而是基于训练的元组,对知识进行编码。如图3所示。对一个segment的元组定义为: T = { S , A , B , E , N } 。其中 S < A < B < E 以及N表示帧的index。整个元组包含这个segment中的初始帧(S)和最终帧(E),S与E之间的两帧(A和B),以及中性帧(N)。S,E和N是有标签的,而A和B是无标签的。给定一个训练segment,我们可以生成大量的这样的元组。对来自同一个segment中的元组,有着共同的S和E,有标记的中性帧N可以来自同一个人(subject)的其它的segment。

使用元组的好处:给定训练集D,我们可以得到大量的训练元组, D T = { T m k } m = 1 , k = 1 m = M , k = K m ,其中 M m 是第m个segment的元组的数量。

Encoding labels:
对每一个segment,只有第一帧和最后一帧是有标记的,它们不仅仅起到有监督的训练模型的作用,也间接地对它们之间的无边际的帧起到了上下界的约束作用。给定元组T,损失函数定义为:

(5) l b ( T ) = d ( y ~ S , y S ) + d ( y ~ E , y E )

Encoding relative appearance similarity:
同理,对于公式1,作者基于元组设计了一个损失以充分利用有标记的初始帧和最终帧。这个损失有以下特性:

  • 能够捕捉一个segment中面部的变化,换言之,从初始帧到最终帧,特征越来越与初始帧不同,越来越接近于最终帧;
  • 充分利用有标记的帧;
  • 能够考虑多种帧之间的高阶的关系;

给定元组T,损失定义为:

(6) r e l ( T ) = m a x ( d ( f S , f A ) d ( f S , f B ) + α , 0 ) + m a x ( d ( f E , f B ) d ( f E , f A ) + α , 0 ) + m a x ( d ( f B , f A ) d ( f B , f S ) , 0 ) + m a x ( d ( f A , f B ) d ( f A , f E ) , 0 )

其中, α 0 是边界。每一项是一个triplet loss。
这里写图片描述

如图4所示,为了确保只有(b)这种情况出现,引入另外的项来确保,这个很简单,比如对图中的情况,只需要添加一个约束,认为A到B的距离要小于S到B的距离即可。上图只给出了对于起始帧的情况,对于终止帧也是一样的。这就有了公式(6)中的后两项。对于图3中两类不同的元组,使用不同的边界,即: α = 0 如果 y S = y E ,否则, α > 0

Encoding temporal intensity ordering:
这里考虑对公式(2)进行转化,给定一个元组T,预测的AU强度应满足 y ~ S y ~ A y ~ B y ~ E
可以编码为:

(7) = m a x ( y ~ S y ~ A , 0 ) + m a x ( y ~ A y ~ B , 0 ) + m a x ( y ~ B y ~ E , 0 )

但是这样有个问题,它只考虑了两对之间的关系,忽略了与其它帧的关系。比如,当预测值为 y ~ S y ~ B y ~ A y ~ E 时,只有第二项的梯度,S和E没用用到。为了充分利用高阶的信息。
同前面一样,我们还需要另外两项约束,以及考虑两种元组,此时损失为:
(8) o r d ( T ) = m a x ( d ( y ~ S , y ~ A ) d ( y ~ S , y ~ B ) + β , 0 ) + m a x ( d ( y ~ E , y ~ B ) d ( y ~ E , y ~ A ) + β , 0 ) + m a x ( d ( y ~ B , y ~ A ) d ( y ~ B , y ~ S ) + β , 0 ) + m a x ( d ( y ~ A , y ~ B ) d ( y ~ A , y ~ E ) + β , 0 )

Encoding facial symmetry:
这个比较简单,直接定义为:

(9) s y m ( T ) = d ( f A , f ^ A ) + d ( f B , f ^ B )

这里只考虑到了A和B,因为S和E对于同一segment中的元组是相同的。此外,在某些元组中,A和B可以很接近S和E,因为它们也可以覆盖S和E中的相似的信息。又因为S可以是中性帧,因此N也没有被考虑。

Encoding contrastive appearance difference:
给定元组T,loss是:

(10) c o n ( T ) = m a x ( η d ( f A , f N ) , 0 ) + m a x ( η d ( f B , f N ) , 0 )

其中 η 0 是阈值。如果 y S = y E = 0 ,则 η = 0 ,否则 η > 0

Learning

对于一个训练元组的整个损失是:

(11) ( T ) = l b ( T ) + λ 1 r e l ( T ) + λ 2 o r d ( T ) + λ 3 s y m ( T ) + λ 4 c o n ( T )

对所有的训练元组上的损失是:

(12) L ( D T ) = 1 G m = 1 M k = 1 K m ( T m k )

其中 G = m = 1 M K m

Inference:
尽管CNN是使用元组来训练的,但是可以对某张图片进行AU强度的预测。给定一张测试图片,预测的结果为 y = f ( X ; Θ ) ,换言之,将预测值转换为离散结果: 0 ( y < 0.5 ) , 1 ( 0.5 y 1.5 ) , 2 ( 1.5 y 2.5 ) , 3 ( 2.5 y 3.5 ) , 4 ( 3.5 y 4.5 ) , 5 ( 4.5 y )

猜你喜欢

转载自blog.csdn.net/cassiePython/article/details/80833635