FaceNet: A Unified Embedding for Face Recognition and Clustering 笔记
本文由Google在2015年发布
1.研究问题
人脸识别、人脸验证、人脸聚类
2.此文工作
传统的方法主要通过 softmax 损失函数对网络进行训练,并在此过程中提取特定的层或输出层特征以构建分类器模型用于完成人脸识别、验证任务。而FaceNet则主张将最终的分类器功能通过神经网络模拟来取代传统的 softmax 机制。采用 ternary 损失函数对整个网络进行优化 training ,实现了一个图像到欧氏空间编码映射的学习过程,并该编码结果随后被应用于人脸识别、人脸验证以及人脸聚类等任务中。
2.1 模型结构

取消了最后的softmax层之后,在数据流中依次进行了L2范数归一化处理,并获得了标准化后的向量表示;随后,在这一向量基础上计算了三元组损失函数。
2.2 Triplet Loss


2.3 Triplet Selection
少量的数据即可生成大量三元组,在合理选择的情况下能显著提升模型性能。
最直接的方法是为每个样本寻找与其最近的反例以及最远的正例,在优化过程中能有效降低计算开销。
然而该方法存在两个主要缺陷:一是计算时间过长,并且容易受到异常数据的影响。
本研究采用以下改进策略:
首先生成mini-batch,在保证每人包含40张图片的同时引入一些反例样本;
其次构建triplet对时不再局限于传统的hard margin策略,
而是专注于创建semi-hard anchor-positive pairs,
并根据特征向量确定semi-hard negatives。

2.4 网络结构
对多个网络进行了对比分析,并详细探讨了其参数设置情况。其中一些网络具有更高的复杂度(1.4亿个参数),而另一些则相对简单(约4.3百万个参数)。本文将此特定的实现应用于手机平台。本文的重点并非在于具体实现细节或算法本身的具体实现方式,并非深入探讨这些细节问题。
2.5 人脸识别、人脸验证、人脸聚类
当通过全连接网络实现视觉数据从图像映射至欧氏空间后,则能够轻松实现以下三项功能:
- 人脸识别:基于最近邻分类器的识别问题
- 人脸验证:计算两个编码之间的欧氏距离并与其预设阈值进行比较
- 人脸聚类:通过采用k-means或其他聚类算法进行聚类分析
2.6 实验与讨论
训练数据:100-200M张图像,分布在8M个人上。恐怖!



该方法在LFW上的人脸对齐表现达到98.87%左右。通过实施进一步的人脸对齐措施,其表现提升至99.63%,显著超过DeepID。
3.总结
替代了传统的softmax损失函数,在创新性地采用了triplet-loss的基础上实现了特征的欧氏编码表示。从而使得人脸识别、目标检测以及聚类分析等相关任务得以显著简化。然而该方法所需的巨大数量的数据却难以被他人复制或模仿。
