FaceNet: A Unified Embedding for Face Recognition and Clustering 笔记

来源:互联网 发布:淘宝被禁言了怎么解除 编辑:程序博客网 时间:2024/05/16 11:24

此文由google 于2015年发表
论文链接:http://xueshu.baidu.com/s?wd=paperuri%3A%28b5457de3c4f74fbbb7d4703e93dc5974%29&filter=sc_long_sign&tn=SE_xueshusource_2kduw22v&sc_vurl=http%3A%2F%2Farxiv.org%2Fabs%2F1503.03832&ie=utf-8&sc_us=12680360272531669381

1.研究问题

人脸识别、人脸验证、人脸聚类

2.此文工作

传统的方法:首先利用softmax 损失函数训练网络,然后从网络中抽取某些层或输出层作为特征,然后基于此特征训练分类器,对人脸进行识别、验证。
FaceNet 则认为最后的分类器其实也可以用网络模拟,替代softmax。
FaceNet 采用三元损失函数训练网络,直接进行端到端学习一个图像到欧式空间的编码方式,然后基于这个编码再做人脸识别、人脸验证和人脸聚类。

2.1 模型结构

这里写图片描述
去掉了最后的softmax ,经过L2归一化,得到特征表示,再基于这个特征计算三元组损失。

2.2 Triplet Loss

这里写图片描述
这里写图片描述

2.3 Triplet Selection

很少的数据就能产生很多的三元组,选取合适的三元组可以加快收敛速度。
最粗暴的方式是对每个样本,找到离它最近的反例和最远的正例,然后优化,但是这样会有两个问题:耗时,比训练时间还长;容易受不好的数据主导。
采用的方法:
生成mini-batch, 每个mini-batch 中每个人平均有40张图片,然后随机加入一些反例
生成triplet, 不是找到所有的艰难正样本,而是找到所有的anchor-positive 对,然后根据这些特征对,找到semi-hard-negative
这里写图片描述

2.4 网络结构

此文中比较了好几个网络,有些网络很深,参数较多(1.4亿),也有网络较浅,参数较少(4.3百万,此网络可用于手机)。此文重点不在网络,可视为黑箱子。

2.5 人脸识别、人脸验证、人脸聚类

当完成端到端学习到图像到欧式空间的编码,则可以轻松完成以下三个任务:
 人脸识别:成为一个k-NN 问题
 人脸验证:对两个编码求欧氏距离,与阈值对比
 人脸聚类:利用像k-means 之类的聚类算法

2.6 实验与讨论

训练数据:100-200M张图像,分布在8M个人上。恐怖!
这里写图片描述
这里写图片描述这里写图片描述
结果:在LFW 上人脸不对齐,效果在98.87%左右,如果使用额外的人脸对齐,效果在99.63%,优于DeepID

3.总结

抛弃了softmax, 创造性的采用triplet-loss, 得到特征的欧式编码,使得人脸识别、验证、聚类大大简化。但是其超大量的训练数据他人难以效仿。

0 0