《Unsupervised Person Re-identification via Multi-label Classification》论文简读

2,174 阅读5分钟

核心思想

不同于普遍的基于交叉熵损失进行训练的单标签分类模型,本文使用多标签分类模型完成训练。所谓的多标签分类模型,即在初始过程中,对于单张图片赋予单独的类,通过后续的迭代,使一张图片不仅属于自身的类,同时也属于其它和该照片同属于一个人的照片的类。为了加速多分类模型的训练效率,本文提出了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,进行优化。

主体内容

给定一个未标注的图片数据集 X={x1,x2,x...,xn}X = \{x_1, x_2, x..., x_n\}, 目标在于基于该数据集训练一个ReID模型。对于任意给定的query图片 qq ,训练出的ReID模型可以提取出一个特征从gallry集合G检索属于同一个人的图片gg。为此,ReID模型应该保证 qqgg 相较GG中的其他图片具有更相似的特征。则最终的优化目标为:

g=argmingGdist(fg,fq)g^*= \arg \min_{g\in G} dist(f_g, f_q)

对于每张图片 xix_i, 其对应的初始化 single-class label 为二值向量LL,其长度为n,L[i]=1L[i] = 1, 其他位置为-1。由于一张图片可能具有多个class,则应该将single-class label 更改为 multi-class label。由于数据集中的图片数量众多,很难训练一个多标签的分类器。一个更有效率的解决方案是利用第 i - class 对应的图片特征fif_i 作为该类别的分类器。由此可以计算任意图片 xjx_j 的分类分数如下:

cj[i]=fiT×fjc_j[i] = f_i^T \times f_j , 其中cjc_j 表示 xjx_j 的多标签分类分数。

memory

利用 n×dn \times d 尺寸的memory bank MM 以存储图片特征,其中M[i]=fiM[i] = f_i

MPLP

MPLP模块通过输入single-class label 和 memory bank得到对应的multi-class label

y^i=MPLP(yi,M)\hat{y}_i = MPLP(y_i, M)

其中 yiy_i 是输入的single-class label,y^i\hat{y}_i 是输出的 multi-class label。

给定图片 xix_i 的初始化的二值single-class label yiy_i ,MPLP 致力于找到其它可能属于xix_i 的类别。对于xix_i, MPLP首先根据 xix_i同其它特征之间的相似度计算一个排名表 RiR_i

Ri=argsort(si,j),j[1,n]R_i = \arg sort(s_{i, j}), j\in[1, n]
si,j=M[i]T×M[j]s_{i, j} = M[i]^T \times M[j]

其中 si,js_{i, j} 表示 xix_ixjx_j 之间的相似分数。

根据RiR_i 可以得到xix_i 可信标签的候选集合,比如选取排序表中的前几个。但是由于模糊、视角、背景的影响,排序表的稳定性将会降低。因此,本文给出了以下两个策略以解决稳定性问题:

  1. 根据相似分数进行标签筛选 通过给予置信分数下限,筛选出可信集合为 Pi=Ri[1:ki]P_i = R_i[1: k_i],其中Ri[ki]R_i[k_i] 是最后一个置信度高于给出来的分数下限的标签。因此,kik_i 对于每一个图片可能并不相同。
  2. 根据回环约束进行标签筛选 筛选原则基于如下假设:如果两个图片属于同一类别,则它们的邻居图片集应该也是相似的。根据该原则,可以筛选出PiP_i 中的hard negative labels。MPLP 对 PiP_i 中的标签从头到尾进行遍历。对于 PiP_i 中的标签 j, MPLP计算它的 topkitop-k_i 最近的标签。如果标签 i 同样也是标签 j 的其中一个 topkitop-k_i 最近的标签,则标签j被认为是xix_i的一个positive样本。否则,则其被认为是一个hard negtaive 标签。当第一个hard negative 标签被发现的时候,遍历停止。由此得到positive label 集合PiP_i^*

MMCL

LMMCL=i=1nD(MT×fi,y^i)L_{MMCL} = \sum^n_{i=1} D(M^T \times f_i, \hat{y}_i)
传统的多标签损失函数 MCL
l(jxi)=log(1+exp(y^i[j]×M[j]T×fi))l(j|x_i) = \log(1 + exp(-\hat{y}_i[j] \times M[j]^T \times f_i))
LMCL=i=1nj=1nl(jxi)L_{MCL} = \sum_{i=1}^n\sum_{j=1}^n l(j|x_i)

由于M[j]TM[j]^Tfif_i 是 L2 均值化的,则分类分数被限制在 [1,1][-1, 1] 之间。这会限制 l(jxi)l(j|x_i) 中 sigmoid 函数的范围,使得即便正确的分类,也无法使损失值为0。这个问题可以通过引入一个系数 τ\tau 解决,使损失函数更新如下

l(jxi)=log(1+exp(y^i[j]×M[j]T×fi/τ))l(j|x_i) = \log(1 + exp(-\hat{y}_i[j] \times M[j]^T \times f_i / \tau))

将对应的MCL 损失表示为LMCLτL_{MCL-\tau}, 则 LMCLτL_{MCL-\tau} 的梯度的梯度计算如下

根据上述公式,得到如下图所示的梯度图

显然,升级后的MCL损失仍然在分类分数大于0.25或者小于-0.25时有梯度消失的问题。另一个问题是,由于任务涉及到很多类别,使得正负类别不均衡。为了解决这个问题,作者进一步提出了MMCL损失。

Memory-based Multi-label Classification Loss (MMCL)

首先,为了解决分数的区间问题,将损失函数修改如下:

l(jxi)=M[j]T×fiy^i[j]2l^*(j|x_i) = ||M[j]^T \times f_i - \hat{y}_i[j]||^2

其次,为了平衡正类别和负类别,MMCL引入了hard negative class mining。对于xix_i, 其negative 类别可以被标示为Ri/PR_i /P^*。将negative 类别按照它们的分类分数排序,然后挑选其top r%的类别作为hard negative 类,表示为Ni,Ni=(nPi)rN_i, |N_i|=(n-|P^*_i|)\cdot r%

由此得到新的损失函数:

其梯度公式如下:

LMMCL/fi=2(M[j]T×fiy^i[j])M[j] \partial L_{MMCL}/ \partial f_i = 2 \partial(M[j]^T \times f_i - \hat{y}_i[j])M[j]

根据上图可以看到,由此可以解决梯度消失问题。

Memory Update

MM 在每次训练迭代后会进行更新,更新方式同moment类似,

M[i]t=αfi+(1α)M[i]t1M[i]^t = \alpha \cdot f_i + (1 - \alpha) \cdot M[i]^{t-1}

实验

参见原始论文。

参考