FaceNet: A Unified Embedding for Face Recognition and Clustering论文综述(2015)

1、 为什么要做这个研究(理论走向和目前缺陷) ?
以前的人脸验证太复杂,不直接(用的中间瓶颈层表征人脸,还有各种前处理、PCA降维以及SVM分类等)。
2、 他们怎么做这个研究 (方法,尤其是与之前不同之处) ?
直接优化跟当前任务相关的损失函数,提出用嵌入embedding来表征人脸,有利于人脸识别,人脸验证,人脸聚类等任务的统一。
提出三元组损失。
3、 发现了什么(总结结果,补充和理论的关系)?
嵌入向量的维度不需要太高,三元组损失的三个员的选择很重要,CNN网络也很重要等。

摘要:大规模的人脸识别和验证很具有挑战性。本文提出一个系统FaceNet,能够直接学习人脸图片到紧凑的欧式空间的映射,这个欧式空间中距离直接对应人脸相似度的度量。有了这个空间,人脸识别、验证聚类可以通过将FaceNet嵌入(输出特征)作为特征向量来实现。
此方法用训练好的深度卷积神经网络直接优化嵌入本身,而不是优化中间瓶颈层。为了能够训练,我们用了通过一个新颖的在线三元组最小化方法实现的粗糙匹配/不匹配的三元组。此法的优势就是拥有更高的表征效率:每张脸只用128个字节实现最先进的性能。
我们还引入了和谐嵌入、和谐三元损失的概念,他们描述了不同人脸嵌入的版本(指不同的网络产生),这些嵌入互相兼容,支持直接比较。

1引言
本文为人脸验证(是同一个人吗?),人脸识别(是谁?)和聚类(这些脸中找出大众脸)提供了一个统一的系统。我们的方法就是利用CNN学习一个图片的欧式嵌入。这个网络训练的时候直接用嵌入空间中的L2距离代表人脸相似度:同一个人的脸的距离很小。
一旦嵌入产生,前面所提到的任务就比较直接了,人脸验证只需要给两个嵌入之间设置一个距离阈值,人脸识别成为一个k-NN分类问题,聚类可以现成的k-means方法实现。

之前的人脸识别方法都是基于了一个cnn用一个在一系列已知人脸上训练好的分类层,然后把一个中间瓶颈层作为训练集之外的人脸的表征以实现通用的识别。这个方法的缺点就是间接性和低效(因为是用中间的瓶颈层作为表征,必须要保证瓶颈层的表现力能够泛化到新的人脸,而且中间瓶颈层往往很大,大约1000维度)。近期有些工作用了PCA降维,但这只是一个限量变换,用一层神经网络就能实现。

相对于之前的网络,FaceNet用一个三元组损失函数直接训练输出为一个紧凑的128-D嵌入,这个三元组中,有两个匹配的缩略图和一个不匹配的缩略图(一共三张图的嵌入,故称谓三元组),这个损失旨在用一个间隔分离正对和负对。这个缩略图是裁剪的人脸区域,并不是2D或3D对齐的,但是会有平移和缩放。

选哪个三元组很重要,我们呈现了一种新颖的在线负例样本挖掘策略,能够确保不同增加网络训练三元组的难度。为了提高聚类准确率,我们也探索了难正例挖掘策略,能够促进一个人的嵌入的球形聚类。

2.相关研究
研究了两种CNN网络,Inception和ZFNet。

3、方法
将CNN看做一个黑箱,只关注三元组损失,即希望得到一个图片x到一个嵌入f(x),这个嵌入能够表征人脸,无需再去关注原始的人脸图片。嵌入之间的欧式距离可以用作评判人脸的相似度。
理论上感觉比两元组(正例和负例)损失更好,因为两元组损失会促使一个的所有人脸映射到不同的点。而三元组损失,会促使一个人的脸与另外一个人的脸产生边界。这就允许一个人的脸有多种形态,同时迫使一个人脸与另外一个人的脸产生距离和分辨性。

3.1 三元组损失
嵌入f(x)是一个d维的向量,还要归一化,这样嵌入就成了超球面上的一个点。三元组损失的目的就是希望anchor图片与positive图片的距离要小于anchor图片与negative图片的距离。
在这里插入图片描述
T是可能的三元组的集合。
损失函数就是下面这样的:
在这里插入图片描述
随意选择三元组会使得很多三元组都能很容易满足条件,故需要选择比较难的三元组。

3.2 三元组选择
为了确保更快的收敛,选择违反公式1(eq1)的三元组比较好,这就意味着给定Anchor图片,需要找到与A图差异最大(argmax)的positive图作为P图,同时选择与A图差异最小(argmin)的negtive图作为N图。但是在整个数据集上计算argmax和argmin是不现实的,而且误标注的存在可能回到值训练结果变得更差。有如下几种解决方案:

  1. 每隔n步用最近的训练模型离线计算一次三元组,计算出数据子集的argmin和argmax。
  2. 在线生成三元组。在每个batch中都计算argmin和argmax。
    本文采取的是第二种生成三元组的方法,即在线生成。为了保证A-P对有意义,需要确保每个batch中存在一定数量的同一个人的人脸样本,本文保证每个batch中有40个同一个人的人脸,同时N例是随机采样的,然后加入到这个Batch中。
    实验时,在每个batch中并不是只用最难的positive例,而是用了所有的positive例,同时选择最难的negtive例,我们发现这样用所有的positive例的方法更稳定,同时在初始训练阶段收敛的更快。
    选择最难的negative例在训练早期会导致局部最优解,会导致模型崩塌,即所有嵌入都为0(f(x)=0)。可通过如下方法解决:
    在这里插入图片描述
    这样选择的negative会位于边际alpha之间。
    我们也研究了三元组的离线生成方法,离线生成可以允许使用更小的Batch size。结果不怎么样。
    如上描述,合适的三元组选择方法很重要,一方面我们希望bs小一些来加快SGD算法的收敛,另一方面,更大的bs会更加高效。BS的选择主要考虑的因素就是三元组的选择方法,即怎么选择正例和负例。实践中,我们的BS是1800左右。

3.3 深度卷积网络
两类:
1) 第一类是基于ZFNet改的,在标准的卷积层之间加了11卷积,最后得到22层。NN1.
2) 第二类是基于GoogLeNet改的,NNS1, NNS2, NN2(结构最复杂,参数最多), NN3(结构同NN2,但是降输入大小为160
160),NN4(降输入大小为9696,去除后面层的55卷积)

4 数据集和评估
在4个数据上评估,在LFW和YTF数据集上评估了人脸验证任务(给定两张输入图片,设置L2距离阈值,根据计算的距离是大于还是小于阈值确定是否属于同一个人)。测试集中有两类人脸对,Psame和Pdiff。
定义真接受(true accepts,即正确分类为same的人脸对)为:
在这里插入图片描述
定义假接受(false accept, 即错误分类为same的人脸对)为:
在这里插入图片描述
计算验证率VAL(d)和误接受率FAR(d),验证率代表的是测试集中同一个人脸对预测对了的比例,误接收率代表测试集中不同人脸对预测错了的比例:

在这里插入图片描述
4.1 交叉验证集,从训练集中分出来的(分布于训练集一样)。
4.2 个人图片:经过净化的从训练集分出来的图片。
4.3 学术数据集:LFW数据集,计算平均分类准确率和均值的标准差。
Youtube Faces DB数据集:同LFW,但是不是计算图片对,而是视频对。

5 实验
在100M-200M张训练人脸缩略图中大概有8M个不同的人。首先一个人脸检测器运行在每张图片中,然后crop出其中的人脸裁剪图,这些裁剪图可能大小不一致,故需要Resize到同一大小输入到网络中。输入的人脸缩略图大小为9696~224224个像素。

5.1 计算与准确率的权衡
下图展示了在误接受率FAR(d)为0.001(通过调节距离阈值获得)的情况下,不同模型的VAL(d)率。
在这里插入图片描述

NN2:224*224输入的Incepton结构如下:
在这里插入图片描述
在这里插入图片描述5.2 CNN模型的影响
Inception模型(NN3)虽然参数少,但是取得了更好的性能。但是相对来说还是模型越大越好。
5.3 图片质量的影响
下表4左表示,对图像进行压缩后的验证率,右侧表示图片像素大小对验证率的影响。

在这里插入图片描述
5.4嵌入向量的维度
嵌入向量的维度并不是越大越好,因为越大意味着需要更多的训练。实验发现128挺好,128维的向量大概是128个字节。
在这里插入图片描述
5.5 训练集的大小:越大越好
在这里插入图片描述
5.6 在LFW数据集上的性能
LFW数据制作人脸缩略图是有两种模式:

  1. 利用数据集自己提供的人脸中心点来进行crop
  2. 利用一个人脸检测器来crop人脸(效果更好)
    5.7 Youtube Faces DB上的实验
    5.8 人脸聚类
    我们的紧凑的嵌入向量(128维)能够将一个人的各种照片都聚集起来。而且对人脸姿势和光照条件都有较好的鲁棒性。

6 总结
提供了一种方法能够直接学习一张人脸图片在欧式空间里的嵌入以实验人脸验证。这就与其他的基于CNN瓶颈层的方法,或者有很多前处理以及PCA降维和SVM分类组合起来的方法区别开来。这种直接优化与当前任务相关损失的方法更高效。
另外,只需要一个最小的对齐即可(脸周围的紧密裁剪)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值