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


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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值