@wanghuijiao
2021-06-07T11:30:44.000000Z
字数 1730
阅读 677
论文笔记(3)FaceNet: A Unified Embedding for Face Recognition and Clustering
学习笔记
0. 前言
相关资料:
论文基本信息
- 领域:人脸识别、验证、聚类
- 作者单位:Google Inc.
- 发表时间:CVPR 2015
- 一句话总结
- 提出FaceNet系统,直接将图像映射到欧几里得空间的128维特征向量,向量间欧氏距离直接与人脸相似度关联,并提出三元组损失训练FaceNet。算法可应用于人脸识别、验证、聚类任务。在LFW数据集上达到99.63%, YouTube Face DB精度95.12%。
1. 要解决什么问题
- 在此篇文章之前,解决人脸识别的思路大多是用一个分类层在训练集上训练,然后,选择中间层输出作为学习到的人脸特征。这种思路不直接且低效。因此作者提出了用三元组损失直接训练网络输出为128维人脸特征的FaceNet。
- 这种利用三元组损失端到端直接学习人脸特征的思路引发了后续一波设计人脸损失论文的潮流,之后还有一系列的损失设计,如:SphereFace、ArcFace、CosFace等。
2. 用了什么方法
- 主要贡献和创新点
- 提出三元组损失,用三元组损失直接反映得到的特征质量如何。将图像映射到特征空间中, 图像间的平方距离可以直接反映人脸之间的相似度,来自同一身份的人脸距离小,不同身份的人脸距离大。
三元组损失
- 三元组损失会让属于同一个人的人脸与其他人的人脸之间有一个margin。这让不同身份之间的人脸之间有一个距离,因此就能很好区分不同身份的人脸。
- 数学表示:
、、分别表示目标人脸、正例(与目标同一身份的人脸)、负例(与目标不同身份的人脸),表示图像x对应的人脸特征,表示margin。表示目标和正例样本之间的欧式距离,同理表示目标和负例样本之间的距离,损失整体含义为让同一身份人脸距离与不同身份人脸距离之间至少为。
- 图示:
三元组选择
- 三元组选择关系到网络收敛的速度,太过简单的三元组对网络的贡献很小,需要找到那些违背三元组损失的难例来让网络快速收敛。也就是说给定anchor,找一个positive(难例),让anchor和positive之间的距离大,而anchor和hard negative距离小。
- 直接寻找全局最小或最大会导致模型塌缩,且易造成错误标签和质量不好的人脸主导训练,作者提供了两种难例挖掘思路:
- 每n步线下产生三元组,用最近的网络,在子集上计算argmin和argmax
- 线上产生三元组:从mini-batch中筛选难例
- mini-batch中至少包含所有身份的人脸,每人40张。
- 为避免模型塌缩,可以根据以下公式来找半难例:
网络backbone
- Zeiler&Fergus网络、Inception网络
- 作者提供了不同尺寸的backbone网络来适应不同的硬件平台,分别是NN1-NN4,NNS1、NNS2,其中NNS2只有4.3M参数,20M FLOPS,可以运行在手机端。
3. 效果如何
4. 还存在什么问题&有什么可以借鉴