A Strong Baseline and Batch Normalization Neck for Deep Person Re-identification 论文学习记录

这篇文章的相关tricks 非常有用,也正是这些tricks导致最后的效果非常明显。
论文地址链接: https://arxiv.org/abs/1906.08332?context=cs.CV.
code : https://github.com/michuanhaohao/reid-strong-baseline

摘要

我们提出了一种新的颈部结构,称为批量标准化颈部(BNNeck)。BNNeck在全局池化层之后增加了一个批处理归一化层,将度量和分类损失分离到两个不同的特征空间中,加入各种tricks 然后提出了新的基线, the model achieves 94.5% rank-1 and 85.9% mean averageprecision on Market1501 with only using the global features of ResNet50

介绍

一些好的方法因为是在以前提出来的效果比较差的基线网络上运行,导致结果不是很高,需要一个新的强劲的基线网络,并且好多tricks 效果非常好,作者搜集了一些并运用到基线网络中,大大提高了精度。

这篇论文作者主要说了六个tricks,由于分类损失和度量损失在同一嵌入空间内不一致,所以BNNeck在两个不同的嵌入空间内对这两个损失进行了优化另外,行人重识别中,cmc和map这些评判指标只关注排序,聚类问题一般被忽视, 为了解决更好的让类内的紧密性和类间的分离问题,作者加入了center loss
We proposed a strong ReID baseline. With ResNet50 backbone, it achieves 94.5% and 85.9% mAP on Market1501. To our best knowledge, this result is the best performance acquired byglobal features in person ReID.

相关工作

A. Baseline for Deep Person ReID

ID loss 视行人重识别为分类问题 Different from ID loss, metric loss regards the ReID task as a clustering or ranking problem. 跟多工作都是利用tripletloss作为度量。
受FaceNet[15]的启发,
Hermans等人提出了一种在线三联体损失(TriHard损失)的难例挖掘方法。当前的大多数方法都是在TriHard基线上扩展的。结合ID丢失和TriHard丢失也是获得强基线[3]的一种流行方法

除了设计不同的损失外,还有一些工作侧重于为deep person ReID建立有效的基线模型
(1) 在全局池化层后边加入batch normalization (BN) layer
(2)与这些模型类似,基线使用全局特征来表示图像
(3)Sun【5】等人提出了基于部件的卷积基线(PCB)

B. Some Existing Approaches for Deep person ReID

We divide these works into striped-based, pose-guided, mask-guided, attention-based, GAN-based, and re-ranking methods

Stripe-based methods:: 目前很多方法,把图片分成几个部分,然后分别抽取每个部分的特征,有 PCB,相似类型有AlignedReID++ [3], MGN [16], SCPNet[17] 等 然而, 这些模型会经常遇到位置对不齐的情况

Pose-guided methods:[18] -[21]使用额外的姿态/骨骼估计模型来获取人体姿态信息。姿态信息可以精确地对齐两个人图像的对应部分。然而,一个额外的模型会带来额外的计算消耗。在模型的性能和速度之间进行权衡是很重要的。

Mask-guided models:[22] -[24]使用遮罩作为外部线索来去除像素级的背景杂波,并包含身体形状信息。例如,Song等人提出了一种掩码引导的对比注意模型,该模型采用二值分割掩码来分别学习身体和背景区域的特征。Kalayeh等人提出了[23] SPReID,它使用人的语义解析来为person ReID利用局部视觉提示。掩模引导模型非常依赖于精确的行人分割模型。

Attention-based methods:[25] -[28]涉及一个注意机制,以提取额外的区别特征。与像素级掩模相比,注意区域可以被重新分级为一个自动学习的高级“掩模” Li等人提出的协调注意CNN (HA-CNN)模型是一种比较流行的模型。HA-CNN将软像素和硬区域关注的学习与特征表示的同时优化相结合。基于注意的模型的一个优点是,它们不需要分割模型来获取掩码信息。

GAN-based methods: GAN网络可以生成图片,各种变体,还可以生成各种风格的图片,可以用以扩充数据集

Re-ranking methods:[36] -[39]是图像检索的后处理策略。一般来说,person ReID只是简单地使用检索阶段的欧氏距离或余弦距离。Zhong等人提出了一种k-倒数编码方法,利用探头和画廊图像的Jaccard距离对ReID结果进行重新排序。Shen等人提出了一种深度组变换随机游走(deep group-shuffling random walk, DGRW)网络,用于在训练和测试过程中充分利用画廊图像之间的亲缘信息。在检索阶段,DGRW可以看作是一种重新排序的方法。重新排序是提高检索准确率的关键步骤
(简单的解释就是,你根据probe搜索出来的candidate对象,根据这些candidate对象选择k个nearest,如果包含你的probe,那它的true match可能性更大一些)

OUR STRONG BASELINE AND TRAINING TRICKS

A. Warmup Learning Rate

预热的学习率,一开始从零预热到初始学习率 3.5*10-4 Warmup的策略就是初期用一个逐渐递增的学习率去初始化网络
warmup它在训练开始的时候先选择使用一个较小的学习率,训练了一些epoches,然后再修改为预先设置的学习来进行训练。原因 一开始的网络权重是随机初始化的,如果一开始学习率太大,容易导致网络不稳定,所以一开始小点,让网络先稳定,然后再变大学习率去优化。
在这里插入图片描述

B. Random Erasing Augmentation

随机擦除的意思是给输入图片随机的在某个地方进行掩盖,原因是,我们的数据有时候是会存在遮挡物的,所以我们训练的时候就会通过这个方法掩盖进行训练,加强网络的泛化能力。为了解决遮挡问题,提高ReID模型的泛化能力,
Zhong等人[41]提出了一种新的数据增强方法,即随机消除增强(REA)。REA以手动设置的概率p随机屏蔽训练图像的矩形区域。所有超参数设置与[41]和[1]相同。一些例子如图3所示。
在这里插入图片描述

C. Label Smoothing

ReID的一个基本基线是IDE[8]网络,最后一层输出的是分类的概率大小(softmax一般)
Given an image, we denote y as truth ID label and pi as ID prediction logits of class i. The ID loss is computed as follows:
在这里插入图片描述
对于分类任务常用的防止过拟合方法就是Label Smoothing (LS),标签平滑,
在这里插入图片描述
ε是一个常数,鼓励模型训练集上不要太自信,。在这项研究中,ε是0.1。
当训练集不大时,LS可以显著提高模型性能。
标签平滑可以参考链接(讲的很详细): https://blog.csdn.net/qq_43211132/article/details/100510113.

D. Last Stride

高空间分辨率能带来更好细粒度解析力。最后一步指的是ResNet50 Backbone的每个block最后一层conv都会有一个下采样的过程,即最后一层conv的stride=2 ,就拿PCB那篇文章举例,步长由2变成1,增大了输出特征的尺寸。保留更多的细粒度特征。空间分辨率的提高带来了显著的改善

E. BNNeck

在这里插入图片描述
在这里插入图片描述
仿射所对应的IDloss,分类聚集代表着 tripletloss。 因为受到BN的影响,经过BNNeck的分类任务 tripletloss 蝌蚪状(仿射的影响)。

这是这篇文章的核心点。我们常用的Baseline通常会同时使用ID损失和triplet损失一起优化同一个feature。但是在大量前置的研究发现,分类损失其实是在特征空间学习几个超平面,把不同类别的特征分配到不同的子空间里面。并且从人脸的SphereFace [4]到ReID的SphereReID [5]等工作都显示,把特征归一化到超球面,然后再优化分类损失会更好。triplet loss适合在自由的欧式空间里约束。我们经常观察到,如果把feature归一化到超球面上然后再用triplet loss优化网络的话,通常性能会比不约束的时候要差。我们推断是因为,如果把特征约束到超球面上,特征分布的自由区域会大大减小,triplet loss把正负样本对推开的难度增加。而对于分类超平面,如果把特征约束到超球面上,分类超平面还是比较清晰的。对于标准的Baseline,一个可能发生的现象是,ID loss和triplet loss不会同步收敛。通常会发现一个loss一直收敛下降,另外一个loss在某个阶段会出现先增大再下降的现象。也就是说这两个task在更新的过程中梯度方向可能不一致。但是由于最终都能够收敛,所以可能容易引起大家的忽视,

我们希望找个一种方式,使得triplet loss能够在自由的欧式空间里约束feature,而ID loss可以在一个超球面附近约束feature,于是乎就出现了以下的BNNeckBNNeck的原理也很简单,网络global pooling得到的feature是在欧式空间里的,我们直接连接triplet loss,我们把这个feature记作ft 。然后这个feature经过一个BN层得到 fi,经过BN层的归一化之后, batch里面fi 的各个维度都被拉到差不多,最后近似地在超球面附近分布。当然不是严格意义上的,只是近似地而已。当然也可以尝试一下直接用L2 norm得到 fI,但应该效果会低于BNNeck。因为L2 norm是一个无参数的强约束,产生的梯度会直接全部传给 ft,其实改变并不大。而BNNeck的话还有BN层的参数可以吸收梯度,相对来说对ft 的影响会弱一点。然还有一些小细节,就是分类的FC的bias我们是关掉了的,这样可以保证分类的超平面一定经过原点。因为特征也是关于原点对称分布的。BNNeck是我们从实验现象的观察得到的产物,如果有更加严谨的理论证明,会更加好
这点参考罗浩本人的原话 链接: https://zhuanlan.zhihu.com/p/61831669.

F. Center Loss

在这里插入图片描述
如图所示,cmc map 结果都一样,但是 正样本对之间的聚集紧密性不一样,对一些课题用处很大,所以加入了centerloss

Triplet loss有个缺点是只考虑了相对距离,其loss大小与正样本对的绝对距离无关。举个例子,假如margin=0.3。正样本对距离是1.0,负样本对是1.1,最后loss是0.2。正样本对距离是2.0,负样本对是2.1,最后loss还是0.2。为了增加正样本之间的聚类性能,我们加入了Center loss:

[公式]
在这里插入图片描述

由于ReID现在的评价指标主要是cmc和mAP,这两个都是检索指标,所以center loss可能看上效果不是那么明显。但是center loss会明显提高模型的聚类性能,这个聚类性能在某些任务场景下是有应用的。比如直接卡阈值区分正负样本对tracking任务。

当然center loss有个小trick就是,更新网络参数和更新center参数的学习率是不一样的,细节需要去看代码,很难说清楚。
这点同样参考 链接同上

所以修改后的网络存在三种损失,tripletloss + IDloss + center loss
在这里插入图片描述

Modified Baseline

在这里插入图片描述
通过引入前文的各种trick,我们的Modified Baseline就如上图所示。输入的图像经过REA数据增广,然后经过ResNet50网络,last stride改为1。然后经过BNNeck,由于center loss也是一种metric loss,所以和triplet loss一起放到BN前面。最后分类损失结合LS一起计算。整个网络使用warm up学习率去优化。

猜你喜欢

转载自blog.csdn.net/qq_37405118/article/details/105389648