罗浩博士-Bag of Tricks and A Strong Baseline for ReID

摘要

这方法简单而有效.

在这里插入图片描述
别人用复杂的网络和连接多个分支的特征.

本文重点在于: 一些有用的training tricks, 他们做的工作就在于collect and evaluate这些有效的training tricks. 他们把这些tricks结合到一起, 在只用全局特征的时候. 模型在Market1501上就达到了超高指标.

1. Introduction

effective training tricks or refinements

  • with involved in all training tricks, 好像就是把所有的都结合起来了.
  • 再者就是: with global features of the model.

在这里插入图片描述
意思就是:

大多数之前的工作都是在poor baseline上面扩展的. 在market1501这个库上的表现,23个里只有2个的rank-1精度在90%以上. 最上面那个图的最右上角的蓝点和红点就是那2个.

在这里插入图片描述
四个Baseline的rank-1精度甚至比80%还低.

在下面的图中, 也就是DukeMTMC-reID,

在这里插入图片描述
所有baseline在rank-1上都不超过85点, 在mAP上都不超过65点.

在这里插入图片描述
那他们这个Stronge怎么来的?

modified the standard baseline with some training tricks to 获得那个stronge baseline.

在这里插入图片描述

什么意思? 别人怎么unfairly比较了?

在这里插入图片描述
训练技巧被有些作者低估, 所以造成读者忽略了训练技巧. 很多时候效果的改善就是来自training tricks而不是method themselves. 而不是方法本身. 这就把方法本身的作用给夸大了.

在这里插入图片描述

在学术领域, 是combine 多个local feature 或者利用由姿态估计或者segmentation models得到的semantic information. 这些都有组合组合的嫌疑. 特征太大(large features)大大地降低了检索过程的速度. 所以,他们最大的特色还是单模型而且使用Global featurs.

他们文章都干些啥:

  • 发现顶会都是基于poor baselines扩展的, 这也算啊?
  • 他们想给academia个stronge baseline 让ReID有更高精度.
  • 对community, 告诉reviewers什么tricks会影响ReID模型的表现. 在对比不同方法时候,要考虑tricks. 作者应该有所交待.
  • 对于industry, 想给个小的, 计算省事的模型.

他们其实找了很多tricks(在别的之前的论文里找的), 最后他们选中了six tricks引入本文中.

在这里插入图片描述

也不是光引入, 有的还经过designed或者修改.
在这里插入图片描述
另外的话, 他们还发现different image sizenumbers of batch size也很重要. 会对表现具有影响.

我之前的想法是different image size应该不会有任何影响的.

在这里插入图片描述
他们文章都干些啥(具体到技术细节上):

  • 设计一个新的neck structure named as BNNeck
  • 做大量实验, 每个trick的实验, 在两个数据集上 这也能算?
  • 还是说: global features with ResNet50 backbone.
  • 测试image size的影响, 以及the number of batch size的影响. 这也能算?

2. Standard Baseline

在这里插入图片描述
在这里插入图片描述
训练的时候这个Standard Baseline是这样的:

  1. Backbone是ResNet50, 然后初始化是用的pre trained parameters on ImageNet 然后把the dimension of the fully connected layer变成N. N代表训练集中identity的种类. 简化为: ResNet50(ImageNet)
  2. 对于一个训练batch, 随机取P个类别, 每个人随机取K个图像. B = P × K B=P\times{K} B=P×K 然后这里的话, 就是 B = 16 × 4 = 64 B=16\times{4}=64 B=16×4=64.
  3. 把所有的image数据都resize 256 × 128 256\times128 256×128. 然后不仅仅光resize, 还用0pad重新resized image10个像素. 这句话代码怎么实现, 这句话在后来的fastreid保留了么? 最后, 再通过randomly crop来把它弄成 256 × 128 256\times128 256×128 的图像.
  4. 每个图像都是以0.5的概率来水平翻转. 不代表一半图像翻转,一半图像不翻转.
  5. 图像都decoded到[0,1]32位浮点数. 然后RGB通道也得都经过减去一个数再除去一个数来normalize.
  6. ReID特征是 f f f,ID prediction logits是 p p p. p应该是一个向量,然后是带这各个位置概率的向量.
  7. 算triplet loss(和Facenet好像不是一个一模一样的loss), 用的是 f f f. prediction logits p p p被用来计算Cross Entropy loss. triplet的margin m m m 0.3 0.3 0.3.
  8. Adam, 0.00035的初始化学习率, 然后在40 epoch变成0.000035,在70 epoch变成0.0000035. 然后总共训120 epoch.

3. Training Tricks

在这里插入图片描述
告诉他们用的Training Strategies. 从图上看, 比之前多了下面的方面:

  • Warmup Learning Rate
  • Random Erasing Augmentation
  • label smooth
  • last Stride
  • BNNeck 感觉这个可以移植下,而且应该管用. 是在Inference阶段才加么?
  • 多了个Center loss

3.1 Warmup Learning Rate

在这里插入图片描述

3.2 Random Erasing Augmentation

在这里插入图片描述
那这么看的话, 人脸的thumbnails一般不再被遮挡了啊, 但是对于口的可以试试这个技术.

在这里插入图片描述
然后就是讲解啥是REA?

REA随机地选择一个矩形区域,然后用随机值来擦除原来的像素. 然后, 这个里面因为选窗口,选位置什么的,还涉及一些超参数.

在这里插入图片描述
在这里插入图片描述

3.3 Label Smoothing

ID Embedding(IDE) network

在这里插入图片描述
这应该没啥特别的, 和所有的卷积神经网络都一个样吧.

在这里插入图片描述
在这里插入图片描述
这应该就是正常的Cross Entropy的公式吧? 在这个文章里, 他们又把Cross Entropy当作

在这里插入图片描述
ReID 是 one-shot,那么Face recognition是不是one-shot.

在这里插入图片描述
在这里插入图片描述
如果数据集很大很大呢, L S LS LS 还有用么?

3.4 last Stride

在这里插入图片描述
为啥不会增加额外的训练参数?

3.5 BNNeck

在这里插入图片描述
多数的工作都是用ID losstriplet loss来一起训练ReID的模型. 表面上看着好像是约束着相同的特征, 但是, 在embedding space两者的目标是不一致的, 这句话怎么讲.

在这里插入图片描述
这块涉及的是: ID loss通过构建几个hyperplanes会把embedding space分成不同的子空间. 每类的特征分布在不同的subspaces.

在这里插入图片描述

为啥Cosine比欧式距离更适合?

他们的BNNeck

在这里插入图片描述
看样子的话,就是在features后面接上个BN Layer, 意思是不是对原来的特征多做一步Batch Normalization ? 然后在用做Inference时候的特征, 那么训练时候有没有BN呢? How about the training inference stage?

在这里插入图片描述
黄色的是分类超平面.

在这里插入图片描述
这也是triplet的局限所在, 不能提供全局的优化约束, 所以就会出现, 类间的距离有时候甚至比类内还小. 那不就分错了嘛, 把不是一类的就会分到一类. 更常用的就是把他们两个结合:

在这里插入图片描述
结合ID losstriplet loss来一起训练模型. 这种结合可以使模型学习更加discriminative features. 优化的距离居然不一样. 因为CE是优化cosine distance然而triplet loss优化的是欧式距离. 这就有可能存在下列现象:

  • triplet训练的模型, 不太适合用cosine distance来测试吧?
  • 或者说如果都转化成优化一个距离,那岂不是更有劲或者更有作用?

在这里插入图片描述
在这里插入图片描述
为了得到最优的feature vector, 但是, 这时候因为目标不一致, 所以, 就可能让学到的feature很拧巴. 拧巴的具体表现如下:

在这里插入图片描述

In the training process, a possible phenomenon is that one loss is reduced(减少了), while the other loss is oscillating(震荡) or even increased(增加). 然而BNNeck居然能解决这个问题.

在这里插入图片描述

好像确实只是添加batch normalization layer. 这么一个小操作居然这么管用?

  • BN使得keeps the compact distribution of features that belong to one same person.
  • BN 移除了bias, removing the bias of classifier FC layer.

没过BN的特征是 f t f_t ft, 经过BN的特征是 f i f_i fi.

在这里插入图片描述

这确实是两个不同处理的特征分别用来计算两个不同的loss.

  • ID loss 用的是经过BN的特征 f i f_i fi.
  • triplet loss 用的是没有经过处理的 f t f_t ft.

为什么这么指定?

  • 针对ID loss 因为归一化会平衡每个维度. 从而让特征在超球面表面分布, 从而让ID loss更容易收敛. 不像之前一样,ID loss现在不再在 f t f_t ft上进行任何操作.
  • 针对triplet loss 因为分开了, 不影响了, 所以triplet loss 更容易收敛.

在这里插入图片描述
在这里插入图片描述
表一.的结果显示了BNNeck非常有用. 就光一个这, 就提升如下很大的幅度.

在这里插入图片描述

3.6 Center Loss

Center loss可以弥补makes up for the drawbacks of the triplet loss. 弥补了别人的缺点,

在这里插入图片描述
最小化Center loss可以使得类内的compactness增加, 类内的紧凑性增加, 也就是同一个类更往一起聚.

4. Experimental Results

We add tricks on the standard baseline successively and do not change any training settings.

依次地, 陆续地, 添加各个tricks, 但是不改变训练上的设置.
在这里插入图片描述
消融研究present the performance boost from each trick.

4.1 Influence of Each Trick(Same domain)

在这里插入图片描述
之前的是Baseline-S代表的是Baseline-Standard. 不管这个baseline-Standard了, 就记住这个其实和大多数的论文用的baseline都差不多. 6tricks 里面最好用的trick 要属于BNNeck. 要确定config文件里确实有BNNeck功能.

最牛逼的在于, 这些tricks居然把mAP提升10%. 得到这么大的提升, only involve an extra BN layer. 又不增加训练时间(可以这么说,却不精确到为啥.只写时间而已).

在这里插入图片描述
好像确实是有BNNeck.

4.2 Analysis of BNNeck

在这里插入图片描述

inference stage用的是经过BN的特征然后再加上cosine distance.

4.3 Influences of Each Trick(Cross domain)

在这里插入图片描述

跨域的时候, 6个trick里面的Stride changecenter loss没有什么big impact了.

而且REA does harm to models in cross-domain ReID task.

为啥REA不好, 他们也没说, 他们只是推测:

在这里插入图片描述
真正能往Google表格里写的结果在下图中:

在这里插入图片描述
RK的精度更高一点,但是本文没详细介绍RK.

4.4 Comparison of State-of-the-Arts

BFE的方法和他们这个stronge baseline结果差不多. 但是他会结合两个特征. 他们的方法牛逼在:

To our best knowledge, our baseline achieves best performance in the case of only using global features.

5. Supplementary Experiments

之前的工作会涉及不同的:

  • batch size
  • image size 我以为这个没影响. 这在我接下来的工作里也可以测试.

关于batch_size的影响:

在这里插入图片描述
好像是 32 ∗ 3 = 96 32*3=96 323=96时候效果最好.

5.1 Influences of the Number of Batch Size

在这里插入图片描述
受限于GPU的显存, 不是任意batch size都能测试的. 而且是在不加center loss时候测的.

在这里插入图片描述
关于batch size到底怎么影响表现倒是没有特定结论. 但是好像是larger batch size, better performance.

5.2 Influences of Image Size

在这里插入图片描述

也是不带center loss . 他们认为图像尺寸也不影响performance.

在这里插入图片描述

6. Conclusions and Outlooks

在这里插入图片描述
他们不是要说自己的效果好, 而是告诉大家, 对于ReID以及人脸识别, 还应该有很多没发现的tricks.

实验部分

1.1 看看怎么加的center loss

在罗浩的Github里, 是用一个字典的键值IF_WITH_CENTER来加上center loss.

在这里插入图片描述
但是, 但是, 在fastreid里好像没有用center loss. 尚且不确定, 可以确定的是在yml文件里没用, 但是不代表程序代码里没用.

在这里插入图片描述
从上图可以看出来: 在yaml里确实没用center loss.

但是我们如果深入探究的话. 在PG跑完的日志文件里,可以看出如下loss:

下图是BOT50的输出结果.
在这里插入图片描述
从这看的话, 怎么感觉有4个loss呢? 感觉分别是:

  • CE
  • CIRCLE
  • FL 这个代表的什么loss啊?
  • TRI

下图则是sbs_R101_ibn的输出结果.

在这里插入图片描述
发现上图中TRI:MARGIN居然变成0.0, 所以, 可能sbs_R101_ibn没有使用triplet loss. 但是, 好像也用了center loss? 不太确定, 因为这块这个CE好象是cross-entropy. 因为在添加注释的github文件里这个CE就是代表的Cross-Entropy.

在这里插入图片描述
这块这个PK_SAMPLER是啥?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值