FaceNet : A Unified Embedding for Face Recognition and Clustering
Abstract
- 学习一个从人脸图像到欧式空间的映射,欧式距离值与人脸相似度直接相关。
采用深度卷积神经网络训练,使用元组最小化的方法来对相似匹配图像和不匹配图像进行分类。
在LFW数据集上达到99.63%正确率,在YTF DB数据集上达到95.12%正确率
1. Introduction
Euclidean embedding:faces of the same person have small distances and faces of
distinct people have large distances.同一人的脸距离小,不同人的脸距离大。
face verification→thresholding the distance between the two embeddings.用阈值判断两个映射距离(判断是不是同一人)
recognition → k-NN classification problem.识别人脸变为k近邻分类问题。
KNN是一种基于实例的学习,通过计算新数据与训练数据特征值之间的距离,然后选取K(K>=1)个距离最近的邻居进行分类判断(投票法)或者回归。KNN是一种监督学习算法。
KNN算法的过程为:
- 选择一种距离计算方式, 通过数据所有的特征计算新数据与已知类别数据集中的数据点的距离
- 按照距离递增次序进行排序,选取与当前距离最小的k个点
- 对于离散分类,返回k个点出现频率最多的类别作预测分类;对于回归则返回k个点的加权值作为预测值
KNN分类
训练样本是多维特征空间向量,其中每个训练样本带有一个类别标签(喜欢或者不喜欢、保留或者删除)。分类算法常采用“多数表决”决定,即k个邻居中出现次数最多的那个类作为预测类。在进行分类时将K个邻居到测试点的距离考虑进去。
举例,K=5,计算出新数据点到最近的五个邻居的举例是(1,3,3,4,5),五个邻居的类标签是(yes,no,no,yes,no)
若是按照多数表决法,则新数据点类别为no(3个no,2个yes);若考虑距离权重类别则为yes(no:2/3+1/5,yes:1+1/4)距离越大,权重越小。
clustering →using off-the-shelf (现成)techniques such as k-means or
agglomerative clustering.k-means聚类算法
聚类属于无监督学习,样本中没有给定标签y,只有特征x,聚类的目的是找到每个样本x潜在的类别y,并将同类别y的样本x放在一起。
K-means算法是将样本聚类成k个簇(cluster),具体算法描述如下:
![]()
改进:
LMNN :large margin nearest neighbour
:大间隔近邻分类,基本原理是通过优化目标函数,在测试样本的邻域范围内,使得同类点的距离变小,不同类点用一个尽可能大的间隔隔开。(有监督)agglomerative clustering
:这是一个自下而上的凝聚层次聚类方法。最初,每个元素都是一个单独类,通过算法将两个最近的类合并成一个较大的类,直到形成一个最大包含所有元素的类。
canopy clustering
:http://www.cnblogs.com/shipengzhi/articles/2540514.htmlStage1、聚类最耗费计算的地方是计算对象相似性的时候,Canopy
Method在第一阶段选择简单、计算代价较低的方法计算对象相似性,将相似的对象放在一个子集中,这个子集被叫做Canopy
,通过一系列计算得到若干Canopy,Canopy之间可以是重叠的,但不会存在某个对象不属于任何Canopy的情况,可以把这一阶段看做数据预处理;通过Stage1得到的Canopy 个数完全可以作为K-means聚类方法的K值(质心个数),一定程度上减少了选择K的盲目性。
Stage2、在各个Canopy 内使用传统的聚类方法(如K-means),不属于同一Canopy 的对象之间不进行相似性计算。
2. Related Work
训练了两种模型:
- Zeiler&Fergus:multiple interleaved layers of convolutions, non-linear activations, local response normalizations, and max pooling layers.
- Inception :mixed layers that run several different convolutional and pooling layers in parallel and concatenate their responses. (书上有)
3. Method
Triplet Loss :对一个特定的人来说,我们想要保证的是anchor 和所有positive样本(同一人)的距离比跟任意negative样本(不同人)的距离都要近
alpha作为一个边界或阈值,用来增加a_p对和a_n对的距离差。
损失函数(最小化) :
怎样选取triplet至关重要,决定模型能否快速收敛。为了有效训练模型,我们的想法是找到距离最远的a_p对(hard positive)和距离最近的a_n对(hard negative),通过最小化损失函数,不断更新模型参数(即样本间距),使其满足公式1条件。但在整个训练集上找到上述三元组是不现实的,这里提出两种策略:
- 线下每n步生成三元组,用checkpoint算法计算最大值和最小值。
- 在线生成数组,在一个mini-batch数据中寻找hard positive/negative
这里采用第二种策略,使用比较大的mini-batch,包含几千样本。在每一个mini-batch中,每种身份都存在少量样本,这样每个身份中a_p距离才有代表性。在实验中每个mini-batch 中每个身份有40个人脸样本,负样本随机采样添加进来。在实践中发现不需通过样本比较寻找hard positive,而是将整个mini-batch中的所有a-p对参与计算,这样在训练早期收敛的更快且更稳定。
semi-hard (避免陷入坏的局部最优解):