Press "Enter" to skip to content

目标检测算法优化技巧:Bag of Freebies for Training Object Detection

作者简介

 

魏凯峰:计算机视觉、深度学习、机器学习爱好者,CSDN博客专家“AI之路”。

 

本文介绍了目标检测算法的一些优化技巧,目前已经在GluonCV中实现了,整体看下来和之前的那篇  图像分类算法优化技巧: Bag of Tricks for Image Classification 类似。这篇介绍的优化技巧具体而言包括mixup、label smoothing、学习率修改策略的选择、跨卡BN层计算和随机尺度训练,接下来详细介绍。

 

 

论文: Bag of Freebies  for Training  Object Detection Neural Networks

 

论文链接:https://arxiv.org/abs/1902.04103

 

mixup

 

mixup是指将2张输入图像按照一定权重合并成一张图像,基于这种合成图像进行训练的模型更加鲁棒,能够有效降低对抗图像的影响。如图Figure2是在分类算法中使用mixup的例子:

 

 

Figure3是在目标检测算法中使用mixup的例子,合并之后的图像标签包含2张输入图像的所有标签,可以看出这种思想在实现上还是比较容易理解的。

 

 

针对mixup作者做了不同参数设置下的实验效果对比,如Table1所示,这里涉及一个名词:weighted loss,在图表中也做了解释,因为模型训练用的图像来自2张原输入图像通过不同权重合并得到的(如Figure3所示),因此在计算损失函数时(损失函数是基于目标计算的),属于不同输入图像的目标的权重也是不一样的,需要和输入图像在合并时的权重对应。而Table5中第二行的0.5:0.5 evenly表示合成是按照0.5和0.5的权重进行,因此最后计算损失时目标的权重也相等。

 

 

为了证明mixup的视觉效果,作者做了前段时间比较有意思的大象贴图实验,如Figure5所示,第一行使用常规的训练方式训练YOLO v3模型,第二行则是采用mixup方式训练YOLO v3模型,可以看出后者能够有效检测到图像贴上的大象(mix-1和orig-1的对比),不过在orig-2和mix-2的对比中,二者都能检测到大象,这一点在文中没有做详细的解释。

 

 

label smoothing

 

label smoothing是分类算法中采用的优化方式,作者将其引入到目标检测算法的分类支路部分。label smoothing的思想很直接,首先来看看原来分类算法的交叉熵损失函数,公式如下:

 

 

其中qi表示真实标签,pi是预测值,因为q是one-hot形式(假设分类类别数是K,那幺q就是1×K的向量,且其中只有对应的真实类别位置是1,其余都为0)。pi的计算公式如下,这是常见的softmax函数,假设真实类别是i,那幺模型训练过程中会不断使得zi远大于zj,这样pi就越接近1,这样公式2中的L就越接近0,虽然这是训练目标,但训练过程越趋近于这种情况,反而是越容易过拟合的。

 

 

所以label smoothing的思想就是对真实标签q进行改造,使其不再是one-hot形式,公式如下所示,其中K表示类别数,e是一个很小的常数。举个例子,假设K=5,e=0.1,那幺原来q=[0,0,1,0,0],现在q’=[0.02,0.02,0.92,0.02,0.02]。这样在公式2中,当q‘处于非真实标签时仍然有损失值(比如0.02),就使得pi不会非常接近1,这就降低了过拟合风险。

 

 

学习率变化策略

 

学习率变化采用cosine函数且增加warm-up,这部分内容可以直接看Figure6。图中(a)是常见的step修改策略和cosine修改策略+warm-up的学习率变化对比图,可以看到cosine在初始和结束阶段的变化都比较缓慢,在中间部分变化相对快一些,整体而言相比step方式变化会更加平稳一些,这种方式有利于训练过程的稳定,包括warm-up的引入,也是为了训练的起始阶段能够更加稳定地进行。

 

 

跨卡BN层

 

跨卡BN层的计算(synchronized batch normalization),因为目标检测算法的单卡batch size一般不能设置得像分类算法那样大,但是较小的batch size对于单卡计算BN层参数而言并不是很有利,因此跨卡BN层相当于基于多卡数据计算BN层参数,这样计算得到的统计结果更加可靠。

 

随机尺度训练

 

随机尺度训练是指在模型训练阶段采用随机大小的数据进行训练,比如当前批次或epoch采用320×320大小的输入,但是在下一个批次或epoch则采用416×416。这种做法来自YOLO算法,尺寸一般在固定的几个数值中随机选择,比如{320, 352, 284, 416, 448, 480, 512, 544, 576, 608},相邻数值相差32,表示stride。

 

实验结果

 

实验部分采用的模型包括YOLO v3和Faster RCNN,数据集部分采用PASCAL VOC和COCO。Table2是优化的YOLO v3模型在VOC2007测试集上的效果提升对比。

 

 

Table3是优化的Faster RCNN模型在VOC2007测试集上的效果对比。数据增强部分,因为two stage算法涉及ROI的裁剪,因此影响小一些,相比之下在one stage类型算法中影响较大。

 

 

Table4是在COCO数据集上的效果对比,YOLO v3的效果提升尤其明显。

 

 

*延伸阅读

 

CVPR2019目标检测方法进展综述

 

目标检测最新方向:推翻固有设置,不再一成不变Anchor

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注