文章插图
验证信号的表达式如下:
文章插图
基于这样的信号,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效果很不错,而且也符合人的客观认知,在实际项目中也有大量的应用,但该方法仍有一些不足之处 。
(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表示欧式距离 。损失函数的另一种写法如下:
- 原来伍珂玥和单依纯都参加过《我想和你唱》,当时伍珂玥叫伍翠华
- 《超级飞侠》第十一季,你看懂了吗?带你了解动漫主题与寓意
- 学习历史的感受
- etc怎么办理 etc怎么办理划算
- iPhone密码忘了解锁方法 忘记iphone锁屏密码怎么办
- 什么是百度指数带你了解什么是百度指数
- 用户画像是什么?一文带你讲透:什么是用户画像
- 公务员招考较多的专业 公务员考试中,这三个热门专业招人多,考生值得了解嘛
- 医疗险年限不够是否会影响退休金领取?一分钟了解
- Win10输入法栏不见了解决方法 win10输入法的选字框不见了