度量学习、细粒度识别相关论文阅读笔记(一)——SoftTriple Loss
之前调研了几篇度量学习、细粒度识别相关领域的最新论文,现将之前做的论文笔记分享出来供大家一起探讨。
因为之前没有涉及过相关领域,如果有的地方理解不够准确希望大家指正。
- Triple Loss
- Triple Loss
- Triplets挖掘
- 训练方法
- Offline
- Online
- SoftTriple Loss
- normalized softmax
- Multiple Centers
- Adaptive Number of Centers
- 网络结构
- 车型识别数据集:Cars196
先回顾一下Triplet loss的原理以及应用。
Triple Loss
Triple Loss
Triplet loss最初是在 FaceNet: A Unified Embedding for Face Recognition and Clustering 论文中提出的,应用于人脸识别任务中。目前,Triplet loss也被广泛应用于各种细粒度识别任务中。
Triplet loss的目的是学习一个好的embedding,使得同一个人的人脸在嵌入空间中尽量接近,不同人的人脸在嵌入空间中尽量远离。
可以写成如下公式:
其中,a表示anchor, p表示同类样本,n表示异类样本。 为margin, 用来卡阈值,控制正负样本的距离,从而判断是不是属于同一个类别。
论文中的损失函数公式定义为:
Triplets挖掘
基于前文定义的Triplet loss,可以将采样得到的三元组分为以下三类:
easy triplets:L = 0,即满足,这种情况属于易分类三元组
hard triplets:,这种情况下anchor与同类样本距离远,属于会被误识别的三元组
semi-hard triplets:,这种情况下被称作难样本。
在网络训练中,尽可能使用Semi-hard negatives样本(也可以选择 hard triplets 或者两者一起进行训练)。
训练方法
Offline
在每轮迭代之前离线的生成triplets。也就是先对训练集所有数据计算得到对应的embeddings, 然后挑选出Semi-hard triplets作为输入训练神经网络。
缺点:效率低,每轮迭代前需要遍历一遍所有数据得到Semi-hard triplets。
Online
从训练集中抽取B个样本,然后计算B个embeddings,可以产生个triplets。这里面虽然有很多无效的(没有两个P,一个N),但是却可以在一个batch中产生更多的triplets。
对每一个anchor,选择最hardest的P和N。
SoftTriple Loss
ICCV2019的SoftTriple Loss: Deep Metric Learning Without Triplet Sampling提出了softTriple loss对triplet loss和softmax进行改进。
原因:
在使用triplet loss进行训练时,每次迭代中只有一个mini-batch的数据可以使用,因此triplets也必须在这个mini-batch中进行取样。这也就导致网络学习过于关注局部信息,学习到的embeddings不是最优的。
根据文章推导,softmax loss相当于每个类只有一个center的smoothed triplet loss。而在真实的数据中,一个类应该包含多个center。因此,文章为softmax loss引入了多个center,定义了softTriple loss。
softTriple loss的特点:
多个中心可以更好地捕获隐藏的数据分布,因为它们有助于减少类内的方差;
可以在不对triplets进行采样的前提下进行优化。
自适应地选择类别中心的个数
normalized softmax
当w和x为单位长度时,normalized softmax如下式:
当时,triplet loss如下式:
经过推导,最小化normalized softmax等价于优化smoothed triplet loss
Multiple Centers
尽管使用softmax loss也可以学到有用的embedding,但是softmax假设每个类只有一个center,而真实场景下一个类应该包含多个center。因此文章为每个类引入多个中心来改进softmax loss。
假设每个类包含K个center,定义与类别c的相似度为:
由此得到:
为了平滑max运算符来提高鲁棒性,论文将之前提到的与类别c的相似度改进为:
最终,得到softTriple loss:
相较于softmax loss,softTriple loss的处理方式是首先提高FC层的维度,使得每个类别可以包含更多的center,然后通过上问题到的相似度计算公式获取每个类别的相似度,最后计算softmax loss。
Adaptive Number of Centers
文章最后一部分介绍了如何自适应地选取每个类别的中心数目。
文章采取的措施是:首先设置一个足够大的K(中心数),代码中设置为10。然后将相似的中心彼此合并。
使用下式判断中心与其他中心的距离:
当距离足够小时,使用下式进行合并:
应用L2归一化获取稀疏的center集合,并且令w为单位长度,类别j的正则项可以表示为:
在最终的计算时,同时对softTriple loss以及正则项进行优化:
网络结构
最后,在2080Ti上基于Cars196数据集进行了测试。数据集及最后指标如下所示:(供感兴趣的人参考)
车型识别数据集:Cars196
总样本数:16185 images training:8144 images testing:8041 images
类别数:196 classes
类别定义方式:Make, Model, Year 例如:2012 Tesla Model S;2012 BMW M3 coupe
Embedding大小为64,使用前98类样本训练并测试,结果:
Recall@1 | Recall@2 | Recall@4 | Recall@8 | NMI | Time |
---|---|---|---|---|---|
0.773 | 0.859 | 0.916 | 0.954 | 0.683 | 14.63 |
来源:CSDN
作者:CV小菜鸟
链接:https://blog.csdn.net/weixin_43273742/article/details/104113310