一文了解人脸识别技术的原理 人脸识别技术是什么( 四 )


文章插图
验证信号的表达式如下:

一文了解人脸识别技术的原理 人脸识别技术是什么

文章插图
基于这样的信号,DeepID2在训练的时候就不是以一张图片为单位了,而是以Image Pair为单位,每次输入两张图片,为同一人则为1,如果不是同一人则为-1.
(2)Triplet loss from FaceNet
这篇15年来自Google的FaceNet同样是人脸识别领域分水岭性质的工作 。它提出了一个绝大部分人脸问题的统一解决框架,即:识别、验证、搜索等问题都可以放到特征空间里做,需要专注解决的仅仅是如何将人脸更好的映射到特征空间 。
Google在DeepID2的基础上,抛弃了分类层即Classification Loss,将Contrastive Loss改进为Triplet loss,只为了一个目的:学习到更好的feature 。
直接贴出Triplet loss的损失函数,其输入的不再是Image Pair,而是三张图片(Triplet),分别为Anchor Face, Negative Face和Positive Face 。Anchor与Positive Face为同一人,与Negative Face为不同的人 。那么Triplet loss的损失函数即可表示为:
一文了解人脸识别技术的原理 人脸识别技术是什么

文章插图
该式子的直观解释为:在特征空间里Anchor与Positive的距离要小于Anchor与Negative的距离并超过一个Margin Alpha 。他与Contrastive loss的直观区别由下图所示 。
一文了解人脸识别技术的原理 人脸识别技术是什么

文章插图
(3)Metric learning的问题
上述的两个loss function效果很不错,而且也符合人的客观认知,在实际项目中也有大量的应用,但该方法仍有一些不足之处 。
  • 模型训练依赖大量的数据,拟合过程很慢 。由于contrastive loss和triplet loss都是基于pair或者triplet的,需要准备大量的正负样本,,训练很长时间都不可能完全遍历所有可能的样本间组合 。网上有博客说10000人、500000张左右的亚洲数据集上花一个月才能完成拟合 。
  • Sample方式影响模型的训练 。比如对于triplet loss来说,在训练过程中要随机的采样anchor face, negative face以及positive face,好的样本采样能够加快训练速度和模型收敛,但是在随机抽取的过程中很难做到非常好 。
  • 缺少对hard triplets的挖掘,这也是大多数模型训练的问题 。比如说在人脸识别领域中,hard negatives表示相似但不同的人,而hard positive表示同一个人但完全不同的姿态、表情等等 。而对hard example进行学习和特殊处理对于提高识别模型的精度至关重要 。
  • 2. 对于Metric Learning不足进行修正的各种trick
    (1)Finetune
    参考论文:Deep Face Recognition
    在论文《Deep Face Recognition》中,为了加快triplet loss的训练,坐着先用softmax训练人脸识别模型,然后移除顶层的classification layer,然后用triplet loss对模型进行特征层finetune,在加速训练的同时也取得了很不错的效果 。该方法也是现在训练triplet loss时最常用的方法 。
    (2)对Triplet loss的修改
    参考论文:In Defense of the Triplet Loss for Person Re-Identification
    该作者说出了Triplet loss的缺点 。对于Triplet loss训练所需要的一个三元组,anchor(a)、positive(p)、negative(n)来说,需要从训练集中随机挑选 。由于loss function的驱动,很有可能挑选出来的是很简单的样本组合,即很像的正样本以及很不像的负样本,而让网络一直在简单样本上进行学习,会限制网络的范化能力 。因此坐着修改了triplet loss并添加了新的trick,大量实验证明,这种改进版的方法效果非常好 。
    在Google提供的facenet triplet loss训练时,一旦选定B triplets集合,数据就会按照顺序排好的3个一组,那么总共的组合就有3B种,但是这些3B个图像实际上有多达种有效的triplets组合,仅仅使用3B种就很浪费 。
    在该片论文中,作者提出了一个TriHard loss,其核心思想是在triplet loss的基础上加入对hard example的处理:对于每一个训练的batch, 随机挑选P个ID的行人,每个行人随机挑选K张不同的图片,即一个batch含有P×K张图片 。之后对于batch中的每一张图片a,我们可以挑选一个最难的正样本和一个最难的负样本和a组成一个三元组 。首先我们定义和a为相同ID的图片集为A,剩下不同ID的图片图片集为B,则TriHard损失表示为:
    一文了解人脸识别技术的原理 人脸识别技术是什么

    文章插图
    其中是人为设定的阈值参数 。TriHard loss会计算a和batch中的每一张图片在特征空间的欧氏距离,然后选出与a距离最远(最不像)的正样本p和距离最近(最像)的负样本n来计算三元组损失 。其中d表示欧式距离 。损失函数的另一种写法如下: