旷视研究院解读COCO2017物体检测夺冠论文

12月6日晚,量子位·吃瓜社联合Face++论文解读系列第一期开讲,本期中旷视(Megvii)研究院解读了近期发表的物体检测论文:《MegDet:A Large Mini-Batch Object Detector》,基于此篇论文提出的MegDet模型,Face++摘下COCO 2017 Detection冠军。

本期主讲人为旷视研究院研究员彭超,同时也是MegDet论文第一作者、COCO 2017 Detection竞赛主力队员,在比赛中主要负责物体检测模型的撰写、训练和调优工作,拥有丰富的深度学习模型调优经验。

此次分享大家反应热烈,全程干货满满,量子位应读者要求,将主要内容整理如下:

论文解读完整回放视频

今天我们主要讲的内容主要集中在DetectionInstance Segmentation上,关于COCO Keypoint比赛相关论文,会在12月13日的晚上7点半由竞赛队的owner王志成,给大家进行一个充分的讲解。

MegDet

在COCO Detection比赛中,我们优先解决的是Batchsize的问题;回顾ImageNet Classification的工作,他们的Batchsize在训练过程中非常大,从起步开始就已经是128,最新的一些研究甚至达到了8000或者32K的水平,这使得人们可以在一个小时、乃至半个小时之内完成ImageNet的训练。

但在COCO Detection任务中,我们发现人们使用的BatchSize非常小。最开始的只有2,相当于是两张卡,一张卡一张图;到后面的一些版本,BatchSize也仅有8,就是8张卡训练,一张图一张卡;最新一些研究的结果会达到16,这个结果跟Classification任务相比,连零头都不到。

这个时候,我们就有了一个疑问:为什么在物体检测中Batchsize会这么小呢?要回答这个问题,我们需要了解物体检测和图像识别的不同之处。对于图像识别而言,算法只需要判断一张图中的主要物体,而主要物体所占像素比例通常较大,因此一张224x224的小图即可满足需求。 但是在物体检测里,人们往往需要检测一些精细的小物体,这些物体所占像素比例非常小,常常不足1%。而现有的神经网络技术一般会逐步缩小特征图的尺寸,为了保证小物体在最后的特征图上占有一定的比例,算法需要一张较大的输入图片,通常的做法是800x800。

由于输入图片尺寸的增长,图像检测所需显存量也会同比例增长,这也使得已有的深度学习框架无法训练大Batch-Size的图像检测模型。而小Batch-Size的物体检测算法又常常会引入如下四个问题:

不稳定的梯度。由于Batch-Size较小,每次迭代生成的梯度的变化会非常大,这会导致SGD算法在一个区域内来回震荡,不易收敛到局部最优值。

BN层统计不准确。由于Batch-Size较小,难以满足BN层的统计需求,人们常常在训练过程中固定住BN层的参数,这意味着BN层还保持着ImageNet数据集中的设置,但其余参数却是COCO这个数据集的拟合结果。这种模型内部的参数不匹配会影响最后的检测结果。

正负样本比例失调。由于Batch-Size较小,一个minibatch之中的图片变化可能非常大,很可能某些阶段正样本框只有个位数。当Batch-Size增大的时候,由于一个minibatch内部的图片数量增加,正负样本比例会优于小Batch-Size的情况。

超长的训练时间。这个原因非常好理解:当Batch-Size较小时,我们必须迭代更多的次数来让算法收敛;随着Batch-Size的增加,算法每次迭代见过的图片数量也随之增长,相应的迭代次数就可以下降,人们也能更快地得到结果。

基于上述四点分析,我们应该对Batch-Size这一问题有了一个直观的认识。我们在比赛中,为了解决这个问题,特意研发了一整套多机训练系统,以实现我们大Batch-Size物体检测算法:MegDet。因为有良好的内部支持,我们的MegDet算法可以几乎无开销完成算量,产生几乎线性的加速比和更优的检测结果。下面,我将介绍MegDet实现过程中的四个要点。

要实现MegDet,首先需要大量的底层支持,大致上可以分为三类:第一是一套GPU 计算云平台,这在我们内部被称为Brain++平台,专门负责统筹规划硬件资源的使用;第二是基于Brain++平台的MegBrain软件框架,提供了诸多深度学习必备的工具箱。第三是在前面两者之上建立的物体检测算法,在此我们基于FPN框架设计了一套检测算法。

这里,我们简单科普一下FPN检测框架。和传统的Faster-RCNN框架不同,FPN在不同尺寸的特征图上提取RoI,以此达到分而治之的效果,即:大物体在小特征图上检测,小物体在大特征图上检测。这种设计既能充分利用现有卷积神经网络的锥形结构,又能有效解决COCO数据集中普遍存在的小物体问题,一举两得。

解决了BN统计不准确的问题。简单来讲,已有的BN统计方法局限于统计单张卡上的图片,做不到多张卡联合统计。由于物体检测本身的特性,单张卡上的图片数量达不到BN统计的要求,因此只能通过多卡联合统计来训练得到结果。为此,我们利用了NCCL(NVIDIA Collective Communications Library)代码库,实现了多卡BN。具体的算法流程可以参照上图,首先通过单卡自主统计BN的参数,再将参数发送到单张卡上进行合并,最后再把BN的结果同步到其他卡上,以进行下一步的训练。

Sublinear Memory技术。这项技术的目的在于减少深度卷积神经网络的显存消耗量,保证我们在比赛之中可以尽可能地使用大模型。我们可以通过上图来简单地体会这项技术的作用。在现有训练方法中,为了计算Conv2中参数(W2, b2)的梯度,人们一般需要保存Conv2的输出结果;但实际上,Conv2的输出结果可以根据Conv1的结果来动态计算,这样Conv2的输出结果就不需要保存,显存消耗也能进一步下降;特别是一些非常深的神经网络,例如152层的模型,Sublinear Memory能显著降低显存的使用量,帮助我们尝试更多的技巧。

介绍一些在大Batch-Size下的学习率调参技巧。16-batch的FPN标准学习率是0.02, 而我们的MegDet的Batch-Size是256。在这种情况下,我们如果直接设定学习率为0.32=0.02 x 16,会导致模型早期迅速发散,无法完成训练。因此,我们需要有一个“逐步预热”的过程,让模型逐渐适应较大的学习率。当训练到一定阶段的时候,我们设定了三个下降阶段:在前两个阶段,我们直接将学习率除以10,最后再将学习率减半。这种学习率的设计主要是为了在比赛中取得极致性能,也是我们的经验所得。

转自:吃瓜社

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171213B004HP00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券