更全面的阅读记录可以参考这篇博客:https://blog.csdn.net/xuluohongshang/article/details/78965580
背景描述
提出了一个三元损失的变形用于行人再认证。
近期较为成功的行人再认证方法一般使用分类损失结合验证损失。先使用分类损失训练,然后使用网络的一部分进行特征提取,结合度量学习获得最终的特征描述。存在问题:分类损失在id数量增加是,需要学习的参数增加,但训练后又不需要了。使用验证损失训练的网络又仅仅回答了“两张图像是如何的像的问题”。
三元组损失并不流行的原因是,它的结果并不理想。三元组损失学习的关键部分是困难三元组的挖掘,但是挖掘困难的三元组耗时严重,且不好定义好的困难三元组。更糟糕的是,选择太困难的三元组易导致训练不稳定。
三元组损失首先在FaceNet中提出,即,
主要问题是当数据集变大时,可能的三元组增加太多,训练时间长的不切实际。此时,挖掘困难的三元组就较为重要。举了个例子,一遍一遍的去学习穿不同衣服的是不同的人,模型没有学到什么东西,但是通过观察长得像的两个人(困难负样本),或者观察同一个人在不同环境下的不同姿态(困难正样本)可以有效的帮助学习。但是仅仅关注困难三元组又会选择到outliers。
三元组损失的改进
论文提出了一个三元组选择方式的改进方法,主要思想是通过随机选择P类(行人id),酶类随机选择K个图像,形成包含PK个图像的batch。在batch中选择困难的正样本和负样本,成为batch hard:
除了batch hard,还有包含所有可能三元组的batch all:
max和min函数都是连续且可导的,可以使用sgd训练。
还有一种lifted embedding 损失,将所有的anchor-positive之外的考虑为负样本:
论文又在PK batch中,将lifted embedding 损失改成如下形式:
距离度量
大部分的工作中,将平方欧拉距离作为度量,作者通过实验发现这种度量更容易collapsing,使用真实的欧拉距离更稳定。
soft-margin
之前的很多三元组损失都使用hinge函数做了截断处理,即正负样本与anchor的距离满足三元组关系,则损失为0,但在实际中希望同类样本的距离越近越好,因此设计了soft-margin函数:
实验结果