CVPR 2019 Oral | 京东目标检测算法ScratchDet的深入思考

本文为CVPR 2019 Oral ScratchDet算法的第一作者朱睿投稿,转载自作者公众号BringYourOwnVision,欢迎大家于文末右下角关注。

使用ImageNet预训练的网络模型能够帮助目标任务(物体检测、语义分割、细粒度识别等)快速收敛,然而使用预训练模型会带来诸多限制,其中一个问题就是无法改动特征提取网络的结构来适应不同需求的任务。

那么,如果不使用预训练模型,进行随机初始化训练,达到较高准确率的某些必要条件是什么?

本文首先介绍 《ScratchDet: Exploring to Train Single-Shot Object Detectors from Scratch》这篇CVPR2019的Oral论文,作者们从优化的角度出发,通过实验解释了梯度稳定手段之一的BatchNorm是如何帮助随机初始化训练检测器,进而结合了ResNetVGGNet来加强对小物体的检测。

然后分析其他几篇做过随机初始化训练检测器的论文,通过实验细节总结出随机初始化训练检测器的必要条件,文中采用下面的名称替代,按照论文出现时间在此列举:

DSOD:https://arxiv.org/abs/1708.01241

DetNet: https://arxiv.org/abs/1804.06215

SwitchNorm:https://arxiv.org/abs/1806.10779

CornerNet:https://arxiv.org/abs/1808.01244

ScratchDet:https://arxiv.org/abs/1810.08425v3

DropBlock:https://arxiv.org/abs/1810.12890

Rethinking:https://arxiv.org/abs/1811.08883

现有的检测训练任务存在三个限制:

  • 分类任务与检测任务的Learning bias: 一方面是两者损失函数的不同,一方面是两者对平移不变性的敏感度不同,还有另一方面是数据集的差异:ImageNet数据集是单图单物体,COCO & VOC数据集是单图多物体。

  • 如果想要改动检测模型中的特征提取网络的结构,需要对网络重新预训练再进行检测任务的finetune,而ImageNet预训练实验的代价比较大。这个问题在移动端、CPU实时检测器等设计中尤为突出,比如:Pelee,Tiny-SSD,YOLO-LITE,Fire-SSD,Tiny-YOLO,Tiny-DSOD,MobileNetV2等等。常用的VGG-16、ResNet的计算量以及参数量对于移动端的负载较大,而设计小网络的每次修改都需要重新在ImageNet上训练,时间代价与计算资源消耗都比较大。再比如像DetNet,想要设计一种专用于检测的网络,用在ImageNet预训练的实验就要花很多的时间。

  • Domain Transfer问题,比如从ImageNet自然与生活场景图像迁移到医疗图像中(X光图,核磁共振图)的癌症检测(S4ND)、卫星图像检测(You Only Look Twice)是否有用,不同域之间的迁移是否仍然能发挥作用?

最开始讨论随机初始化训练的DSOD将必要条件归结到一阶段检测器和DenseNet的dense layer-wise connection上,但是这样做很大程度限制了网络结构的设计。作者想找到随机初始化训练检测器的某些通用原因。受到NeurIPS 2018《How Does Batch Normalization Help Optimization?》这篇文章的启发: 

通过理论和实验说明BN在优化过程中发挥的作用:

  • 梯度更加稳定,更加可预测。

  • 计算梯度时可采用更大的步长,即更大的学习率来加速训练。

  • 防止loss函数解空间突变,既不会掉入梯度消失的平坦区域,也不会掉入梯度爆炸的局部最小。

沿着这个思路作者在SSD300检测框架上给VGG网络与检测子网络分别加上了BN来进行随机初始化训练(PASCAL VOC 07+12训练,07测试),调整学习率之后,得到的最好结果78.7mAP,比直接随机初始化训练SSD的结果(67.6)高11.6,比原SSD300(77.2)高1.5,比使用预训练模型VGG-16-BN(78.2)高0.6。实验细节写在论文里。

从左到右的3幅图分别是训练loss,梯度的L2 Norm,梯度的波动程度。通过这三幅图能够从优化角度分析,为什么BN能够帮助随机初始化训练检测器,蓝色曲线代表直接对SSD使用0.001的学习率做从0训练,红色曲线在蓝色曲线的基础上在VGG网络上加了BN,绿色曲线在红色曲线的基础上使用了10倍的学习率。

可以看到:从蓝色到红色,给特征提取网络添加了BN之后,梯度的波动程度大幅下降,梯度趋于稳定,优化空间更加平滑,训练loss下降,mAP从67.6升高到72.8。而从红色到绿色,平滑的优化空间允许使用更大的学习率,loss进一步下降,mAP也从72.8升高到77.8。我们在检测子网络(detection head)也做了一样设置的实验,得出了相似的结论与梯度分析图,具体请参考论文。

而借着随机初始化训练带来的优势,可以对特征提取网络进行改动。之后借作者鉴了VGGNet和ResNet的优点,最大程度保留原图信息,来对小物体检测(论文中输入图像大小是300X300,小物体较多)。

首先分析ResNet和VGGNet的优缺点:

在SSD的升级版论文DSSD中,作者将SSD的特征提取网络从VGG-16替换成了ResNet-101,所得实验结果汇总如下表:

ResNet-101在ImageNet的top-5 error上比VGG-16低了2.69%,但是在SSD300-VOC的结果却低于VGG-16,为什么?跟VGG-16相比,ResNet-101的优点是分类能力强,缺点是对小物体识别能力较差,因为第一个卷积层的stride=2,在初始输入的图片上就进行下采样,会损失某些原图信息,尤其是小物体的信息。

1) 在VOC_300时,ResNet-101的缺点>优点,输入图片较小,图片中小物体数目变多,缺点被放大;且类别只有20类,不能发挥ResNet强大的分类能力,在SSD上结果低于VGG-16。

2) 在VOC_512时,ResNet-101的缺点<优点,输入图片变大,图片中小物体数目变少,缺点被缩小,在SSD上结果高于VGG-16。

3) 在COCO上时,ResNet-101的缺点<优点,任务类别有80类,是VOC的4倍,ResNet-101能充分发挥分类能力,所以无论输入300x300或者512x512,在SSD上结果均高于VGG-16。

当然这里的结论需要进一步结合数据集本身的特性来验证,比如数据集规模vs模型参数量,数据集每张图片的instance数目,数据集小物体数量等等因素。

因此作者借鉴了ResNet与VGGNet的优点,首先把ResNet的第一个卷积层的stride从2改成1,也就是取消第一个下采样操作, 并且参照了DSOD的方法,替换第一个卷积层为3个3x3卷积层:这样做的目的是,尽可能保持原图信息不损失,并且充分利用。

注意:在将新网络替换到SSD框架上时,仍然最大程度保证实验的公平性。首先,用于检测的特征图在论文中保持38×38, 19×19, 10×10, 5×5, 3×3, 1×1的大小,并没有使用大的特征图;其次,保证每个用于检测的特征图的channel数目相同。

(a) 原ResNet-18: 结果为73.1 mAP。

(b) ResNet-18-A: 去掉了ResNet-18的max-pooling层,即取消第二个下采样操作,结果为75.3 mAP。

(c) ResNet-18-B: 将ResNet-18的第一个卷积层的stride=2改为1,即取消第一个下采样操作,结果为77.6 mAP 。

(d) Root-ResNet-18: 将ResNet-18-B的第一个7x7卷积核替换成3个3x3卷积,结果为78.5mAP。

分析:在300x300大小的输入图像上(小物体较多):

对比(a)与(c): 取消第一个下采样操作,提升了4.5mAP。

对比(a)与(b): 取消第二个,保留第一个下采样操作 , 提升2.2mAP。

对比(b)与(c): 是否对原图进行下采样,会有2.3mAP的影响。

对比(c)与(d): 替换7x7为3个3x3,使用更加冗余的特征会提升结果。

之后,作者将SSD在特征提取网络后面添加的多个卷积层替换为残差模块,减少了参数量,计算量,提升了FPS(SSD300-Root-Res34:20FPS->25FPS), 而且检测准确率没有下降(在VOC07上,80.4mAP):

       

最后,作者使用了Root-ResNet-34来做随机初始化训练,得到较好的检测结果:

(07+12训练,07测试):80.4 mAP ,

(07++12训练,12测试):78.5 mAP,

(COCOtrainval35k,COCO测试):32.7 AP,

值得注意的是,AP@S 13.0 ,在小物体检测结果相对较好。

作者们还对比了训练时间,使用mmdetection检测框架(使用了repeat dataset加速训练trick),在输入为300x300的时候,随机初始化训练大约需要84.6小时,而使用预训练模型fine-tune需要29.7小时。

但是相比起ImageNet数以百万计的图片数目与几周的训练时间来说,随机初始化训练检测器使用的时间相对更少的,可以被人们所接受。


接着给出我个人总结的关于随机初始化训练检测器的必要条件:

  • 需要稳定梯度的优化手段(clip_gradientBNGNSN等)。

  • 训练足够多的epoch与合适的学习率。 

  • 数据训练集要相对较大。而对于小数据集,在训练时需要一定的数据增广。

将文章开头列出的几篇文章有关随机初始化训练的实验配置列出:

1. 需要能够稳定梯度的优化手段:

BatchNormGroupNormSwitchableNorm以及clip_gradient都是能够稳定梯度的优化手段(注意BN需要在单张显卡中达到一个较大的batch以获得足够的统计量,sync_BN解决了这个问题)   

关于BN对于随机初始化训练检测的分析写在ScratchDet分析的前半部分(里面有充足的对比实验),不在此赘述。 我们BYOV公众号第二期已经分享了一个关于这两篇解释BN的(NeurlPS2018)论文的推文:

《How Does Batch Normalization Help Optimization?》

《Understanding Batch Normalization.》  

  

在Kaiming的Rethinking里,也强调了使用Normalization,但是因为两阶段检测器训练的输入图片分辨率较大,每张显卡只能容纳两张图,所以没有使用BN而选择了sync_BN和GN。

Rethinking训练VGG时候没有添加BN,而是用了msra初始化就可以成功随机初始化训练。但我个人认为是和数据集规模有关(在ScratchDet是使用”07+12”,16551张图来做随机初始化训练的探索性实验,而Rethinking是在用coco的大约11.5W张图训练,训练集数量差大约10W张图片)。

从表格中也可以看出,所有随机初始化训练的实验,都使用了稳定梯度的Normalization。另外我们在随机初始化训练Faster R-CNN with VGG16的时候,有两种情况能够成功收敛,但是结果仍比有预训练低5个点,一种是给VGG16添加BN,另外一种是使用clip_gradient,这个操作限制发生突变的梯度,也是一种稳定梯度的手段。不论是BN,SN,GN,还是clip_gradient,我认为只要有能够稳定梯度,使优化空间更平滑方法,就能够帮助随机初始化训练。

     

2. 训练足够多的epoch与合适的学习率:

在汇总的表格中可以看出,成功随机初始化训练与一阶段or二阶段检测器没关系。(对比epoch的时候要分一阶段和两阶段,两者因为算法的问题训练epoch数目差异较大)

一阶段方法(ScratchDet、CornerNet、DSOD、DropBlock)都随机初始化训练了较多的epoch,而且结果都超出了有预训练。

二阶段方法中DetNet、SwitchNorm训练了较少epoch,随机初始化训练的结果比有预训练的结果差3-5个点,但是在Rethinking中,训练epoch从24升高到~74,随机初始化训练的结果超过了有预训练的结果。而且Rethinking文章本身也做了许多epoch的实验:

    

而对于初始学习率,在ScratchDet中有许多关于学习率的实验,最终选择了较大的0.05。从汇总表格中可以看到,除了CornerNet,其他检测器都使用了相对较大的学习率(0.02-0.1),毕竟随机初始化训练需要更大的步长来进行全局最优搜索。(当然,学习率的设置还要看具体的任务与服务器配置)

3. 数据训练集要相对较大。而训练小数据集需要一定的数据增广:

Rethinking文章中,在COCO训练集的的11.5W张图片上随机初始化训练均达到了较好的结果,而在小数据集PASCAL VOC上,却没有超过预训练的结果:

我们在使用Faster R-CNN with VGG16随机初始化训练的时候(PASCAL VOC 07+12训练,07测试),最好的结果(添加BN)只能达到68mAP,比有预训练模型差5个点,甚至出现了过拟合。Rethinking这篇文章里遇到了同样的问题,并且建议在小数据集使用预训练模型。

反过来想,为什么在ScratchDet论文中,作者能够在SSD上成功随机初始化训练VOC? 因为SSD有充足的数据增广手段,而FasterR-CNN只有一个flip。所以我个人认为在小数据集上,为了避免过拟合,需要使用一定的数据增广手段来随机初始化训练。

 

总结下来关于随机初始化训练检测器的3个必要条件:

  • 需要稳定梯度的优化手段(clip_gradient、BN、GN、SN等)

  • 训练足够多的epoch与合适的学习率。

  • 数据训练集要相对较大。对于小数据集,在训练时需要一定的数据增广。

 

目前,已经有论文成功把随机初始化训练用在其他任务上,比如:JD AI ReserachWIDER FACE人脸检测竞赛排名第一的ISRN,使用GN与两倍epoch随机初始化训练来重新设计用于检测小人脸并且相对节省显存的网络。

文章最后总结一下我认为现有可以继续深入研究的地方:

  • 为什么使用ImageNet或其他超大规模数据集预训练的模型能够加速模型收敛?

  • 更加有效的稳定梯度的优化手段。

  • 探索图像分类任务与检测,分割等其他任务的learning bias与gap。

  • 借助随机初始化训练的优势,大量尝试移动端的小型检测网络。

  • 如果在该领域能够成功随机初始化训练,那么可以在该领域针对数据集的特点设计专用的特征提取器,而不是一味采取针对ImageNet设计的分类网络。

ImageNet数据集深深地影响了计算机视觉的发展,相信未来会有许多好的工作解释清楚迁移学习中的奥秘、提出更加高效的训练策略、打开深度学习的黑箱。

作者简介:

朱睿,中山大学数据科学与计算机学院大四学生,现于京东AI研究院视觉与多媒体实验室实习。

导师简介:

石海林,现任京东AI研究院资深研究员,博士毕业于中科院自动化所,专注于人脸计算、物体检测、元学习等方向研究。

参考论文:

ISRN: https://arxiv.org/abs/1901.06651

Pelee: https://arxiv.org/abs/1804.06882

Tiny-SSD: https://arxiv.org/abs/1802.06488

YOLO-LITE: https://arxiv.org/abs/1811.05588

Fire-SSD: https://arxiv.org/abs/1806.05363 

Tiny-YOLO: https://arxiv.org/abs/1506.02640

Tiny-DSOD: https://arxiv.org/abs/1807.11013

MobileNetV2: https://arxiv.org/abs/1801.04381

S4ND: https://arxiv.org/abs/1805.02279

DSSD: https://arxiv.org/abs/1701.06659

You Only Look Twice: https://arxiv.org/abs/1805.09512

Understanding Batch Normalization: 

https://arxiv.org/abs/1806.02375

How Does Batch Normalization Help Optimization: 

https://arxiv.org/abs/1805.11604

mmdetection: https://github.com/open-mmlab/mmdetection

作者主页链接:

Rui Zhu:https://kimsoybean.github.io/

Shifeng Zhang:http://www.cbsr.ia.ac.cn/users/sfzhang/

Xiaobo Wang:http://www.cbsr.ia.ac.cn/users/xiaobowang/

Longyin Wen:http://www.cbsr.ia.ac.cn/users/lywen/

Hailin Shi:http://hailin-ai.xyz/

Tao Mei:https://taomei.me/

加群交流

关注目标检测技术,欢迎加入52CV-目标检测交流群,扫码添加CV君拉你入群,

(请务必注明:目标检测)

喜欢在QQ交流的童鞋,可以加52CV官方QQ群:702781905。

(不会时时在线,如果没能及时通过验证还请见谅)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值