【论文阅读】LUPerson-NL

Large-Scale Pre-training for Person Re-identification with Noisy Labels

  • 中科大,微软

  • CVPR2022

  • 实用,预训练模型拿来用一般就有提升

这是一篇主要讲预训练的文章,使用大尺度自动标注的数据预训练,再在reid任务中监督训练。主要的工作在于预训练的方法,可以归类为弱监督吧。

前人为reid任务预训练模型时,是在ImageNet上训的,这不能带来什么提升,他们认为是由于imagenet里图片和reid任务中的图片有着很大的domain gap。后来也有人用大量无标注的行人数据LUPerson预训练,超过了用ImageNet的效果。进一步,他们假设如果直接用来自原始视频做预训练,就能够融入视频中空间和时间的相关性作为弱监督信号,产生更好的特征表达。

于是他们基于LUPerson的原始视频,使用FairMOT跟踪算法抽取行人检测框,为算法跟上的人赋予一个id,制作了有1千万图片43w id的数据集——LUPerson-NL, LUPerson本身是没标注的,NL意味着Noisy Labels.

他们又提出了使用这些带有噪声的标记的训练框架,Pre-training framework utilizing Noisy Labes(PNL), 包含三个模块:

  1. 分类监督学习模块

  2. prototype based的对比学习模块

  3. label guided对比学习模块

在这里插入图片描述

PNL框架如上图,输入图片xi,经两种数据增强T、T‘,生成 x i ~ \tilde{x_i} xi~ x i ′ ~ \tilde{x'_i} xi~。再分别送入编码器Eq和Ek, 和自监督训练中的Siamese网络类似,Ek没有梯度更新,其参数由Eq滑动平均得到(借鉴了自监督中常规操作)。

1. 分类学习模块

Eq的输出接fc预测分类概率,pi, 它和修正后的标签 y i ~ \tilde{y_i} yi~计算cross entropy损失。
L c e i = − log ⁡ ( p i [ y i ~ ] ) L^i_{ce}=-\log{(p_i[\tilde{y_i}])} Lcei=log(pi[yi~])

2. prototype based的对比学习模块

怎么修正标签?这里用了一个很直觉的想法:特征距离哪些类簇中心最近就是什么类别(和kmeans聚类的想法类似,都属于EM的思想),它需要维护各个类簇的中心{c1, c2, …, ck},称作prototype(原型),以softmax的形式定义特征qi与各个类别的相似性, s i k s^k_i sik表示特征qi与ck的相似性,注意下式中分母的k和分子的k的区别。

s i k = exp ⁡ ( q i ⋅ c k / τ ) ∑ k = 1 K exp ⁡ ( q i ⋅ c k / τ ) s^k_i=\frac{\exp{(q_i \cdot c_k / \tau)}}{\sum^K_{k=1}\exp{(q_i \cdot c_k / \tau)}} sik=k=1Kexp(qick/τ)exp(qick/τ)

他们又认为这个相似性和当前预测的类别概率的作用各占一半,依下式去修正标签,在训练过程中,这种修正是online的。

l i = 1 2 ( p i + s i ) l_i=\frac{1}{2}(p_i+s_i) li=21(pi+si)

y i ~ = arg max ⁡ j l i j \tilde{y_i}=\argmax_jl^j_i yi~=argmaxjlij if m a x j l i j > T max_jl^j_i>T maxjlij>T

y i ~ = y i \tilde{y_i}=y_i yi~=yi otherwise

T就是一个阈值,实验中,取T=0.8, τ \tau τ=0.1。接下来,怎么计算prototype?其实就是用同一修正标签下特征的滑动平均, 实验中m=0.999

c y i ~ = m c y i ~ + ( 1 − m ) q i c_{\tilde{y_i}}=mc_{\tilde{y_i}}+(1-m)q_i cyi~=mcyi~+(1m)qi

接下来就可以计算prototype-based对比损失了,是softmax形式的cross entropy loss

L p r o i = − log ⁡ e x p ( q i ⋅ c y i ~ / τ ) ∑ j = 1 K e x p ( q i ⋅ c j / τ ) L^i_{pro}=-\log \frac{exp(q_i \cdot c_{\tilde{y_i}}/ \tau)}{\sum^K_{j=1}exp(q_i\cdot c_j/\tau)} Lproi=logj=1Kexp(qicj/τ)exp(qicyi~/τ)

3. label guided对比学习模块

这里参考了自监督常用的NCEloss, 简言之这个loss是为了让原图特征和它增强图的特征相近,和其他图的增强图的特征不相近。分子和分母的左边是query与正例的相似性,分母右边是query与负例的相似性(自监督里一般把当前输入的原图的特征称为query, 队列里的特征称为key)

L i c i = − l o g exp ⁡ ( q i ⋅ k i + / τ ) exp ⁡ ( q i ⋅ k k + / τ ) + ∑ j = 1 M exp ⁡ ( q i ⋅ k j − / τ ) L^i_{ic}=-log\frac{\exp(q_i\cdot k^+_i / \tau)}{\exp(q_i \cdot k^+_k / \tau)+\sum^M_{j=1}\exp(q_i \cdot k^-_j / \tau)} Lici=logexp(qikk+/τ)+j=1Mexp(qikj/τ)exp(qiki+/τ)

这个loss只是拉开不同instance的距离,所以也会拉开同一类别中不同instance的距离,在Imagenet上使用时就发现了同类别的图片被拉远的问题,在reid的数据上,同一个人不同的图片是非常普遍的,他们也很自然地想到按标签去区分正例负例。
在这里插入图片描述

现在更流行的做法是像BYOL, SimSiam那样只用正例来算对比loss, 我觉得他们可以试试。

总loss就是全部加起来,参数都是1

L i = L c e i + λ p r o L p r o i + λ l g c L l g c i L_i=L^i_{ce}+\lambda_{pro}L^i_{pro}+\lambda_{lgc}L^i_{lgc} Li=Lcei+λproLproi+λlgcLlgci

分别以ImageNet数据监督、无监督,用LUPerson数据无监督,用LUPerson-NL数据PNL框架预训练,再分别用Triplet loss, 分类的loss,MGN(Learning discriminative features with multiple granu-larities for person re-identification)来finetune(这几个算法都不太新)的实验如下。

在这里插入图片描述

看下消融实验,观察到

  1. 1vs2, 只用实例对比loss比只用分类loss好

  2. 3vs1/2, 联合训练实例对比loss和分类loss, 比只用一个好

  3. 1vs4, 3vs6, 5vs7: 在原来基础上加上prototype-based 对比loss会更好

  4. 3vs5, 6vs7: 在原来基础上加上label-guided对比loss会更好

在这里插入图片描述

还可以看到, 5vs6, 6vs7, 在联合训练分类loss和prototype-based对比loss的基础上,使用实例对比loss和使用label-guided对比loss效果差别不明显.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值