? ?
每N步线下在数据的子集上生成一些triplet
在线生成triplet,在每一个mini-batch中选择hard pos/neg样例。
为了使mini-batch中生成的triplet合理,生成mini-batch的时候,保证每个mini-batch中每个人平均有40张图片。然后随机加一些反例进去。在生成triplet的时候,找出所有的anchor-pos对,然后对每个anchor-pos对找出其hard neg样本。这里,并不是严格的去找hard的anchor-pos对,找出所有的anchor-pos对训练的收敛速度也很快。
除了上述策略外,还可能会选择一些semi-hard的样例,所谓的semi-hard即不考虑alpha因素,即:
网络模型
论文使用了两种卷积模型:
第一种是Zeiler&Fergus架构,22层,140M参数,1.6billion FLOPS(FLOPS是什么?)。称之为NN1。
? ?
第二种是GoogleNet式的Inception模型。模型参数是第一个的20分之一,FLOPS是第一个的五分之一。
? 基于Inception模型,减小模型大小,形成两个小模型。
o NNS1:26M参数,220M FLOPS。 o NNS2:4.3M参数,20M FLOPS。
? NN3与NN4和NN2结构一样,但输入变小了。
o NN2原始输入:224×224 o NN3输入:160×160 o NN4输入:96×96
其中,NNS模型可以在手机上运行。
其实网络模型的细节不用管,将其当做黑盒子就可以了。
数据和评测
在人脸识别领域,我一直认为数据的重要性很大,甚至强于模型,google的数据量自然不能小觑。其训练数据有100M-200M张图像,分布在8M个人上。
当然,google训练的模型在LFW和youtube Faces DB上也进行了评测。
下面说明了多种变量对最终效果的影响
网络结构的不同
图像质量的不同
最终生成向量表示的大小的不同
训练数据大小的不同
对齐与否
在LFW上,使用了两种模式:
? ?
直接取LFW图片的中间部分进行训练,效果98.87左右。 使用额外的人脸对齐工具,效果99.63左右,超过deepid。
总结
?
三元组的目标函数并不是这篇论文首创,我在之前的一些Hash索引的论文中也见过相似的应用。可见,并不是所有的学习特征的模型都必须用softmax。用其他的效果也会好。
? 三元组比softmax的优势在于
o softmax不直接,(三元组直接优化距离),因而性能也不好。 o softmax产生的特征表示向量都很大,一般超过1000维。
? ?
FaceNet并没有像DeepFace和DeepID那样需要对齐。
FaceNet得到最终表示后不用像DeepID那样需要再训练模型进行分类,直接计算距离就好了,简单而有效。
? 论文并未探讨二元对的有效性,直接使用的三元对。
参考文献
[1]. Schroff F, Kalenichenko D, Philbin J. Facenet: A unified embedding for face recognition and clustering[J]. arXiv preprint arXiv:1503.03832, 2015.