我们知道识别多角度的面部表情是比较困难的,本文提出Multi-channel Pose-aware Convolution Neural Networks(MPCNN)来充分利用有限的数据,对多角度的面部表情进行识别。MPCNN包含三个部分:
multi-channel feature extraction就是图中的Multi-channel Sub-CNNs,它由3个sub-CNNs组成,功能就是从不同的area中学习convolutional features;
jointly multi-scale feature fusion的作用是将convolutional features进行组合以获得更高层次的feature;
pose-aware recognition,利用特定的角度的识别网络,对上一层得到的特征进行识别,此外Head pose sub-net用于解决pose variance。jointly multi-scale feature fusion得到的特征会输入到所有的Pose-aware network中,对每一个Pose-aware network的输出设置一个权重 λ λ 。 λp λ p 表示是哪一种角度的概率,用于计算下面的Conditional Joint loss function。图中虚线部分表示只在训练时使用。
我们现在脑海中浮现出一些问题:
在下面一节中,我们来关注这些问题。
1. multi-channel feature extraction:
通常我们使用CNNs对整幅图进行特征的提取,这里作者使用CNNs来对面部不同的区域和尺寸进行特征的提取(称为scale-normalized extrators)。定义 (M1;M2;M3) ( M 1 ; M 2 ; M 3 ) 表示3通道sub-CNNs。每个通道的输入数据来源于不同的区域和尺寸。这样做的好处是可以有效的利用有限的数据,而且特征提前会更加robust。
我们先来看 M1 M 1 :用于对整个面部区域进行特征提取。首先会将输入图片归一化为200 × × 200的尺寸。 M1 M 1 包含3个卷积层,3个最大池化层(交替存在),之后再有三个池化层。对于卷积层,filter的size是5 × × 5,channel分别是32,64,64。
我们再来看 M2 M 2 :用于对眼睛区域进行特征提取,该区域大概占整幅图的1/3,输入图片归一化为140 × × 140,filter的size是5 × × 5,channel分别是16,32,32。
最后来看 M3 M 3 :用于对嘴部区域进行特征提取,同样大概占整幅图的1/3,输入图片归一化为140 × × 140,filter的size是5 × × 5,channel分别是16,32,32。
这样我们就解决了上面第一个问题:Face area,Eyes area,Mouth area是如何得到的。
2. jointly multi-scale feature fusion:
使用两层fusion layers来组合不同尺寸和不同通道的特征(即图中的FC1,FC2和FC3)
目的:为了更好的利用有限的数据,提高特征表示的能力,减少全连接层的神经元个数(如果不进行特征的组合,针对不同的channel需要不同的全连接层,从而会需要更多的神经元个数)。
我们来看下Multi-scale fusion的伪代码。
这个非常简单,和图中一样,Sub-CNN1和Sub-CNN2的输出特征进行concat,然后FC1和FC2的输出特征进行concat(怀疑论文中把concat写成了contat)。但是有个问题,为什么作者要这样concat呢?面部特征和眼部特征组合,然后再把嘴部特征组合?作者在论文中并没有给出说明。
这样我们解决了第二个问题:Sub-CNNs得到的feature是如何进行组合(fusion)的。
3. pose-aware recognition:
pose-aware recognition networks包含两部分:
前者的作用是通过减小pose conditional expression recognition loss和pose estimation loss来进行表情的识别。
给定角度(pose) p p ,pose conditional expression recognition loss为 L(e|p) L ( e | p ) 。表示pose为 p p 的训练集样本的真是标记与预测值带来的损失。 L(e|p) L ( e | p ) 定义为:
对于pose estimation sub-network,pose estimation loss定义为:
通常情况下的思路是单独分别优化pose estimation sub-network和pose conditional expression recognition。但是本文是end-to-end的方式,将两者的损失同时进行优化。Pose estimation loss Lp L p 用于指导pose-specific recognition branch从conditional joint loss中进行学习。这个condition joint loss,即两种损失的组合,定义为:
至此,我们已经解决了前面所说的所有问题。下面给出更清楚的网络结构。
4. test过程:
这里我们来看下这个网络是如何进行预测的,即对于测试集图片如何得到最终的预测结果。测试过程如下图所示:
该过程分为三步:
第一步:给定一张测试集的图片,首先与训练时一样,先得到不同的面部区域和尺寸,然后利用已经训练好的multi-channel convolution networks得到特征;
第二步:将该特征输入到joint multi-scale fusion网络(即网络结构图中的FC层),得到组合的特征(1536维的特征),该特征用于判断角度,同时输入到下面的pose-aware 网络中;
第三步:根据已知的角度,输入到特定的(对应的)pose-aware expression network中,得到最终的结果。