这是Xiaogang Wang和Xiaoou Tang组的一篇technical report,作者是优秀的学弟Ziwei Liu。
通常人脸识别里面先要对人脸图像进行检测和对齐,然后在相应的地方提取特征,但是在自然场景中,由于背景混乱,人脸检测和对齐会受到影响,进而影响特征提取和最后的识别效果。
这篇论文的主要思想是通过学习两个deep network来构建face attributes recognition的系统,其中第一个用来localization,第二个用来提取feature。
主要流程:
(a)(b)是corse to fine去localize人脸的位置,经过(a)的CNN得到脸和肩膀部分的图片,经过(b)的CNN进一步得到人脸部分的图片。
(c)的CNN是用来学习人脸部分图片的特征,最后将fully connected layer的特征拼在一起,用(d)的SVM去得到分类结果。
Learning algorithm:
1. 用ImageNet里面的object categories去pre-train (a)和(b)中的两个CNN。使用判断图片里面是否含有object的task去pre-train一个希望能够自动定位人脸位置的CNN,有一定道理的,知道object,基本上也知道人脸在哪一块了。
2. 用CelebFaces数据集的face identity的信息去pre-train (c)中用来提取人脸特征的CNN。从(c)中可以看出来,它和一般的CNN有一点不一样,在中间两层是局部的卷积,前后两层是全局卷积,局部卷积的效果在于能够保持图片的位置信息,具体细节参考原论文。
3. 最后再用attribute的label分别对(a)(b)(c)三个CNN进行fine-tune。
实验结果:
作者给出的实验结果平均来说比FaceTracker,PANDA-w, PANDA-l好8%,10%,3%。但是文章在pre-train (a)(b)中的CNN时用到了额外的ImageNet里面的dataset,在pre-train (c)中的CNN时用到了额外的CelebFaces dataset。作者提到PANDA-l有用到ground truth bounding box和landmark positions,但是由于本人不清楚FaceTracker,PANDA-w, PANDA-l这三种比较的方法是否有用到其他额外的dataset或者其他information,因此对于实验结果的比较是否公平不好给出意见。
结果分析:
文章里面有一些分析比较有意思。第一个是分析在(c)中的CNN最后的fully connected layer的每一个neuron的作用。如果把face images对每一个neuron的响应分成强,中,弱三类,对每一类算出一个平均脸,最后发现其实每一个neuron都有一个semantic concept。如下图所示:
第二个分析是(c)的CNN的最后fully connected layer的weight matrix,每一个列向量(我觉得好像是行向量)都相当于对应着分开一个attribute的正负样本的hyperplane,那么所有的列向量就是分开所有attributes的hyperplanes。将这些向量用K-means聚类,最后得到下图,相似的attributes聚类在一起,表明相似的attributes的hyperplane也相似。