论文笔记:
简介:
近年来,人脸识别技术取得了飞速的进展,但是人脸验证和识别在自然条件中应用仍然存在困难。本文中,作者开发了一个新的人脸识别系统:FaceNet,可以直接将人脸图像映射到欧几里得空间,空间距离的长度代表了人脸图像的相似性。只要该映射空间生成,人脸识别,验证和聚类等任务就可以轻松完成。文章的方法是基于深度卷积神经网络。FaceNet在LFW数据集上,准确率为0.9963,在YouTube Faces DB数据集上,准确率为0.9512。
1,前言
FaceNet是一个通用的系统,可以用于人脸验证(是否是同一人?),识别(这个人是谁?)和聚类(寻找类似的人?)。FaceNet采用的方法是通过卷积神经网络学习将图像映射到欧几里得空间。空间距离直接和图片相似度相关:同一个人的不同图像在空间距离很小,不同人的图像在空间中有较大的距离。只要该映射确定下来,相关的人脸识别任务就变得很简单。
当前存在的基于深度神经网络的人脸识别模型使用了分类层(classification layer):中间层为人脸图像的向量映射,然后以分类层作为输出层。这类方法的弊端是不直接和效率低。
与当前方法不同,FaceNet直接使用基于triplets的LMNN(最大边界近邻分类)的loss函数训练神经网络,网络直接输出为128维度的向量空间。我们选取的triplets(三联子)包含两个匹配脸部缩略图和一个非匹配的脸部缩略图,loss函数目标是通过距离边界区分正负类,如图1-1所示。
图1-1 模型结构
脸部缩略图为紧密裁剪的脸部区域,没有使用2d,3d对齐以及放大转换等预处理。
本文中,作者探索了两类深度卷积神经网络。第一类为
,我们在网络后面加了多个1*1*d卷积层;第二类为
。模型结构的末端使用triplet loss来直接分类。triplet loss 的启发是传统loss函数趋向于将有一类特征的人脸图像映射到同一个空间。而triplet loss尝试将一个个体的人脸图像和其它人脸图像分开。下文包含以下内容:
三联子(triplets)loss
triplets筛选方法
模型结构描述
实验结果
评论
2,三联子(triplets)loss
模型的目的是将人脸图像X embedding入 d 维度的欧几里得空间
。在该向量空间内,我们希望保证单个个体的图像
和该个体的其它图像
距离近,与其它个体的图像
距离远。如图5-1所示:
图2-1 triplet loss示意图
其中,
为positive/negtive的边界。
3, triplets筛选
triplets 的选择对模型的收敛非常重要。如公式1所示,对于
,我们我们需要选择同一个体的不同图片
,使
;同时,还需要选择不同个体的图片
,使得
。在实际训练中,跨越所有训练样本来计算argmin和argmax是不现实的,还会由于错误标签图像导致训练收敛困难。实际训练中,有两种方法来进行筛选:一,每隔n步,计算子集的argmin和argmax。
二,在线生成triplets,即在每个mini-batch中进行筛选positive/negative样本。
本文中,我们采用在线生成triplets的方法。我们选择了大样本的mini-batch(1800样本/batch)来增加每个batch的样本数量。每个mini-batch中,我们对单个个体选择40张人脸图片作为正样本,随机筛选其它人脸图片作为负样本。负样本选择不当也可能导致训练过早进入局部最小。为了避免,我们采用如下公式来帮助筛选负样本:
4, 深度卷积神经网络
采用adagrad优化器,使用随机梯度下降法训练CNN模型。在cpu集群上训练了1000-2000小时。边界值
设定为0.2。总共实验了两类模型,参数如表4-1和表4-2所示。
表4-1 CNN模型1
表4-2CNN模型2
5, 实验结果
作者采用了约8million个个体的将近100million-200million张人脸缩略图。人脸缩略图通过脸部检测器紧密裁剪生成。最后,在四类数据集上评价零FaceNet:
hold-out 测试集:从训练集中分出100million图像作为测试集。
个人照片:总共包括12k个人照片。
学术数据集:我们采用了LFW数据集和Youtube Faces DB。
5.1 计算量与准确率权衡
在测试中,随着神经网络深度增加,计算量增加,准确率也增加,如表5-1和图5-1所示。
表5-1 深度神经网络结构与VAL
图5-1 计算量(FLOPS)与准确率关系
5.2 CNN模型结构对loss的影响
作者考察了不同CNN模型对结果的影响,如图5-2所示。
图5-2 网络结构对VAL的影响
5.3 图像质量对结果的影响
模型对图像质量(像素值)不敏感,即使80*80像素的图片生成的结果也可以接受,如表5-2所示。
表5-2 图像质量(像素值)对结果的影响
5.4 Embedding维度对结果的影响
作者测试了不同的embedding维度,结果如表5-3所示,发现128维度是最为合适的。
表5-3 不同输出维度对结果的影响
5.5 训练数据量对结果的影响
随着训练数据量的增加,准确率也随之增加,如表5-4所示。
表5-4 训练数据量与VAL
5.6 评价结果
FaceNet在LFW数据集上取得了99.63%
0.09的准确率;在Youtube Faces DB数据集上获得了95.12%
0.39的结果。在个人照片的数据集上,对单个个体进行embeding后聚类测试,结果如图5-3所示。
图5-3 对单个个体的不同照片进行聚类的结果
6, 评论
FaceNet是google的工作,工作量非常大,结果也很好。FaceNet是一种直接将人脸图像embedding进入欧几里得空间的方法。该模型的优点是只需要对图片进行很少量的处理(只需要裁剪脸部区域,而不需要额外预处理,比如3d对齐等),即可作为模型输入。同时,该模型在数据集上准确率非常高。未来的工作可以有几个方向:
一,分析错误的样本,进一步提高识别精度,特别是增加模型在现实场景中的识别精度。
二,以该模型为基础,将其用于现实应用开发中。(预告:后续文章中,我将对使用FaceNet进行人脸识别的项目源码进行解析,敬请关注)
三,减少模型大小,减少对cpu计算量的消耗,以及减少训练时间(作者在cpu集群上需要1000-2000小时的训练。)
标签:人脸识别,FaceNet,谷歌