论文:Bag of Tricks and A Strong Baseline for Deep Person Re-identification
行人reid的tricks和一个strong baseline
出处:CVPR2019
文章目录
- 1. Motivation
- 2. Tricks
- 3. Baseline
- 4. Conclusion
1. Motivation
(1)设计一个strong baseline
一个合适的baseline是很重要的。在2019年常用的baseline如下图所示:
一个batch里面会有 P X K 张图像(P个ID,每个ID有K张图片);ResNet50作为backbone,得到feature map;经过pooling得到 P X K 个特征;对每一个特征计算度量学习损失Triplet loss和表征学习损失ID loss;利用两个损失共同优化网络。
(2)解决ID loss和Triplet loss的结合矛盾问题,提出了BNNeck
(3)精准判断模型好坏,原模型忽视了类内的紧凑性和类间的差异度,提出了center loss。
2. Tricks
常用的方法模块:
Warmup learning rate、Random erasing augmentation(REA)、Label smoothing、Last stride = 1、BNNeck、Center loss
(1)Warmup learning rate(缓慢增长的学习率)
以前训练模型的时候,学习率的设置一般就是阶梯型的下降。但是,在训练初期,模型初期性能比较差,loss和grad都非常大置信度不高,如果学习率比较大容易陷入不好的情况中,可以使用Warmup learning rate慢慢增加学习率。例如:
学习率lr的公式如下:
(2)Random erasing augmentation(随即擦除)
给图像添加一些噪声,人工的添加一些遮挡。防止网络偷懒,使得网络学到更多的特征,看到的范围更广。代价小,提升性能较大。
(3)Label smoothing
将one-hot的硬标签转变为软标签。使用硬标签训练网络非常容易overfit,转变为软标签。[0,1,0,0,0,0] ->[0.02,0.9,0.02,0.02,0.02,]
(4)Last stride = 1
最早在PCB中提出,最后一层下采样,Last stride=2,feature map缩小为原来的一半。将2改为1,不进行下采样,feature map大了,网络看到的细节就更加充分。
(5)BNNeck
标准的Neck和本文提出的Neck对比。在标准Neck中,从loss曲线中可以看出,两个loss会存在不一致性;BNNeck使用一个BN层将两个loss分到不同的特征空间,BN前的ft用来训练Triplet loss,BN后的fi训练ID loss,并在推理阶段用来推理。
实验验证:
- 没有BN层,结合ID loss 和 triplet loss 要比单独使用一个loss性能要好。
- BN层更有利于ID loss,对Triplet loss是不利的。使用BN层归一化,以前瘦一些的特征会胖一些,胖一些的特征会瘦一些,会破坏一些聚类的特性,但是不改变特征的分布。
- BNNeck可以消除两种loss的不一致性。
(6)Center loss
Center loss就是把特征到类别中心的距离当成loss,乘上一个权重加到ID loss和Triplet loss上。可以更加考虑类内的紧凑度和类间的差异度;BN层会破坏center loss的聚类效应。
3. Baseline
同时加入了6种tricks(Warmup learning rate、REA、Label smoothing、Last stride = 1、BNNeck、Center loss),构成了一个新的性能强大的Baseline。
4. Conclusion
和其他的Baseline相比:
本文提出了一个强大的baseline;使用BNNeck将ID loss和Triplet loss分到两个特征空间,解决不一致性问题;提出了center loss,考虑类内紧凑性和类间差异性。