face detection除了CNN还可以用DPM、model-based、exemplar-based、cascade structure做;face alignment有两种方法Regression-based methods和template fitting approaches;MTCNN是少数将detection和alignment一起做的算法;mining hard samples很重要(注意只对3个task的第一个有关,即face/non-face),分为online(本文采用,更好)和offline方式;
首先将图像缩放成‘图像金字塔’;利用P-Net提出候选框以及对应的bbox回归向量并校准,然后用non-maximum suppression (NMS)合并高度重叠的候选框;输入到R-Net来过滤掉大量错误候选框,再次利用bbox回归进行校准,以及NMS合并;O-Net输出5个关键点的位置;专门和Cascade CNN进行了三个网络的准确率对比,都比前者高;三个task一起训练:face/non-face classification, bounding box regression, and facial landmark localization,前者是个二分类问题,使用cross-entropy loss,中间的是回归问题,使用左上角以及宽高,欧拉loss;后者也是回归问题,也是使用欧拉loss,使用左眼有眼左边嘴右边嘴鼻子,一共5个坐标对应10维向量;整个训练是一个联合的多loss训练,P-Net(和R-Net)、O-Net分别的3种loss比例设置为2:1:1和2:1:2,即O-Net对关键点关注更多一点;三个task分别在三个不同数据集上训练;作者说他的face detection准确率比以往方法都高,具体是看PR曲线包围的面积;face alignment也比以往方法好很多,具体分别比较眼睛鼻子嘴巴的准确率;实时性很好;
为啥mining hard samples很重要?因为简单的样本训练出来的网络不会具有很好的泛化能力或探测能力。P-Net、R-Net、O-Net如何发生级联关系??依次将输出传递给后者???每个网络在前一个网络的基础上继续训练和完善,如过滤掉大框无效框;虽然对同一张图像进行训练,因此各种标记(如关键点和框回归)是一样的,但由于P-Net、R-Net、O-Net的网络结构以及卷积池化全连接参数不一样,因此训练效果也不一样,通常是越来越好;
P-Net输入12×12×3,R-Net输入24×24×3,O-Net输入48×48×3,运行速度依次减慢,效果递增(12×12×3、24×24×3、48×48×3构成金字塔);R-Net的输出和P-Net完全一样,同样由人脸判别、框回归、关键点位置预测三部分组成。总损失为各部分加权相加;P-Net和R-Net更关注位置,O-Net更关注关键点;
在真正人脸识别前,需要将图像转化为特征向量(类似词向量),人脸越相似,欧式距离越小,FaceNet embedding as feature vectors
三元组损失(Triplet Loss),直接对距离进行优化,目的是训练同一个人的图像距离接近,不同人的距离远;对数据集要求大、选择有技巧性;
中心损失( Center Loss )不直接对距离进行优化,不需要较大数据集,思路是,让每张图像尽可能接近其‘类别中心’,提高‘内聚性’,类似‘聚类’;
关于Triplet Loss,参考FaceNet: A Unified Embedding for Face Recognition and Clustering;
关于Center Loss,参考A Discriminative Feature Learning Approach for Deep Face Recognition,其依据是image pairs and triplet相对image本身数量太大,导致收敛慢和不稳定,需要精心选择pairs and triplet,计算复杂度高,不方便;其实是center loss和softmax loss一起使用,用一个参数控制比例叠加成总的loss,分别用来把同一个体聚在一起,把不同个体分开;准确率没有超过FaceNet!!!
0-Net得到的关键点对训练人脸向量有什么作用?没有关键点难道不能训练人脸向量吗?可以,比如facenet就不需要关键点甚至不需要align;
mtcnn负样本:
https://blog.csdn.net/s_l1994/article/details/81027137
http://vis-www.cs.umass.edu/lfw/
http://www.face-rec.org/databases/
人脸数据集或benchmark
face detection:FDDB(Face Detection Data Set and Benchmark) and WIDER FACE benchmark、Annotated Faces in the Wild (AFW)
face alignment:AFLW(Annotated Facial Landmarks in the Wild)benchmark、 CelebA
face identfication|verfication:CAISA-WebFace、VGG-Face、MS-Celeb-1M、MegaFace、lfw
face detection的难点在:人脸位置和大小不确定,搜索空间大;姿势变化、夸张的面部表情、极致的光照;需要及时和实时性;最早的Viola-Jones face detector使用Haar feature,但对于复杂的环境效果不好;
MTCNN只是作为Pre-processing预处理(Face detection and alignment),接下来用facenet识别;其中facenet是由OpenFace启发得到的;
MTCNN和Cascade CNN的关系:
MTCNN是基于Cascade CNN改进的,后者只是face detection而没有关键点和align;MTCNN也是Cascade级联的,‘首先快速拒绝错误探测’这一思路也是来自Cascade CNN;多分辨率结构也是来自Cascade CNN(但最早来自物体探测);通用物体探测方法如RCNN无法直接用于人脸探测的原因:small-sized faces and complex appearance variations;12-net、12-calibration-net、24-net、24-calibration-net、48-net、48-calibration-net,有单独的NMS和全局的NMS;Cascade CNN使用logistic regression 作为二分类目标函数;
Faceness-Net的依据:基于面部属性或部件的探测能力更强,即使图像被污染。
第一阶段,打分机制,对头发眼睛鼻子嘴巴等打分,得分相加faceness score,提出面部区域框,进行排序;第二阶段,使用作者2014年的论文MTCNN改善候选框(Facial landmark detection by deep multi-task learning);比Cascade-CNN更快更准;
人脸探测:
Cascade CNN(2015)、MTCNN(2016)、Faceness-Net(2017)、Faster RCNN (2017、2018)
人脸对齐(人脸关键点检测):
ASM、AAM、DCNN 、TCDCN 、MTCNN 、TCNN
RCPR, TSPM, Luxand face SDK, ESR, CDM, SDM
得到人脸关键点之后进行人脸对齐,“仿射变换”就是:“线性变换”+“平移”
facenet是google的,OpenFace是cmu的(是一个通用库),DeepFace是Facebook的,deepid系列是汤晓鸥团队的;
facenet相对deepid方法更简单,更直接,效果更好;128维;不需要alignment;基于Zeiler&Fergus style networks和Inception type networks,论文里叫做NN1和NN2,没有自己设计网络;为了快速收敛,需要进行triplet selection;
DeepFace关注对齐和表示,首先3D-aligned(本文重点),使用自创的9层网络,然后同样得到face representation feature vector ,The goal of training is to maximize the probability of the correct class,cross-entropy loss
人脸识别四步: detect=align=represent=classify.
Joint Bayesian是一个人脸分类器,即判断2张人脸对应的向量是否属于同一个人,是第四阶段的工具;
人脸表示和识别:
DeepFace 2014 97.35%
DeepID1 2014 97.45%
DeepID2 2014 99.15%
DeepID2+ 2014 99.47%
FaceNet 2015 99.63% (using extra face alignment ,没有align准确率只有98.87%±0.15 )
DeepID3 2015 99.53%
deepface说我要3D-align,deepid说我要roughly-align,facenet说no align
DeepID系列重点就是两个监督信号!!!
DeepID1没啥特别的,就是利用设计好的卷积网络,输出层固定为160,来提取特征,利用face landmarks以及不同的face region,不同的scale;同样使用Joint Bayesian进行Face Verfication;和DeepFace同时独立提出
DeepID2目的训练一个人脸特征提取器,可以扩展到任意个体(即不在训练集中),思路和facenet类似,同样是减小intra-personal差异,扩大inter-personal差异,但具体是利用了两个监督信号,face verfication信号和face identification 信号(个人认为这个在facenet中是合并的,即不区分是否同一个体,直接按长相相似度来);Face Verfication最后用 Joint Bayesian model完成;在face verfication accuracy on LFW达到99.15% ,大大超过DeepID和DeepFace;
DeepID2+发现训练得到的face向量天然有三大属性:sparsity, selectiveness and robustness,帮助人们理解机制,如为啥有如此高准确率;是对DeepID2的改进,增加了隐层维度;发现对同一个人的不同照片,神经元的兴奋或抑制是一致的,即总是这些神经元兴奋那些神经元抑制;
DeepID3基于VGG and GoogLeNet精心设计,将DeepID2提出的identfication-verfication信号同时加到内部和最终特征提取层;最后作者说,深层网络是否一定比浅层网络好是个开放问题;