一个更加强力的ReID Baseline

该博客介绍了旷视科技北京研究院VideoTeam在行人重识别(ReID)领域的研究,他们建立了一个强大的ReID Baseline,基于ResNet50在Market1501上达到了94.5%的Rank1和85.9%的mAP。团队采用了包括Warmup学习率、随机擦除增广、标签平滑、LastStride、BN Neck等训练技巧。他们希望通过这个Baseline推动ReID研究的进步,统一评价标准,并为学术界和工业界提供参考。实验结果显示,这些技巧可以在不大幅增加成本的情况下提高模型性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个专栏是旷视科技北京研究院Video Team对外分享与交流的栏目,如果有兴趣加入Video Team可以把简历发给zhangchi@megvii.com,具体方向包括但不限于ReID、Tracking、Activity Recognition、GAN以及网络压缩等等。第一期文章介绍我上个月做的一个工作,是一个非常强力的ReID Baseline,这个工作也被CVPR2019的TRMTMCT Workshop接收。

1、前言

行人重识别最近两三年发展十分迅速,每年都以10~15%的Rank1准确度在增长。当然快速发展的背后离不开Baseline的逐渐提高。早期的Baseline还比较低,大部分工作都在很低的Baseline上完成,因此准确度不高。而2017~2018这个时期,随着Pytorch框架的崛起,很多学者基于Pytorch框架开始调ReID的Baseline,因此性能也就越来越强(很多博士和博士生都做出了巨大贡献)。2018年暑期我和廖星宇师弟在旷视实习的时候,开源过一个GitHub项目,并且发布一篇知乎文章:

Sherlock:一个强力的ReID basemodel370 赞同 · 48 评论文章

基于这个项目,我们最近这个项目进行扩展,完成一个更加强力的ReID Baseline。通过引入一些低消耗的训练Tricks,使用ResNet50的Backbone,这个Baseline在Market1501可以达到94.5%的Rank1和85.9%的mAP。当然使用更深的Backbone还可以继续提高性能。值得一提的是,和大量拼接多个local feature的方法取得高准确度的方法不同,我们只使用了一个global feature。目前代码已经开源了,欢迎学术界和工业界使用这个Baseline进行论文和产品的研究,comments are welcome!

2、背景

Baseline对于一个领域的研究起着非常重要的作用,但是我们观察最近一年顶会发表的ReID工作,发现论文之间Baseline的差距特别大。以Market1501为例,极少数工作在90以上的Baseline上开展,而大部分集中在80~90之间,甚至部分工作在80以下的Baseline上开展。而DukeMTMC-ReID更是没有一个Baseline超过了80的Rank1。我们都清楚,在低的Baseline上面方法涨点更加容易。另外不同的Baseline也很难统一比较不同方法的优劣性。基于这个因素考虑,我们觉得需要统一一个强力的Baseline。

综上我们做这个工作的目的有以下几个:

  • 经过统计发现,最近一年顶会上发表工作的Baseline性能差异性很大,并且大部分处在很低的水平。因此我们希望统一一个强力的Baseline。
  • 我们希望学术界的研究能够在这个Baseline进行扩展,这样能够早日把Market1501、DukeMTMC-reID数据集给刷爆。只有这些数据集刷爆了,学界才能意识到ReID应该进入下一阶段。
  • 我们希望给社区的审稿人一些参考,哪些trick对模型的性能会产生重大的影响,审稿时应该考虑这些trick。
  • 我们希望给业界提供一些训练trick,在很低的代价下提高模型的性能,加快产品研发的过程。

庆幸的是,过去几年我们在ReID研究过程中,收集了一些训练的trick。通过把这些trick引入到现有的Baseline上面,我们得到了一个强力的Baseline,以ResNet50位Backbone,最终在Market1501取得了94.5%的Rank1。当然,为了判断这些trick是在训练域上疯狂overfit,还是增加了模型的泛化能力,我们同时做了cross-domain实验。

3、Standard Baseline

首先我们来回顾一下标准的Baseline。通常我们使用ResNet50来Backbone,一个mini-batch包含了P个人的各K张图片,图片经过Backbone之后得到global feature,然后这个特征分别计算一个分类损失(ID loss)和一个triplet loss(batch hard mining)[1]。如果这个baseline调的好话,应该会接近90%的rank1水平。我们得到的结果是87.7%的rank1。

常用的标准Baseline

4、Our tricks

这一小节我们将会逐个介绍我们使用的trick,包括:Warmup学习率、随机擦除增广、Label Smoothing、Last Stride、BNNeck和Center loss。

(1) Warmup Learning

Warmup学习率并不是一个新颖的东西, 在很多task上面都被证明是有效的,在我们之前的工作[1]中也有过验证。标准Baseline使用是的常见阶梯下降型学习率,初始学习率为3.5e-4,总共训,120个epoch,在第40和70个epoch进行学习率下降。用一个很大的学习率初始化网路可能使得网络震荡到一个次优空间,因为网络初期的梯度是很大的。Warmup的策略就是初期用一个逐渐递增的学习率去初始化网络,渐渐初始化到一个更优的搜索空间。本文使用最简单的线性策略,即前10个epoch学习从0逐渐增加到初始学习率。

(2) Random Erasing Augmentation

Random Erasing Augmentation(REA)[2]是一种随机擦除的数据增广方法。简单而言就是在图像中随机选择一个区域,打上噪声mask。这个mask可以是黑块、灰块也可以是随机正太噪声。直接看图就能明白,具体细节可以看论文。所有参数都是直接利用原论文的参数。随机擦除是一种数据增广的方式,可以降低模型过拟合的程度,因此可以提升模型的性能。

(3) Label Smoothing

标签平滑(LS)是论文[3]提出的一种方法,应用于分类任务。传统的分类任务用的是交叉熵损失,而监督label用的是one-hot向量。因为交叉熵是相对熵在one-hot向量前提下的一种特例。但是one-hot是一种很强的监督约束。为了缓和label对于网络的约束,LS对标签做了一个平滑:

(4) Last Stride

ResNet50 Backbone的每个block最后一层conv都会有一个下采样的过程,即最后一层conv的stride=2。正常输入一张256×128的图像,网络会输出一个8×4的feature map。通常而言,增大尺寸一般是能够提升性能的。一个很简单的操作就是把最后一个conv的stride改为1,我们把这个stride叫做last stride。这个操作不需要增加任何的参数量,也不改变模型的参数结构,但是会把feature map尺寸扩大为16×8。更大的feature map可以提取到更加细粒度的特征,因此能够提升模型的性能。

(5) BNNeck

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

 

 

 

 

 

 

(4) Comparison of State-of-the-Arts

我们把Baseline的结果直接和SOTA的方法进行比较,除了少数几个能够达到95+的结果以外,没有任何方法的结果能够超越我们。值得一提的是,我们仅仅使用一个简单global feature,加了一层BN而已。目前主流能够达到93+的方法都concatenate多个local feature。腾讯的金字塔结构更是融合21个不同尺度的local feature。在所有只使用一个global feature的方法里,我们的性能是大大领先的。而且我们的训练代价非常小,就是加了一些trick而已。(所以也验证了深度学习领域的那句名言:天下万物,多为调参?) 

(5) Batch & Image Size

我们发现不同论文中的batch size和image size都不一样,因此我们也测试了这两个参数的影响。结果如下,简单的概括一下就是:Batch size呈现一种大batch效果更好的趋势,但是不是特别明显;而Image size对于global feature性能没有太大的影响。

我们推测是,batch越大,batch hard mining挑选的样本也就越难,因此网络性能越好。而训练图像的尺寸是128×64,不管你用多大的image size,都不增加额外的信息。所以只要大于128×64,image size就对性能没有太大的影响。

Batch size

Image size

(6) Backbone

在我们开源了代码之后,有好心人帮我们扩展了Backbone,包括ResNet、SENet、SeResNet等等。大致结果呈现网络越深,效果越好,这也符合正常的结论。其中SeResNeXt101取得了95%的rank1和88%的mAP,基本已经相当高了。ResNet152在Market1501上有点反人类,可能是数据集太小,并且比较简单,所以overfit了吧。

不同的Backbone结果

6、结语

这篇论文给出了一个强力的Baseline,我们不希望这个工作成为一种暴力刷点的工作,而是希望这个Baseline能够促进ReID领域的发展。无论是学术界还是工业界,只要能够使用这个Baseline做有用的研究或者产品,我们就觉得这个工作是有意义的。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值