【论文阅读笔记】FaceNet: A Unified Embedding for Face Recognition and Clustering

 

论文链接:https://arxiv.org/pdf/1503.03832.pdf

引用:

@article{Schroff2015FaceNet,
  title={FaceNet: A Unified Embedding for Face Recognition and Clustering},
  author={Schroff, Florian and Kalenichenko, Dmitry and Philbin, James},
  year={2015},
}

创新

  • 从人脸图像到紧凑的欧几里德空间的映射,距离直接对应于面部相似性的度量。
  • 使用triplet loss三元损失函数优化嵌入本身,人脸表达仅需128个字节
  • LFW 99.63% YouRube 95.12%

简介

  • 学习人脸图像的欧几里得嵌入表达,两个人脸图像的欧几里得嵌入表达L2范式平方表示人脸相似度,L2距离越小,越相似
  • 获取嵌入表达之后,人脸验证转变为阈值选取问题,人脸识别是KNN分类,人脸聚类可以使用经典的KMeans等方法。

【论文阅读笔记】FaceNet: A Unified Embedding for Face Recognition and Clustering_第1张图片

  • 传统方法:瓶颈层表达人脸,无法保证泛化性能,且人脸表征维度大

  • FaceNet方法:使用基于LMNN(Large margin nearest neighbor)的三元损失直接训练得到紧凑的128维嵌入表达。使用两张匹配的人脸小图和一张不匹配人脸,损失通过距离间隔尽量将正例对和负例分开。其中,小图是人脸区域的紧密裁剪,不需要对齐,只有缩放和平移。
  • 三元组选取是保证高性能的关键。本文受curriculum learning启发,提出了一种新的在线负样本挖掘策略,在训练时不断增加三元组的难度。为了提高聚类精度,本文还研究了正样本难例挖掘技术,鼓励单人嵌入粒度下的球形聚类

【论文阅读笔记】FaceNet: A Unified Embedding for Face Recognition and Clustering_第2张图片

方法

相关工作:

对图像进行一些2D或3D变换预处理,深度神经网络模型特征表达,利用PCA降维,使用SVM分类等

Siamese模型进行距离度量,SVM分类

多模型融合,三元损失函数使用

本文方法:

框架:基于DNN(ZF或inception),实现端到端学习系统。

具体做法:三元损失,学习从图像x到特征空间\mathbb{R}^{^{d}}的嵌入表达f(x),该特征空间中的人脸特征平方距离越小越相似

说明:没有进行三元损失的对比试验,但是分析了为什么三元损失更加适合人脸验证。主要可以概括为,使用二元对仅仅是将相同的人脸尽量映射到特征空间中的同一点,即只考虑了类内间隔;而三元损失,不仅仅是将同一人脸映射到一个流形上,并且区分不同人脸,即同时考虑类内间隔和类间间隔

一、三元损失

嵌入表达表示为f(x)\in \mathbb{R}^{^{d}},是将输入图像x嵌入到D维欧式空间,并且我们限制x在超球上。该损失函数基于LMNN算法,保证图像预所有正例图像的距离比与所有负例图像更近。

\left \| |f(x_{i}^{a})-f(x_{i}^{p})\right \|_{2}^{2}+\alpha<\left \| |f(x_{i}^{a})-f(x_{i}^{n})\right \|_{2}^{2}\forall (f(x_{i}^{a}),f(x_{i}^{p},f(x_{i}^{n}))\in\ \tau

最小化损失函数表达式:

L = \sum_{i}^{N}\left [ \left \| |f(x_{i}^{a})-f(x_{i}^{p})\right \|_{2}^{2}-\left \| |f(x_{i}^{a})-f(x_{i}^{n})\right \|_{2}^{2}+\alpha\right ]_{+}

其中,\alpha是正负例之间的间隔,\tau表示三元组数据集。

二、三元组选择

1、分析

如果我们将所有的三元组都作为训练数据,则存在大量的易分数据,这里可以参考一下SVM支持向量的思想,远离分界线的样本对模型的贡献小,还会导致收敛慢。因此,选择难例三元组是关键的步骤之一。

正负例选择的规则是,与anchor图像距离最大的正例,与其距离最小的负例,即

argmax_{x_{i}^{p}}\left \| f(x_{i}^{a})-f(x_{i}^{p})\right\|argmin_{x_{i}^{n}}\left \| f(x_{i}^{a})-f(x_{i}^{n})\right\|

但是,上述规则在数据集中的应用存在难点:在整个数据集上计算一遍不可行,且训练效果由于误分类和图像质量可能较差。因此需要进行设置:子数据集上线下每隔n步采样,线上在mini-batch上选择。

2、具体实现

线上:(1) 取大量的mini-batch,mini-batch内部计算argmin和argmax。(2) 如一个mini-batch中同一本体40张图,随机采样负例样本加入每个minibatch。(3) 每个mini-batch中选择所有正样例对和难负例(all anchor-positive pairs and hard negitives)。说明:mini-batch中所有正样例对比选择难正样例对更鲁棒,训练开始阶段收敛速度较快。

获取难负例的问题:如果选择最难的负例,会收敛到极差的局部极小值点,导致模型崩溃。因此我们采用半-难例(semi-hard)即比正样例到anchor的距离更远但是仍然难区分(在\alpha距离内)

总结一下三元组选择的原则:第一点就是利于收敛,第二点是更高效。

三、DNN

训练与参数:lr=0.05, \alpha=0.2,Train-time=1000-2000h,SGD,AdaGrad,ReLU

策略一:ZF-net+1*1*d,140 million paras,1.6 billion FLOPS

策略二:GoogleNet Inception models,6.6-7.5M paras,500M-1.6B FLOPS

【论文阅读笔记】FaceNet: A Unified Embedding for Face Recognition and Clustering_第3张图片

model input paras FLOPS
NSS1 165*165 26M 220M
NSS2 140*116 4.2M 20M
NN1 220*220 145M 1.6B
NN2 224*224 7.5M 1.6B
NN3 160*160   大于NN4
NN4 96*96   285M

数据

数据集:LFW,YouTube Faces

正例对P_{same},负例对P_{diff},TA(true accepts), FA(false accepts)

TA(d)=\left \{ (i,j)\in P_{same}, with\, \, D(x_{i},x_{j})\leqslant d \right \}

FA(d)=\left \{ (i,j)\in P_{diff}, with \, \, D(x_{i},x_{j})\leqslant d \right \}

VAL(d)=\frac{\left |TA(d)\right |}{\left |P_{same}\right |}FAR(d)=\frac{\left |FA(d)\right |}{\left |P_{diff}\right |}

实验

 

【论文阅读笔记】FaceNet: A Unified Embedding for Face Recognition and Clustering_第4张图片

【论文阅读笔记】FaceNet: A Unified Embedding for Face Recognition and Clustering_第5张图片

【论文阅读笔记】FaceNet: A Unified Embedding for Face Recognition and Clustering_第6张图片

 

【论文阅读笔记】FaceNet: A Unified Embedding for Face Recognition and Clustering_第7张图片

根据实际需求选择合适的网络,参考parameter number,FLOPS,VAL值选择。

图像质量、训练集大小、输入数据尺寸的影响详见表格和原文分析,不做赘述。

你可能感兴趣的:(机器学习,深度学习,论文阅读,人脸检测识别)