摘要

这方法简单而有效.


别人用复杂的网络和连接多个分支的特征.

本文重点在于: 一些有用的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×KB=P\times{K}B=P×K 然后这里的话, 就是B=16×4=64B=16\times{4}=64B=16×4=64.
  3. 把所有的image数据都resize256×128256\times128256×128. 然后不仅仅光resize, 还用0pad重新resized image10个像素. 这句话代码怎么实现, 这句话在后来的fastreid保留了么? 最后, 再通过randomly crop来把它弄成 256×128256\times128256×128 的图像.
  4. 每个图像都是以0.5的概率来水平翻转. 不代表一半图像翻转,一半图像不翻转.
  5. 图像都decoded到[0,1]32位浮点数. 然后RGB通道也得都经过减去一个数再除去一个数来normalize.
  6. ReID特征是fff,ID prediction logits是ppp. p应该是一个向量,然后是带这各个位置概率的向量.
  7. 算triplet loss(和Facenet好像不是一个一模一样的loss), 用的是fff. prediction logitsppp被用来计算Cross Entropy loss. triplet的margin mmm0.30.30.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.



如果数据集很大很大呢, LSLSLS 还有用么?

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的特征是ftf_tft, 经过BN的特征是fif_ifi.

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

  • ID loss 用的是经过BN的特征fif_ifi.
  • triplet loss 用的是没有经过处理的ftf_tft.

为什么这么指定?

  • 针对ID loss 因为归一化会平衡每个维度. 从而让特征在超球面表面分布, 从而让ID loss更容易收敛. 不像之前一样,ID loss现在不再在ftf_tft上进行任何操作.
  • 针对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=9632*3=96323=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是啥?

罗浩博士-Bag of Tricks and A Strong Baseline for ReID相关推荐

  1. Bag of Tricks for Efficient Text Classification论文阅读及实战

    本文目录 一.Fasttext算法综述 二.原理介绍及优化策略 三.Fasttext算法实战(注:以下代码仅在Linux系统下使用!) 四.参考资料 本文目录(仅做浏览用,暂时不支持页面内跳转) 一. ...

  2. bag of tricks for image classification with convolutional neural networks

    图像分类算法优化技巧:Bag of Tricks for Image Classification - 知乎点击→查看原文 关注微信公众号:人工智能前沿讲习 重磅干货,第一时间送达 论文复现对很多人而 ...

  3. 《Bag of Tricks for Node Classification with Graph Neural Networks》阅读笔记

    论文地址:Bag of Tricks for Node Classification with Graph Neural Networks 一.概述 本文作者总结了前人关于图上半监督节点分类任务的常用 ...

  4. GNN Tricks《Bag of Tricks of Semi-Supervised Classification with Graph Neural Networks》

    Wang Y. Bag of Tricks of Semi-Supervised Classification with Graph Neural Networks[J]. arXiv preprin ...

  5. A Strong Baseline and Batch Normalization Neck for Deep Person Re-identification(论文笔记)(2019CVPR)

    论文链接:<A Strong Baseline and Batch Normalization Neck for Deep Person Re-identification> Abstra ...

  6. 【GCN-RS】SOTA 对比学习:SimpleX: A Simple and Strong Baseline for Collaborative Filtering (CIKM‘21)

    SimpleX: A Simple and Strong Baseline for Collaborative Filtering (CIKM'21) 人大高瓴.华为诺亚方舟和清华深圳院的工作.清华前 ...

  7. 【李宏毅2021机器学习深度学习——作业2 Classification】 Phoneme Classification 记录(双过strong baseline)

    文章目录 实验结果:(已过 strong baseline) 可视化实验记录:(稳定在0.75升不上去了,50个epoch可以收敛了) 修改记录: 改进想法: 做完这个实验应该有的收获: 参考资料: ...

  8. 思考总结:REID实践 罗浩郑哲东 bag of tricks for person reid baseline运行记录

  9. 论文阅读:《Bag of Tricks for Long-Tailed Visual Recognition with Deep Convolutional Neural Networks》

    基于深度卷积神经网络的长尾视觉识别技巧包 摘要 近年来,挑战性长尾分布上的视觉识别技术取得了很大的进展,主要基于各种复杂的范式(如元学习).除了这些复杂的方法外,对训练程序的简单改进也有一定的贡献. ...

最新文章

  1. ***正传——著名网络安全人士郭鑫成长经历
  2. oracle12c审计功能,oracle 12c开启关闭统一审计
  3. (五)SpringBoot 能挣钱的几个项目!!!
  4. 恋舞服务器维修,2144《梦幻恋舞》关闭充值及关服公告
  5. java.lang.ClassNotFoundException: org.springframework.web.util.WebAppRootListener
  6. windows10桌面_Windows10桌面美化之Dock栏指南
  7. 什么是servlet ,servlet的作用
  8. imagej得到灰度图数据_老司机带你解锁ImageJ实用技巧(下)
  9. 科研绘图,看这一篇就够了(内含免费送书活动)
  10. 监听SpringBoot 服务启动成功事件并打印信息
  11. mysql触发器——NEW与OLD aes_encrypt AES_DECRYPT
  12. 杰理-手表-AC701-watch-添加表盘
  13. Unity3D状态机运行状态不显示解决方案哈哈哈
  14. git push 提示当前分支没有对应的远程分支?
  15. 网规复习笔记---------(CSMA/CD)的最小帧长计算
  16. 高效开发,项目中是否有聚合服务接口
  17. 【Web前端】落地成盒?达咩之——CSS盒子模型及属性
  18. 信也科技股权曝光:顾少丰持股29.4% 有63.7%投票权
  19. 《Essential Linux Device Drivers》中文版第1章
  20. 河北科技大学电子商务L122班级介绍

热门文章

  1. V-RAY NEXT FOR MAYA 实用指南助您掌握 V-Ray 的关键技术
  2. freeswitch拨号规则-通话录音 详解
  3. 如何安装eve和pnet(安装教程)
  4. Spring:(二)IOC
  5. Android桌面三:手机壁纸
  6. 【chatgpt】解除PDF的password
  7. 求2345的最小公倍数c语言,寒假C语言113题
  8. 嵌入式~PCB专辑3
  9. vue解决ios不能自动唤起手机数字键盘问题
  10. 【原创】简历中需要注意的 3 个问题