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

FaceNet: A Unified Embedding for Face Recognition and Clustering
https://www.sentiance.com/2018/05/03/loc2vec-learning-location-embeddings-w-triplet-loss-networks/
本篇主要是用于人脸识别的“三重损失”——triplet,博客中的例子也用到三重损失,所以简单整理一下

本文将人脸“图片”以粗匹配组和不匹配组组成“三元组”样本,通过“深度卷积网络”嵌入到128维的欧式空间中,使人脸图片可欧式距离度量,实现人脸识别(KNN)、验证和聚类(K-means)任务。

通常人脸识别问题用CNN训练,PCA降维,SVM分类

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

triplet loss

  • 三重损失的思想在于在嵌入空间中,使Anchor样本和Positive样本尽可能近、与Negative样本尽可能远,其中α是强制约束正负样本对之间的最小距离,[]+表示max(0,value)

    xia(anchor);xip(positive);xin(negative)

    f(xia)f(xip)22+α<f(xia)f(xin)22

    所以,损失即最小化
    L=iN[f(xia)f(xip)22f(xia)f(xin)22+α]+

  • 本文中在每个mini-batch中采样了40张脸,并随机采样负样本
    选择难区分的正负样本可以更快收敛,但也容易陷入局部最优,本文随机选择了较多的半难的样本

  • 对于好判断的样本,损失为负,所以损失设置最小值为0,即[]+;对于难判断的样本,一般损失为正;对于略高于正样本的负样本,为了有效学习,添加间隔α,也是期望anchor和positive的距离要比anchor和negative距离多至少α间隔,则正负样本不会挨得很近。

【论文笔记】FaceNet: A Unified Embedding for Face Recognition and Clustering
(盗了个图)

  • 本文中每个batch用了1800样本,AdaGrad,初始学习率0.05,随机初始化模型,α=0.2

https://zhuanlan.zhihu.com/p/35560666
easy triplets(简单三元组): triplet对应的损失为0的三元组

d(a,n)>d(a,p)+margin

hard triplets(困难三元组): negative example 与anchor距离小于anchor与positive example的距离
d(a,n)<d(a,p)

semi-hard triplets(一般三元组): negative example 与anchor距离大于anchor与positive example的距离,但还不至于使得loss为0,
d(a,p)<d(a,n)<d(a,p)+margin

softPN

这个主要参考了loc2vec的博客,里面除了三重损失外,引用了该损失函数(大概思路,具体见博客)

三重损失的主要思想是

d(a,p)<d(a,n)

对于难分离的负样本,通过添加偏置要求到正负样本间有一定距离
d(a,p)+margin<d(a,n)

有可能导致a和p,n都很远的情况,因此考虑np的距离,实现的d(a,n)和d(n,p)都比较大
d(a,p)<min(d(a,n),d(n,p))

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