我们发现,对于图中的全局上下文网络分支,训练时如果采用随机初始化,性能提升非常有限。如果用预训练的参数初始化,在ImageNet DET验证集上可以得到超过3个点的性能提升。对于ResNets,RoIPooling后面的conv5有9层卷积。而Faster R-CNN finetune时一般初始学习速率又会设得比较小(0.001)。这就导致从头训练这9层卷积比较困难。因此,这里预训练显得尤为重要。另外,[2]还把全局上下文特征同时用于分类和Bounding Box回归。我们发现全局上下文特征对于Bounding Box回归没有帮助,只对分类有帮助。4. 训练技巧 a) 平衡采样。很多数据集存在样本不均衡的问题,有些类别特别多,有些类别特别少。训练模型时,从一个图像列表中依次读取样本训练。这样的话,小类样本参与训练的机会就比大类少。训练出来的模型会偏向于大类,即大类性能好,小类性能差。平衡采样策略就是把样本按类别分组,每个类别生成一个样本列表。训练过程中先随机选择1个或几个类别,然后从各个类别所对应的样本列表中随机选择样本。这样可以保证每个类别参与训练的机会比较均衡。在PASCAL VOC数据集上,使用平衡采样性能可以提升约0.7个点。 b) 难例挖掘(OHEM [5])。使用了难例挖掘后,收敛更快,训练更稳定。在ImageNet DET数据集上,性能可以提升1个多点。 c) 多尺度训练。使用多尺度训练的话,可以让参与训练的目标大小分布更加均衡,使模型对目标大小具有一定的鲁棒性。5. 预测技巧 预测阶段,我们用了多尺度预测,水平翻转,和检测框投票。这些策略的具体实现在很多文献中都有描述。这里我们可以分享一下多个检测结果的融合策略。当使用多尺度预测,水平翻转,还有多模型Ensemble时,对于同一张测试图像,我们会得到好几组结果。对于这些结果,最直观的融合方式就是把所有的检测框放在一起,然后用非极大值抑制(NMS)处理一下。但是我们发现另一种方式效果更好,就是把RPN和FRCN分开来做。先对RPN做多尺度、水平翻转、多模型的融合,得到一组固定的Proposal之后,再对FRCN进行多尺度、水平翻转、多模型的融合。RPN的融合用NMS更好,FRCN的融合用对Proposal的置信度和Bounding Box位置取平均值的方式更好。 总结
本文总结了我们做出的一些Faster R-CNN改进技巧,并分享了算法实现过程中遇到的细节问题。正如谚语所言,”The devil is in the details.” 希望我们的这些算法细节对同行以及相关的算法爱好者们提供一定的帮助和指引。我们抛砖引玉,期待同行们也可以分享自己的经验。
参考文献
[1] Ren,Shaoqing, et al. "Faster R-CNN: Towards real-time object detection withregion proposal networks." Advances in neural information processingsystems. 2015.
[2] He,Kaiming, et al. "Deep residual learning for image recognition." arXivpreprint arXiv:1512.03385 (2015).
[3] He,Kaiming, et al. "Identity mappings in deep residual networks." arXivpreprint arXiv:1603.05027 (2016).
[4] Yang,Bin, et al. "Craft objects from images." arXiv preprint arXiv:1604.03239(2016).
[5] Shrivastava,Abhinav, Abhinav Gupta, and Ross Girshick. "Training region-based objectdetectors with online hard example mining." arXiv preprintarXiv:1604.03540 (2016).
该文章属于“深度学习大讲堂”原创,如需要转载,请联系loveholicguoguo。作者简介 钟巧勇本科毕业于南京大学,博士毕业于中科院上海生科院计算生物学研究所。2014年加入海康威视研究院,现任高级研究员。主要从事深度学习,计算机视觉方面的算法研究工作,研究方向是基于深度学习的目标检测。海康威视研究院招贤纳士,欢迎投简历至: