技术揭秘:海康威视PASCAL VOC2012目标检测权威评测夺冠之道

原创 2016-09-21 钟巧勇 深度学习大讲堂
点击上方“深度学习大讲堂”可订阅哦!深度学习大讲堂是高质量原创内容平台,邀请学术界、工业界一线专家撰稿,致力于推送人工智能与深度学习最新技术、产品和活动信息!    
 
    近年来,随着深度学习的崛起,计算机视觉得到飞速发展。目标检测作为计算机视觉的基础算法,也搭上了深度学习的快车。基于Proposal的检测框架,从R-CNN到Faster R-CNN,算法性能越来越高,速度越来越快。另一方面,直接回归Bounding Box的框架,从YOLO到SSD,在保持速度优势的同时,性能也逐渐得到提升。“深度学习大讲堂”往期介绍过这方面的进展,在此不再赘述。
    近期,我们在PASCAL VOC2012目标检测上提交的结果mAP性能达到87.9,刷新了世界记录,排名第一名,如下图所示: 
 
    
 
方法上,基于Faster R-CNN [1],我们做了一系列的算法改进,使得性能相比Baseline得到显著提升。本文主要给大家分享我们做出的这些算法上的改进技巧,以及一些工程上的实践经验。

1.寻找更优的网络结构
    ”Features matter.” 去年MSRA凭借ResNets [2]取得了多项任务性能上的突破。以ResNet-101为基准,有没有网络可以提供更优的特征?我们验证了以下几个网络。    a)       进一步增加网络深度。在12GB显存容量的限制下,101层的网络已经是极限。然而,如果把预训练模型的BN层参数融合进前一层卷积层,然后去掉BN层,则可以容纳ResNet-152。根据我们的实验,在ImageNet DET数据集上,去掉BN层的ResNet-152比保留BN层的ResNet-101还要差约1个点。这说明BN层的作用还是比较重要的。    b)       BN层的训练策略。我们发现训练时如果更新BN层的参数,相比固定参数,性能会下降一大截。原因可能是Faster R-CNN训练时batch size只有1,batch之间的均值/方差变化太大,太不稳定。    c)       MSRA和Facebook相继公开了自己训练的ResNets模型。后续MSRA又提出了Identity Mapping版本的ResNets [3]。我们验证发现,Identity Mapping版本的ResNet-101检测性能略优于MSRA的原始ResNet-101模型和Facebook的模型。
2. 改进RPN Proposal
    在Faster R-CNN框架里面,RPN提取Proposal和FRCN对Proposal进行分类其实是2个独立的问题。针对RPN,我们做出了以下2处改进:    a)       均衡正负Anchor比例。理想状态下,RPN 正负Anchor的比例是1:1。我们发现,在batch size比较大(256)的情况下,这个比例会非常悬殊。特别是目标数量比较少的图像,正的Anchor数量会非常少。这样训练出来的模型会偏向于背景类别,容易漏检。我们对这个比例做了限制,让负样本数量不超过正样本的1.5倍,发现Proposal的召回率可以提高5个点。    b)       级联RPN。受CRAFT [4]的启发,我们设计了自己的级联RPN。[4]中先得到标准的RPN Proposal,然后用一个分类性能更强的FRCN分支来改进Proposal质量。我们则是用了2个标准的RPN(图 1)。第一个RPN用滑窗得到的Proposal作为Anchor,第二个RPN用第一个RPN输出的Proposal作为新的Anchor位置。相比[4],我们的算法优势是实现简单,额外增加的计算量非常少。对于中大目标,可以明显提升Proposal位置的准确度。

 
 
图 1 Cascade RPN网络结构。其中虚线框表示这一层可以省略。
3. 全局上下文建模
    每个Proposal对应原始图像中的一个ROI区域。对这个ROI区域进行分类时, FRCN先把ROI映射到中间特征图上,然后在中间特征图上做裁剪(RoIPooling)。裁剪出来的小特征图输入到CNN分类器中。可以看到,CNN分类只使用了ROI区域内的局部特征。实际上,ROI周围的上下文信息对于判断这个ROI类别是很有帮助的。例如对一个乒乓球分类,很容易和光源混淆。如果知道周围有乒乓球拍、乒乓球台等目标,则更容易判断这是个乒乓球。    全局上下文建模是从整幅图像提取特征,然后和每个Proposal的局部特征相融合,用于分类。去年MSRA [2]使用全局上下文,得到了1个点的性能提升。然而他们没有发布具体的实现细节。我们实现的全局上下文网络结构如图 2所示。            
 
图 2 全局上下文建模网络结构。 
    我们发现,对于图中的全局上下文网络分支,训练时如果采用随机初始化,性能提升非常有限。如果用预训练的参数初始化,在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年加入海康威视研究院,现任高级研究员。主要从事深度学习,计算机视觉方面的算法研究工作,研究方向是基于深度学习的目标检测。海康威视研究院招贤纳士,欢迎投简历至:

(转) 技术揭秘:海康威视PASCAL VOC2012目标检测权威评测夺冠之道的更多相关文章

  1. ILSVRC2016目标检测任务回顾——视频目标检测(VID)

    转自知乎<深度学习大讲堂> 雷锋网(公众号:雷锋网)按:本文作者王斌,中科院计算所前瞻研究实验室跨媒体计算组博士生,导师张勇东研究员.2016年在唐胜副研究员的带领下,作为计算所MCG-I ...

  2. 目标检测从入门到精通—R-CNN详细解析(二)

    R-CNN目标检测详细解析 <Rich feature hierarchies for Accurate Object Detection and Segmentation> Author ...

  3. paddlepaddle目标检测之水果检测(yolov3_mobilenet_v1)

    一.创建项目 (1)进入到https://aistudio.baidu.com/aistudio/projectoverview/public (2)创建项目 点击添加数据集:找到这两个 然后创建即可 ...

  4. 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

    object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.object detection要解决的问题就是物体在哪里,是什么这整个流程的问题.然而,这个问题 ...

  5. 目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

    看到一篇循序渐进讲R-CNN.Fast R-CNN.Faster R-CNN演进的博文,写得非常好,摘入于此,方便查找和阅读. object detection,就是在给定的图片中精确找到物体所在位置 ...

  6. (转)基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

    object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.object detection要解决的问题就是物体在哪里,是什么这整个流程的问题.然而,这个问题 ...

  7. 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN,Faster R-CNN

    基于深度学习的目标检测技术演进:R-CNN.Fast R-CNN,Faster R-CNN object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.obj ...

  8. AI佳作解读系列(五) - 目标检测二十年技术综述

    计算机视觉中的目标检测,因其在真实世界的大量应用需求,比如自动驾驶.视频监控.机器人视觉等,而被研究学者广泛关注.   上周四,arXiv新出一篇目标检测文献<Object Detection ...

  9. 目标检测数据库 PASCAL 格式的 Ground Truth 的解析函数

    最近在做一个目标检测算法,训练时用到了 bootstrap 策略,于是我将PASCAL的 Ground Truth 格式的读取函数从 Matlab 改写为 C++.PASCAL 的标注格式为: # P ...

随机推荐

  1. iphone获取当前磁盘信息

    获取iphone磁盘总大小.已使用空间.空闲空间 [代码]悦德财富:https://www.yuedecaifu.com 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  2. Visual Studio安装卸载模板

    Visual Studio中有两种类型的模板:项目模板和项模板 一.已安装模板: 默认情况下,与产品一起安装的模板位于以下位置: ①\<Visual Studio 安装目录>\Common ...

  3. (五)CoreData 使用 (转)

    第一次真正的使用CoreData,因此也会写下体会和心得...等有时间 Core Data数据持久化是对SQLite的一个升级,它是ios集成的,在说Core Data之前,我们先说说在CoreDat ...

  4. hadoop版本和位数的查看方法

    目前针对apache hadoop更新的版本较多,由此而产生了两个方面的问题: 1.如何查看运行的集群当中的hadoop的版本的问题. 2.如何查看运行集群当中的hadoop的位数 下面详细的介绍一下 ...

  5. CPU MPU MCU SOC SOPC关系及区别

    在嵌入式开过程,会经常接触到一些缩写术语概念,这些概念在嵌入式行业中使用率非常高,下面我们就解释一下这些概念之间的关系和区别: 1.CPU(Central Processing Unit),是一台计算 ...

  6. jvm之xms、xmx等参数分析

    注:本文摘自http://www.cnblogs.com/mingforyou/archive/2012/03/03/2378143.html ,感谢原作者 1.参数的含义-vmargs -Xms12 ...

  7. Android获取图片资源的4种方式

    1. 图片放在sdcard中 Bitmap imageBitmap = BitmapFactory.decodeFile(path) (path 是图片的路径,跟目录是/sdcard) 2. 图片在项 ...

  8. IOS 作业项目(4)步步完成 画图 程序(中)

    一,承接上文,继续本文  [UIButton buttonWithType:UIButtonTypeRoundedRect]; 如此声明的按钮才会有点击闪动的效果!如果直接frame方式声明就不会有. ...

  9. Android Glide加载图片时转换为圆形、圆角、毛玻璃等图片效果

     Android Glide加载图片时转换为圆形.圆角.毛玻璃等图片效果 附录1简单介绍了Android开源的图片加载框架.在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬 ...

  10. CSS 实现:checkbox

    <div class="wrap"> <label>性别:</label> <div class="cb-wrap"& ...