当前位置: www.2977.com > 新闻中心 > 技术分享 > 【澳门葡京技术分享】第五十八期:人脸识别经典—FaceNet

【澳门葡京技术分享】第五十八期:人脸识别经典—FaceNet

【澳门葡京技术分享】第五十八期:人脸识别经典—FaceNet


近年来,随着深度学习的火热发展,人脸识别技术不断创出新高度,更多方法的发掘及大牛们项目的持续开源,让人脸识别、深度学习甚至是人工智能显得不再神秘,LFW识别率99%已经随处可见,今天线上澳门葡京网址技术专家就人脸识别的一些经典算法和资源进行分享,感受大神们的“最强大脑”!

在实际应用中,人脸验证(判断是否是同一人)、人脸识别(这个人是谁)和人脸聚类(寻找类似的人)在自然场景应用仍面临一些困难。为了降低背景和环境等因素带来的干扰,人脸识别一般先经过人脸检测(Face Detection)、人脸对齐(Face Alignment)等预处理,然后将人脸图像映射到欧几里得等空间,空间距离的长度代表了人脸图像的相似性。只要该映射空间生成,人脸识别,验证和聚类等任务就显得不那么复杂。


由于先前的网络和算法在各种测评榜单上不断被”挤下去”,似乎激发不起大伙的兴趣,那么本期我们就一起看看Google大神的匠心之作——FaceNet。


FaceNet其实就是一个前言所诉的通用人脸识别系统:采用深度卷积神经网络(CNN)学习将图像映射到欧式空间。空间距离直接和图片相似度相关:同一个人的不同图像在空间距离很小,不同人的图像在空间中有较大的距离,可以用于人脸验证、识别和聚类。在800万人2亿多张样本集训练后,FaceNet在LFW数据集上测试的准确率达到了99.63%,在YouTube Faces DB数据集上,准确率为95.12%。


算法


作为经典的深度学习、人脸识别案例,依然采用主流的深度神经网络来提取特征,并采用triplet_loss来衡量训练过程中样本之间的距离误差。在训练前或者在线学习中不断给神经网络制造“困难”,即一直在寻找与样本最不像的“自己”,同时寻找与自己最像的“他人”。通过随机梯度下降法,不断缩短自身所有样本的差距,同时尽可能拉大与其他人的差距,最终达到一个最优。通过这样一种嵌入学习(Embedding learing),能对原始的特征提取网络输出层再进一步学习,从而改善特征的表达。

Triplet Loss:

1.jpg

图1 通过学习后,正样本对距离更近,负样本对距离更远

999.png

模型

对于整个FaceNet结构,这里的特征提取可以当作一个黑盒子,可以采用各式各样的网络。最早的FaceNet采用两种深度卷积网络:经典Zeiler&Fergus架构和Google的Inception v1。最新的FaceNet进行了改进,主体模型采用一个极深度网络Inception ResNet -v2,由3个带有残差连接的Inception模块和1个Inception v4模块组成。

2.jpg

图2  FaceNet系统框架


如图2所示,模型的整体框架与其他经典深度学习方法基本一致。前面特征提提取部分也是基于CNN的,只不过深度网络Inception-v4,后面接一个特征归一化层,使得特征的二范式3.jpg,即将图像特征都映射到一个超球面上,这样可以规避样本的成像环境带来的差异。最后采用triplet_loss作为损失,加上随机梯度下降法(SDG,Stochastic Gradient Descent)进行反向传播。模型Inception还连接了残差,也是本方法的突出点之一,提高了训练收敛速度。各个模块具体如下:


4.jpg

图3 Inception-ResNet-v2网络简化示意图


4.jpg

 (左)典型的Inception-v4 网络

(右)Inception-ResNet-v2网络输入部分


网络:Inception-ResNet-v2

新一代的FaceNet采用Inception-ResNet-v2网络,在原有的Google的Inception系列网络的基础上结合了微软的残差网络ResNet思想。其中,残差连接(Residual connections )允许模型中存在shortcuts,可以让研究学者成功地训练更深的神经网络,同时还能明显地简化Inception块。


1504250633217572.jpg

图4(a)                                      图4(b)

6.jpg

图4(c)                                               图4(d)

图4  不同尺度,不同连接方式下的Inception



策略

1、Triplet选取策略:

为了使类内距离更小,类间距离更大,如何选择合适的triplet显得格外重要。因此,训练中我们尽可能选择两种困难样本对(hard negative pair 和 hard positive pair)。在n张样本(包含同一个人和不同人的)的集合里,总共可能出现n2种比较。对于每张训练样本,首先可以考虑从一个ID的自身样本集中找出与当前训练样本最不像的样本形成hard positive pair;然后与其他类的所有样本比对,找出最像的样本,与之形成hard negative pair。


当然,对于大量训练样本集,每次训练要在完整数据集上计算argmin和argmax是不可能的,而且容易被样本分布左右训练结果。因此,这里设置可以在每N步过后,使用最近生成的网络,计算子集里的两两差异,生成一些triplet,再进行下一步训练。也可以设置mini-batch,这个mini-batch固定的同一类数量分布(比如都为40张)和随机负样本,用在线生成和选取mini-batch里的hard pos/neg 样例。这里hard negative pair可以选择mini-batch里的所有同类形成的正样本对,而不一定是最困难那对。Batch大小会影响梯度收敛,但是太小batch对选择triplet不利。经过多次实验,这里batch size设置为1800。


除此之外,还可以对triplet进行约束:


7.jpg


与传统的softmax loss相比,triplet_loss直接对距离进行度量和优化,效果更明显。根据其他工程人员经验,实际训练中,可以对softmax loss和triplet_loss进行加权,在线调整权值,达到最优。


2、训练策略:

残差不是训练极深度神经网络的必要条件,但能明显提升训练速度。


为了防止陷入局部最优,防止训练过程中网络突然“死亡”(梯度都接近于0),一味地下调学习率或者外加batch-normaliztion不是长久之计,因此这里采用了在原来的激活层外连接残差块。


8.jpg

图5残差连接块


小结

Inception-v4网络+最新的residual connection技术+triplet_loss咋眼一看,强大完美的组合有木有!既提取了鲁棒人脸特征,又加快训练速度,更重要的是拉开了类别之间的差距。但是,实际上会遇到一些棘手的问题,比如triplet选取有偏差(绝大多数可能出现);网络庞大,硬件资源有限时batch size无法加上去;训练采用欧式距离而实际验证比对时难以直接比较,使用时需要重新映射或转换到(0,1)之间等。当然,FaceNet本身也在不断改进和演化,更强的网络和方法持续发布,其他平台的版本也在开发中。


实验与性能

FaceNet早已开源,其中tensorflow的版本在http://github.com/davidsandberg/facenet处,而且项目不断在更新。有兴趣的朋友可以自己试试,可以尝试将其中的黑盒部分(网络模型)替换成其他的经典模型,说不定会有意外收获哦,但是由于业内众所周知的问题,tensorflow被许多大牛们冠以反人类深度学习框架的美名,说实话,很多工程上的同行是不情愿去用它的,不过从研究角度上讲,作者欣然将源码精华分享,是业内的福音。


原项目中,谷歌大神在八百万人脸数据集上训练。学习率0.045,momentum为0.9,batch size 1800,拼死将LFW刷到99.6%以上!(前提是得有8百万人,2亿张样本…)


未完待续......