目录

  • 论文相关信息
  • Abstract。
  • 1 Introduction
  • 2 Related Work
  • 3 Dynamic Quality in the Training Procedure
    • 3.1 Proposal Classification
    • 3.2 Bounding Box Regression
  • 4 Dynamic R-CNN
    • 4.1 Dynamic Label Assignment
    • 4.2 Dynamic SmoothL1 Loss
  • 5 Experiments
  • 5.1 Dataset and Evaluation Metrics
  • 5.2 Implementation Details
    • 5.3 Main Results
    • 5.4 Ablation Experiments
    • 5.5 Studies on the effect of hyperparameters
    • 5.6 Universality
    • 5.7 Comparison with State-of-the-Arts
  • 6 Conclusion
  • 参考

论文相关信息

1.论文题目:Dynamic R-CNN: Towards High Quality Object Detection via Dynamic Training

2.发表时间:2020.04

3.文献地址:https://arxiv.org/abs/2004.06002

4.论文源码:https://github.com/hkzhang95/DynamicRCNN

论文贡献:

  1. 基于目标检测的训练特征,指出基于样本分布的变化而动态调整训练的策略;
  2. 提出DLA和DSL的训练方法,仅通过引入两个变量就可以实现;
  3. 引入该方法在提高模型性能的同时不会降低其速度。

Abstract。

作者指出two-stage detectors固定的网络设置和动态的训练过程存在不一致问题,使得网络性能下降,例如固定标签分配策略回归损失函数就无法拟合动态变化的proposal分布,进而不利于训练一个高质量的检测器。因此,作者提出Dynamic R-CNN,能够基于训练中的proposals的统计数据来自动地调整标签分配标准(IoU阈值)和回归损失函数的形式(Smooth L1 Loss的参数)。这种动态的设计能够更好的利用训练样本,促使检测器能够拟合更多高质量的样本。该方法使得基于ResNet-90-FPN在MS COCO数据集上AP提高 1.9%,AP90提高 5.5%。

这里的高质量检测器指的是检测结果是在高IoU下的。

1 Introduction

无论是one-stage还是two-stage 的检测器,其pipeline都可以看作是训练一个classifier和一个regressor。对于classifier的训练,主要问题是如何判断proposals是正样本还是负样本,之前传统的方法是通过proposals和gt之间的IoU阈值来判断。但是正如Cascade R-CNN中所述,以一个固定的IoU阈值训练得到的检测器在应用其它的IoU阈值时表现会下降。然而也不能开始训练时就设置很大的IoU阈值,否则会导致正样本过少,Cascade R-CNN中的方法是通过IoU阈值逐渐增大的几个阶段来组件的精炼proposals,这种方法虽然有效,但是time-consuming。对于regressor来说,问题是相似的,虽然在训练的过程中proposals的质量不断提高,但是Smooth L1 Loss的参数却是固定不变的,训练得到的检测器离高质量检测器仍有距离。

首先作者观察到一个被忽略的事实,即在训练的过程中proposals的质量是在提高的。如图1所示,即使在不同的IoU阈值下,随着训练过程的进行,正样本的数量都在显著提高。

图1.a和b图都证实了训练过程中proposals的质量得到提高。

受此观察的启发,作者提出Dynamic R-CNN,其由两部分组成:Dynamic Label AssignmentDynamic Smooth L1 Loss,分别对应分类回归分支。

对于classifier,基于训练时proposals分布逐渐调整IoU阈值来得到一个能够区分高IoU建议框的分类器。将阈值设置为让proposals 的IoU保持一定的比例,这样能够反映总体分布的质量。

对于regressor来说,改变回归损失函数的形状,来适应性地拟合回归目标的分布变化,确保高质量样本对训练的贡献。因为β控制着小误差梯度的大小,所以这里会基于回归目标的分布来调整Smooth L1中的β。

通过这套动态方案,不仅能够缓解训练开始时缺少数据的问题,同时还能够享受高IoU训练的好处。这两个模块对于检测器的不同部分,因此能够合作工作来得到一个高质量的目标检测器。该模型简单高效,能够泛化到其它任务上,推断时不会引入额外的代价。

2 Related Work

这部分简单介绍R-CNN系列检测器,指出目标检测中常用到的分类方法以及边界框回归方法。

Region-based object detectors.基于区域的目标检测器一般将目标检测器任务分为边框分类和回归问题。其中为代表的检测器是R-CNN,Fast R-CNN,Faster R-CNN等,他们首先生成大量的候选建议框,然后从这些候选框中按照一定的正负样本比例随机采样一个batch送入第二阶段同时进行分类和回归。之后出现了采用全卷积来提高速度的R-FCN,使用top-down连接结合多尺度特征的FPN。此外,近年来还有其它的改进。

Classification in object detection.近期研究者聚焦于从各个方面来改进目标分类器,检测器的分类得分不只是决定了每个proposal的语义类别,同样也隐含了位置的精确度,因为NMS开始使用的是分类得分来排序的,然后根据得分排序抑制低置信度的边框。然而正如IoU-Net中提到的,分类得分和位置精度间存在较小的关联,这使得排序时存在一些噪音,并且性能受限。因此IoU-Net采用了一个额外的分支来预测IoU 得分和精炼分类置信度。Soft NMS则是设计了一个KL loss来直接建模边框回归的变化,将loss加入NMS排序的考虑因子。另一种提高分类的方向是通过提高IoU阈值来训练得到高质量的分类器,但是这种方式的会导致正义不数量减少从而难以训练,正如Cascade R-CNN中提到一样,后面Cascasde R-CNN采用了多阶段不同IoU阈值的方式解决该问题,但是这种方式较慢。

**Bounding box regression。**模型的性能取决于多任务学习中不同loss 的相对权重。Cascade R-CNN也采用不同的回归归一化因子在不同阶段调整回归项的适应性。此外还有Libra R-CNN和SABL等。但是他们都主要聚焦于一个固定的方案,忽略了训练时学习对象的动态分布。

Dynamic training。当前的动态训练方案中尚无解决目标检测核心问题的。

3 Dynamic Quality in the Training Procedure

目标检测任务包含两个子任务:识别和定位,本节将从这两个子任务出发探索他们的训练过程来得到一个高质量的目标检测器。

3.1 Proposal Classification

对于目标检测中的分类器来说,如何分配标签是一个关键的问题。通常会基于IoU进行标签分类,而这种方法可以总结为以下的公式:

其中b指代一个边框,G指真实框的集合,T+,T−T_+,T_-T+​,T−​分别指代正负样本的IoU阈值。1,0,-1分别指代正样本、负样本和被忽略的样本。本质上来说,正负样本的定义是人为的,如Faster R-CNN中T+,T−T_+,T_-T+​,T−​默认设置为0.5.因为分类器的目标是区分正样本和负样本,以不同的IoU阈值训练则会得到相应的质量。因此,为了得到高质量的目标检测器,我们需要以高的IoU阈值来训练分类器,然和人Cascade R-CNN中已经提到这样的缺点,至于其级联的多阶段解决方案虽然有效,但是time-consuming。
前面提到训练过程中,建议框的质量实际上是不断的提高的,所以可以采用一种逐步的训练方法。初始时高质量的proposals不够,则可以在第二个阶段使用一个低IoU阈值来适应低质量的proposals,随着训练进行,proposals质量逐步提高,就能得到足够的高质量proposals。最后就能增加IoU阈值来更好的利用他们来训练一个高质量的检测器。具体的过程在下一节介绍。

3.2 Bounding Box Regression

边框回归的任务是将正候选边框b回归到目标真实框g,该过程通过回归损失函数LregL_{reg}Lreg​监督来学习。为了促进回归目标对尺度和位置的不变性,LregL_{reg}Lreg​基于偏移Δ=(σx,σy,σw,σh)\Delta=(\sigma_x,\sigma_y,\sigma_w,\sigma_h)Δ=(σx​,σy​,σw​,σh​)计算,其中偏移定义如下:

由于边框回归基于偏移计算,σx,σy,σw,σh\sigma_x,\sigma_y,\sigma_w,\sigma_hσx​,σy​,σw​,σh​的绝对值可能非常小,为了平衡多任务学习中的不同项,许多工作中广泛的使用预定义的均值和标准方差来归一化Δ\DeltaΔ。
然而我们发现训练过程中回归目标的分布在转移,如图2 所示,相同的IoU阈值下,均值和方差随着训练进行proposals质量改善而减小,相同的归一化因子下,在SmoothL1 Loss函数的定义下,这些高质量样本的贡献将减小(由于均值和方差均减小,预测的偏移也会减小即损失值减小,而此时正样本的比例是在不断变大的。即相对减小了高质量的正样本在训练过程中的贡献),这不利于训练高质量的回归器。此外,在更高的IoU阈值下,正样本的质量进一步提高,所以他们的贡献也被进一步减小,极大的限制了全局的性能。因此,为了训练出高质量的目标检测器,我们应该拟合proposals的分布变化,调整回归损失函数的形式来抵消高质量proposals的增加。

图2.不同的迭代次数和IoU阈值下的Δ分布,第1,2列对比可知随着训练进行,回归目标分布更加集中,第2,3列对比课之相同迭代次数下增加IoU阈值会显著改变分布。

4 Dynamic R-CNN

为了更好的探索训练过程的动态属性,提出了Dynamic R-CNN,如图3所示。我们的关键点是调整了第二阶段分类器和回归器来拟合proposals的分布变化。这两部分会在下文详述。

4.1 Dynamic Label Assignment

Dynamic Label Assignment(DLA)过程由图3(a)所示。基于前面的正负样本标签分配的等式,动态标签分配(DLA)模块可以被归纳为如下式子:

其中TnowT_{now}Tnow​ 表示当前的IoU阈值。考虑到训练时propsals的分布会时刻变化,我们的DLA基于proposals的统计数据自动地更新来拟合这个分布变化。
具体而言,我们首先计算proposals和他们的目标真实框之间的IoUs得到集合I,然后选择I中第K个最大的值KI−thK_I-thKI​−th作为TnowT_{now}Tnow​。随着训练的进行,TnowT_{now}Tnow​会逐渐地增加,这儿反映了proposals质量的改进。实践中,我们首先计算每个batch的I中的KI−thK_I-thKI​−th,然后每C个iteration使用这C个iteration的KI−thK_I-thKI​−th的均值来更新TnowT_{now}Tnow​,这样能增加网络的鲁棒性。最终训练时使用的IoU阈值如图3(a)所示。

图3.Dynamic R-CNN的整体工作流。根据其训练时的动态性,Dynamic R-CNN主要可分为两部分:(a)Dynamic Label Assignment(DLA)过程和(b)Dynamic SmoothL1 Loss(DSL)。图片的左部分(a)中我们可以发现,随着训练进行会有更多高质量的proposals。随着proposals质量的提高,DLA会基于proposal分布来自动地增加IoU阈值。与此同时,为了拟合部分的变化以及补偿高质量proposals的增加,回归损失函数的形式也要相应的变化,如图中(b)所示。

4.2 Dynamic SmoothL1 Loss

目标检测的定位任务由通常使用的SmoothL1 Loss监督,其定义如下:

这里,x指代的是回归对象,β是个超参数,控制着在哪个范围内应该使用softer loss函数,如l1l_1l1​ loss而不是原来的l2l_2l2​ loss。为了训练鲁棒性,β默认设置为1.0来防止初始阶段未训练好的网络出现爆炸性的损失。β的影响如图4所示,其中改变β会得到一个不同的损失曲线和梯度,实际上更小的β能够更快的达到梯度大小的饱和,使得好的样本对网络的训练有更大的贡献。

图4.不同的β下SmoothL1 Loss的(a)loss曲线和(b)梯度曲线。在R-CNN部分β默认设置为1.0。

如3.2节分析一样,我们需要拟合分布变化并调整回归损失函数来补偿高质量样本。所以提出了Dynamic SmoothL1 Loss(DSL)来改变损失函数的形式来逐渐聚焦于高质量样本,如下所示:

和DLA相似,DSL会根据反映定位准确度的回归对象统计数据来改变βnow\beta_{now}βnow​。具体来说,我们首先获得proposals和它们的目标真实框之间的回归对象E,然后在E中选择第Kβ−thK_\beta -thKβ​−th小的值来更新等式4中的βnow\beta_{now}βnow​。相似的,我们也每C个周期,用每个batch的第Kβ−thK_\beta -thKβ​−th小的值的中位数来更新βnow\beta_{now}βnow​,这里使用中位数而不是分类器中的mean是因为我们在回归标签中发现了更多的异常值。通过这种动态的方式,将会采用适当的βnow\beta_{now}βnow​,正如图3(b)所示。这样能够更好的探索训练样本并且实现一个高质量的回归器。
概括整个方法的话,可以用如下的算法1来描述Dynamic R-CNN。除了proposals P和真实框G,Dynamic R-CNN还有3个参数:前k大的IoU 阈值 KIK_IKI​,前K小的β KβK_\betaKβ​以及更新的iteration数C。和baseline检测器相比我们只多引入了一个超参数,而且实际上结果对这些超参数有很强的鲁棒性。

5 Experiments

5.1 Dataset and Evaluation Metrics

MSCOCO2017数据集,训练时在COCO train split上(~118k图片),消融实验在val split上(~5k图片)。将主要结果上传到评估服务器上在test-dev split上测试最终的结果。评估标准采用的是COCO格式的AP,即0.5到0.95,间隔0.05的IoU阈值。

5.2 Implementation Details

PyTorch实现的,使用maskrcnn-benchmark和SimpleDet框架。采用基于FPN的,使用ImageNet上预训练的ResNet-50做骨干网的Faster R-CNN作为baseline。所以模型在COCO2017 train上训练,在val上测试,不做说明则图片最短边800像素。由于缺少正样本,所有实验中的RPN的NMS阈值有0。7改为0.85。

5.3 Main Results

实验证明Dynamic R-CNN可以和不同的骨干网结合,并且兼容其它的训练和测试技巧,如延长训练iteration,多尺度测试和可变性卷积。在最好的结合下,Dynamic R-CNN达到了49.2% AP,比Faster R-CNN的baseline高2.3。

5.4 Ablation Experiments

为了展示我们提出的方法每个部分的有效性,做了如表2所示的消融实验。

动态训练的图示。下图展示了Dynamic R-CNN在不同设置下训练的过程中IoU阈值和SmoothL1 β变化趋势。显然总体的IoU阈值的趋势是增加的,而SmoothL1 β的趋势是下降的。这些结果证明提出的方法如预期工作。

5.5 Studies on the effect of hyperparameters

其它超参数的影响:

复杂度与速度。如算法1所示,主要的计算复杂度在于IoUs和回归对象的计算,而这些在原来的方法中就已经完成,额外的工作只有计算均值和中位数,而这个基本不会增加训练时间。此外,该方法只改变训练过程,推断的速度不会下降,表6比较了该方法的推断时间。

5.6 Universality

能应用的实例分割领域。

5.7 Comparison with State-of-the-Arts

和SOTA检测器的比较,由于不同的检测器使用了不同的骨干网和训练/测试设置,这里使用两个版本的Dynamic R-CNN做比较。

一个是FPN-based Faster R-CNN with ResNet-101as backbone,达到了42% AP,另一个是Dynamic R-CNN* adopts image pyramid scheme (multi-scale training and testing), deformable convolutions and Soft-NMS,其结果提高到了50.1% AP,超过所有之前的检测器。

6 Conclusion

该论文详细的分析了检测器的训练过程并发现正是其固定的训练方案限制了检测器的整体性能。于是作者基于动态性的先进观点,提出了Dynamic R-CNN来更好地探索训练过程。其简单但有效的组件Dynamic Label Assignment(DLA)和Dynamic SmoothL1 Loss(DSL),能够随着训练的进行,动态的改变基于IoU标签分配的IoU阈值和回归损失函数的形式,使得Dynamic R-CNN在不引入额外代价的情况下性能得到重大的提高。通过在不同检测器和骨干网上的实验验证了Dynamic R-CNN的通用性和有效性。

该方法中更具IoU等统计数据来自适应的选择阈值和ATSS中的思路有些相似,和Cascade R-CNN相比,二者都采用了优化proposals来得到更多高质量proposals进而训练更好检测器的思路,不同的是Cascade R-CNN是通过额外的网络头来级联优化proposals,而Dynamic R-CNN则是通过iteration的迭代来优化的,相比起来,前者由于多了额外网络头,训练更费时,后者至少需要更多的iteration来优化proposals,而且推断时没有额外代价,整体更加高效。

参考

Zhang H, Chang H, Ma B, et al. Dynamic R-CNN: Towards High Quality Object Detection via Dynamic Training[J]. arXiv preprint arXiv:2004.06002, 2020.
(二十一)论文阅读 | 目标检测之Dynamic RCNN
论文阅读|Cascade R-CNN

论文阅读|训练过程中动态改变训练方案的Dynamic R-CNN相关推荐

  1. R语言使用keras包实现包含多个全连接层的二分类预测模型:在模型训练过程中动态可视化每个epoch后的loss值以及accuray值

    R语言使用keras包实现包含多个全连接层的二分类预测模型:在模型训练过程中动态可视化每个epoch后的loss值以及accuray值 目录

  2. dqn在训练过程中loss越来越大_DQN算法实现注意事项及排错方法

    在学习强化学习过程中,自己实现DQN算法时,遇到了比较多的问题,花了好几天的时间才得以解决.最后分析总结一下,避免再走弯路. 有可能开始实现出来的DQN算法,无论怎么训练总是看不错成果.需要注意的地方 ...

  3. 神经网络测试集loss不变_神经网络训练过程中不收敛或者训练失败的原因

    在面对模型不收敛的时候,首先要保证训练的次数够多.在训练过程中,loss并不是一直在下降,准确率一直在提升的,会有一些震荡存在.只要总体趋势是在收敛就行.若训练次数够多(一般上千次,上万次,或者几十个 ...

  4. Pytorch在训练过程中常见的问题

    1 Input type (CUDAFloatTensor) and weight type (CPUFloatTensor) should be the same 仔细看错误信息,CUDA和CPU, ...

  5. 理解YOLOv2训练过程中输出参数含义

    转载自https://blog.csdn.net/dcrmg/article/details/78565440 原英文地址: https://timebutt.github.io/static/und ...

  6. dqn在训练过程中loss越来越大_用DQN算法玩FlappyBird

    DQN算法可以用于解决离散的动作问题,而FlappyBird的操作正好是离散的. FlappyBird的游戏状态一般可以通过图像加卷积神经网络(CNN)来进行强化学习.但是通过图像分析会比较麻烦,因为 ...

  7. Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题

    Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题 参考文章: (1)Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题 (2)http ...

  8. pytorch训练过程中loss出现NaN的原因及可采取的方法

    在pytorch训练过程中出现loss=nan的情况 1.学习率太高. 2.loss函数 3.对于回归问题,可能出现了除0 的计算,加一个很小的余项可能可以解决 4.数据本身,是否存在Nan,可以用n ...

  9. DeepLearning tutorial(2)机器学习算法在训练过程中保存参数

    FROM: http://blog.csdn.net/u012162613/article/details/43169019 DeepLearning tutorial(2)机器学习算法在训练过程中保 ...

最新文章

  1. 拿大厂机器学习岗 offer,吐血整理的面试秘籍!
  2. java 循环展开_Java在Debug的时候,有些变量能无限展开(循环了)?
  3. 揭示Win32 API拦截细节/API hooking revealed (1)
  4. selenium分布式部署
  5. Windows——完全控制面板(上帝模式)
  6. 北妈每日一题:JS从无序乱码找我要的数字!
  7. HBase环境搭建60010端口无法访问问题解决方案
  8. windows10常用快捷键
  9. 常用CASE工具介绍
  10. paip.版本控制CVS-SVN-TFS总结
  11. 数据结构课程设计实验报告
  12. 常用中文字体 Unicode 编码
  13. Excel批量对比工具分享
  14. 路由器第三方固件的刷入与调试
  15. php 执行bat文件,bat执行PHP文件
  16. 【建议收藏】Android初级开发者怎样快速提高开发技能?这20个开源APP能帮到你
  17. 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。(js代码)
  18. hadoop namenode ha方案
  19. 将头像、文字和二维码三部分,合成一张宣传图片
  20. 基于 Vue.js+Springboot 的学院社团管理系统的设计与实现

热门文章

  1. 1Mbps带宽到底能够达到什么效果,看看下面的介绍就懂了。
  2. 使用BurpSuite对IOS客户端app抓包方法
  3. 轻巧的批量图片压缩工具imgfast
  4. 酷跑游戏C语言,毕业设计(论文)-跑酷游戏设计(源程序).doc
  5. IDG刘雨坤:关于SaaS业务七点经验
  6. 对于MCU看门狗IIWDG WWDG喂狗时间的配置参考
  7. conda 多环境切换
  8. 一个APP想法,如何做到从想法到上线的全过程操作
  9. 状态空间平均建模——Flyback
  10. DATEADD()函数