度量学习、细粒度识别相关论文阅读笔记(一)——SoftTriple Loss

柔情痞子 提交于 2020-01-30 13:18:26

度量学习、细粒度识别相关论文阅读笔记(一)——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 或者两者一起进行训练)。

训练方法

FaceNet 网络结构

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

车型识别数据集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
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!