核心思想
不同于普遍的基于交叉熵损失进行训练的单标签分类模型,本文使用多标签分类模型完成训练。所谓的多标签分类模型,即在初始过程中,对于单张图片赋予单独的类,通过后续的迭代,使一张图片不仅属于自身的类,同时也属于其它和该照片同属于一个人的照片的类。为了加速多分类模型的训练效率,本文提出了memory-based multi-label classification losss(MMCL)。该损失函数的主要思想在于,具有共同标签的两张图片其特征之间的cosine距离应该更接近1,具有不同标签的则应接近-1。
模型概览
对于每一张输入的图片,在经过特征提取之后,将特征存储在以index为键值的词典中。同时该图片也附带生成一个one-hot 向量,也就是图中的single-class label,其中只有该图片对应的index为+1,其他位置为-1。该向量和memory词典经过MPLP模块得到对应的multi-class label,同single-class label 类似,预测的类的index为+1,其他位置为-1。对于multi-class label中预测为1的每一个类别,从meomry中取出对应的图片特征,与输入图片的特征计算cosine距离作为scores。最终,multi-class label 和 scores 相互作用,得到最终的MMCL,进行优化。
主体内容
给定一个未标注的图片数据集 , 目标在于基于该数据集训练一个ReID模型。对于任意给定的query图片 ,训练出的ReID模型可以提取出一个特征从gallry集合G检索属于同一个人的图片。为此,ReID模型应该保证 与 相较中的其他图片具有更相似的特征。则最终的优化目标为:
对于每张图片 , 其对应的初始化 single-class label 为二值向量,其长度为n,, 其他位置为-1。由于一张图片可能具有多个class,则应该将single-class label 更改为 multi-class label。由于数据集中的图片数量众多,很难训练一个多标签的分类器。一个更有效率的解决方案是利用第 i - class 对应的图片特征 作为该类别的分类器。由此可以计算任意图片 的分类分数如下:
, 其中 表示 的多标签分类分数。
memory
利用 尺寸的memory bank 以存储图片特征,其中。
MPLP
MPLP模块通过输入single-class label 和 memory bank得到对应的multi-class label
其中 是输入的single-class label, 是输出的 multi-class label。
给定图片 的初始化的二值single-class label ,MPLP 致力于找到其它可能属于 的类别。对于, MPLP首先根据 同其它特征之间的相似度计算一个排名表
其中 表示 和 之间的相似分数。
根据 可以得到 可信标签的候选集合,比如选取排序表中的前几个。但是由于模糊、视角、背景的影响,排序表的稳定性将会降低。因此,本文给出了以下两个策略以解决稳定性问题:
- 根据相似分数进行标签筛选 通过给予置信分数下限,筛选出可信集合为 ,其中 是最后一个置信度高于给出来的分数下限的标签。因此, 对于每一个图片可能并不相同。
- 根据回环约束进行标签筛选 筛选原则基于如下假设:如果两个图片属于同一类别,则它们的邻居图片集应该也是相似的。根据该原则,可以筛选出 中的hard negative labels。MPLP 对 中的标签从头到尾进行遍历。对于 中的标签 j, MPLP计算它的 最近的标签。如果标签 i 同样也是标签 j 的其中一个 最近的标签,则标签j被认为是的一个positive样本。否则,则其被认为是一个hard negtaive 标签。当第一个hard negative 标签被发现的时候,遍历停止。由此得到positive label 集合。
MMCL
传统的多标签损失函数 MCL
由于 和 是 L2 均值化的,则分类分数被限制在 之间。这会限制 中 sigmoid 函数的范围,使得即便正确的分类,也无法使损失值为0。这个问题可以通过引入一个系数 解决,使损失函数更新如下
将对应的MCL 损失表示为, 则 的梯度的梯度计算如下
根据上述公式,得到如下图所示的梯度图
显然,升级后的MCL损失仍然在分类分数大于0.25或者小于-0.25时有梯度消失的问题。另一个问题是,由于任务涉及到很多类别,使得正负类别不均衡。为了解决这个问题,作者进一步提出了MMCL损失。
Memory-based Multi-label Classification Loss (MMCL)
首先,为了解决分数的区间问题,将损失函数修改如下:
其次,为了平衡正类别和负类别,MMCL引入了hard negative class mining。对于, 其negative 类别可以被标示为。将negative 类别按照它们的分类分数排序,然后挑选其top r%的类别作为hard negative 类,表示为。
由此得到新的损失函数:
其梯度公式如下:
根据上图可以看到,由此可以解决梯度消失问题。
Memory Update
在每次训练迭代后会进行更新,更新方式同moment类似,
实验
参见原始论文。