目标检测(Object Detection)的整理

主要参考:

1)http://blog.csdn.net/myarrow/article/details/51878004git

2)http://nooverfit.com/wp/%E6%9C%BA%E5%99%A8%E8%A7%86%E8%A7%89%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B%E8%A1%A5%E4%B9%A0%E8%B4%B4%E4%B9%8Br-cnn%E7%B3%BB%E5%88%97-r-cnn-fast-r-cnn-faster-r-cnn/github

  • RCNN
  • spp-net
  • Fast RCNN
  • Faster RCNN
  • Yolo
  • SSD

3.3 基于侯选区域(Region Proposal)的深度学习目标检测法

3.3.1 R-CNN (CVPR2014, TPAMI2015)

    1)Region Proposal:能够解决滑动窗口的问题算法

         候选区域(Region Proposal):是预先找出图中目标可能出现的位置。它利用了图像中的纹理、边缘、颜色等信息,能够保证在选取较少窗口(几千甚至几百)的状况下保持较高的召回率(Recall)。网络

         经常使用的Region Proposal有(详见"What makes for effective detection proposals?"):架构

           - Selective Searchapp

           - Edge Boxes 框架

    2)R-CNN:能够解决特征鲁棒性的问题ide

   

      参考信息函数

     (1) 输入测试图像
     (2) 利用selective search算法在图像中从下到上提取2000个左右的Region Proposal
     (3) 将每一个Region Proposal缩放(warp)成227x227的大小并输入到CNN,将CNN的fc7层的输出做为特征
     (4) 将每一个Region Proposal提取到的CNN特征输入到SVM进行分类
性能

     注:1)对每一个Region Proposal缩放到同一尺度是由于CNN全链接层输入须要保证维度固定。

            2)上图少画了一个过程——对于SVM分好类的Region Proposal作边框回归(bounding-box regression),边框回归是对region proposal进行纠正的线性回归算法,为了让region proposal提取到的窗口跟目标真实窗口更吻合。由于region proposal提取到的窗口不可能跟人手工标记那么准,若是region proposal跟目标位置偏移较大,即使是分类正确了,可是因为IoU(region proposal与Ground Truth的窗口的交集比并集的比值)低于0.5,那么至关于目标仍是没有检测到。

     3)R-CNN缺点:

         (1) 训练分为多个阶段,步骤繁琐: 微调网络+训练SVM+训练边框回归器
         (2) 训练耗时,占用磁盘空间大:5000张图像产生几百G的特征文件
         (3) 速度慢: 使用GPU, VGG16模型处理一张图像须要47s

         (4) 测试速度慢:每一个候选区域须要运行整个前向CNN计算
         (5) SVM和回归是过后操做:在SVM和回归过程当中CNN特征没有被学习更新
         针对速度慢的这个问题,SPP-NET给出了很好的解决方案。

 3.3.2 SPP-NET (ECCV2014, TPAMI2015)

     SSP-Net:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

     先看一下R-CNN为何检测速度这么慢,一张图都须要47s!仔细看下R-CNN框架发现,对图像提完Region Proposal(2000个左右)以后将每一个Proposal当成一张图像进行后续处理(CNN提特征+SVM分类),实际上对一张图像进行了2000次提特征和分类的过程!这2000个Region Proposal不都是图像的一部分吗,那么咱们彻底能够对图像提一次卷积层特征,而后只须要将Region Proposal在原图的位置映射到卷积层特征图上,这样对于一张图像咱们只须要提一次卷积层特征,而后将每一个Region Proposal的卷积层特征输入到全链接层作后续操做。(对于CNN来讲,大部分运算都耗在卷积操做上,这样作能够节省大量时间)。

     如今的问题是每一个Region Proposal的尺度不同,直接这样输入全链接层确定是不行的,由于全链接层输入必须是固定的长度。SPP-NET刚好能够解决这个问题。

     

    因为传统的CNN限制了输入必须固定大小(好比AlexNet是224x224),因此在实际使用中每每须要对原图片进行crop或者warp的操做:
    - crop:截取原图片的一个固定大小的patch
    - warp:将原图片的ROI缩放到一个固定大小的patch

   不管是crop仍是warp,都没法保证在不失真的状况下将图片传入到CNN当中:
   - crop:物体可能会产生截断,尤为是长宽比大的图片。
   - warp:物体被拉伸,失去“原形”,尤为是长宽比大的图片

   SPP为的就是解决上述的问题,作到的效果为:无论输入的图片是什么尺度,都可以正确的传入网络。
   具体思路为:
CNN的卷积层是能够处理任意尺度的输入的,只是在全链接层处有限制尺度——换句话说,若是找到一个方法,在全链接层以前将其输入限制到等长,那么就解决了这个问题。

   具体方案以下图所示:

   

    若是原图输入是224x224,对于conv5出来后的输出,是13x13x256的,能够理解成有256个这样的filter,每一个filter对应一张13x13的activation map。若是像上图那样将activation map pooling成4x4 2x2 1x1三张子图,作max pooling后,出来的特征就是固定长度的(16+4+1)x256那么多的维度了。若是原图的输入不是224x224,出来的特征依然是(16+4+1)x256;直觉地说,能够理解成将原来固定大小为(3x3)窗口的pool5改为了自适应窗口大小,窗口的大小和activation map成比例,保证了通过pooling后出来的feature的长度是一致的。

    使用SPP-NET相比于R-CNN能够大大加快目标检测的速度,可是依然存在着不少问题:
    (1) 训练分为多个阶段,步骤繁琐: 微调网络+训练SVM+训练训练边框回归器
    (2) SPP-NET在微调网络的时候固定了卷积层,只对全链接层进行微调,而对于一个新的任务,有必要对卷积层也进行微调。(分类的模型提取的特征更注重高层语义,而目标检测任务除了语义信息还须要目标的位置信息)
    针对这两个问题,RBG又提出Fast R-CNN, 一个精简而快速的目标检测框架。 

3.3.3 Fast R-CNN(ICCV2015)

    有了前边R-CNN和SPP-NET的介绍,咱们直接看Fast R-CNN的框架图:

    

    与R-CNN框架图对比,能够发现主要有两处不一样:一是最后一个卷积层后加了一个ROI pooling layer,二是损失函数使用了多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练。

     (1) ROI pooling layer其实是SPP-NET的一个精简版,SPP-NET对每一个proposal使用了不一样大小的金字塔映射,而ROI pooling layer只须要下采样到一个7x7的特征图。对于VGG16网络conv5_3有512个特征图,这样全部region proposal对应了一个7*7*512维度的特征向量做为全链接层的输入。

     (2) R-CNN训练过程分为了三个阶段,而Fast R-CNN直接使用softmax替代SVM分类,同时利用多任务损失函数边框回归也加入到了网络中,这样整个的训练过程是端到端的(除去region proposal提取阶段)。

     (3) Fast R-CNN在网络微调的过程当中,将部分卷积层也进行了微调,取得了更好的检测效果。

   性能对比数据:

     

   

   1)Fast R-CNN优势:

         Fast R-CNN融合了R-CNN和SPP-NET的精髓,而且引入多任务损失函数,使整个网络的训练和测试变得十分方便。在Pascal VOC2007训练集上训练,在VOC2007测试的结果为66.9%(mAP),若是使用VOC2007+2012训练集训练,在VOC2007上测试结果为70%(数据集的扩充能大幅提升目标检测性能)。使用VGG16每张图像总共须要3s左右。
   2)Fast R-CNN 缺点:

        Region Proposal的提取使用selective search,目标检测时间大多消耗在这上面(提Region Proposal 2~3s,而提特征分类只需0.32s),没法知足实时应用,并且并无实现真正意义上的端到端训练测试(region proposal使用selective search先提取处来)。那么有没有可能直接使用CNN直接产生Region Proposal并对其分类?Faster R-CNN框架就是符合这样须要的目标检测框架。

3.3.4  Faster R-CNN(NIPS2015)

     Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

     在Region Proposal + CNN分类的这种目标检测框架中,Region Proposal质量好坏直接影响到目标检测任务的精度。若是找到一种方法只提取几百个或者更少的高质量的假选窗口,并且召回率很高,这不但能加快目标检测速度,还能提升目标检测的性能(假阳例少)。RPN(Region Proposal Networks)网络应运而生。

    1)RPN的核心思想

    是使用卷积神经网络直接产生Region Proposal,使用的方法本质上就是滑动窗口。RPN的设计比较巧妙,RPN只需在最后的卷积层上滑动一遍,由于Anchor机制和边框回归能够获得多尺度多长宽比的Region Proposal

    2)Faster R-CNN架构

          

    3)RPN架构

          RPN采用任意大小的的图像做为输入,并输出一组候选的矩形,每一个矩形都有一个对象分数。

          RPN被用于训练直接产生候选区域,不须要外部的候选区域。

             

       

       

      

      Anchor是滑动窗口的中心,它与尺度和长宽比相关,默认采3种尺度(128,256,512),3种长宽比(1:1,1:2,2:1),则在每个滑动位置k=9 anchors。

      咱们直接看上边的RPN网络结构图(使用了ZF<Zeiler and Fergus model>模型),给定输入图像(假设分辨率为600*1000),通过卷积操做获得最后一层的卷积特征图(大小约为40*60)。在这个特征图上使用3*3的卷积核(滑动窗口)与特征图进行卷积,最后一层卷积层共有256个feature map,那么这个3*3的区域卷积后能够得到一个256维的特征向量,后边接cls layer(box-classification layer)和reg layer(box-regression layer)分别用于分类和边框回归(跟Fast R-CNN相似,只不过这里的类别只有目标和背景两个类别)。3*3滑窗对应的每一个特征区域同时预测输入图像3种尺度(128,256,512),3种长宽比(1:1,1:2,2:1)的region proposal,这种映射的机制称为anchor。因此对于这个40*60的feature map,总共有约20000(40*60*9)个anchor,也就是预测20000个region proposal。

      这样设计的好处是什么呢?虽然如今也是用的滑动窗口策略,可是:滑动窗口操做是在卷积层特征图上进行的,维度较原始图像下降了16*16倍(中间通过了4次2*2的pooling操做);多尺度采用了9种anchor,对应了三种尺度和三种长宽比,加上后边接了边框回归,因此即使是这9种anchor外的窗口也能获得一个跟目标比较接近的region proposal。

      4)总结     
            Faster R-CNN将一直以来分离的region proposal和CNN分类融合到了一块儿,使用端到端的网络进行目标检测,不管在速度上仍是精度上都获得了不错的提升。然而Faster R-CNN仍是达不到实时的目标检测,预先获取Region Proposal,而后在对每一个Proposal分类计算量仍是比较大。比较幸运的是YOLO这类目标检测方法的出现让实时性也变的成为可能。
           总的来讲,从R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN一路走来,基于深度学习目标检测的流程变得愈来愈精简,精度愈来愈高,速度也愈来愈快。能够说基于Region Proposal的R-CNN系列目标检测方法是当前目标最主要的一个分支。       

3.3.5 R-FCN(2016.5)

     《R-FCN: Object Detection via Region-based Fully Convolutional Networks

      顾名思议:全卷积网络,就是所有是卷积层,而没有全链接层(fc)。

      R-FCN(基于区域的检测器)的方法是:在整个图像上共享计算,经过移除最后的fc层实现(即删除了全部的子网络)。使用“位置敏感的得分图”来解决了图像分类平移不变性对象检测平移变化之间的矛盾。

      此矛盾为:物体分类要求平移不变性越大越好 (图像中物体的移动不用区分),而物体检测要求有平移变化。因此,ImageNet 分类领先的结果证实尽量有平移不变性的全卷积结构更受亲睐。另外一方面,物体检测任务须要一些平移变化的定位表示。好比,物体的平移应该使网络产生响应,这些响应对描述候选框覆盖真实物体的好坏是有意义的。咱们假设图像分类网络的卷积层越深,则该网络对平移越不敏感。

      CNN随着网络深度的增长,网络对于位置(Position)的敏感度愈来愈低,也就是所谓的translation-invariance,可是在Detection的时候,须要对位置信息有很强的的敏感度。

      那么ResNet-101的detection是怎么作的?

      在R-FCN以前,很简单,把ROI-pooling层放到了前面的卷积层,而后后面的卷积层不共享计算,这样一能够避免过多的信息损失,二能够用后来的卷积层学习位置信息。

      R-FCN:采用全卷积网络结构做为 FCN,为给 FCN 引入平移变化,用专门的卷积层构建位置敏感分数地图 (position-sensitive score maps)。每一个空间敏感地图编码感兴趣区域的相对空间位置信息。 在FCN上面增长1个位置敏感 RoI 池化层来监管这些分数地图。

      R-FCN思路就是利用最后一层网络经过FCN构成一个position-sensitive的feature map。具体而言,每个proposal的位置信息都须要编码,那么先把proposal分红k*k个grid,而后对每个grid进行编码。在最后一层map以后,再使用卷积计算产生一个k*k*(C+1)的map(k*k表明总共的grid数目,C表明class num,+1表明加入一个背景类)。

      

      

       RPN 给出感兴趣区域,R-FCN 对该感兴趣区域分类。R-FCN 在与 RPN 共享的卷积层后多加1个卷积层。因此,R-FCN 与 RPN 同样,输入为整幅图像。但 R-FCN 最后1个卷积层的输出从整幅图像的卷积响应图像中分割出感兴趣区域的卷积响应图像。

      R-FCN 最后1个卷积层在整幅图像上为每类生成k*k个位置敏感分数图,有C类物体外加1个背景,所以有k*k(C+1)个通道的输出层。k*k个分数图对应描述位置的空间网格。好比,k×k=3×3,则9个分数图编码单个物体类的 {top−left,top−center,top−right,...,bottom−right}。

     R-FCN 最后用位置敏感 RoI 池化层,给每一个 RoI 1个分数。选择性池化图解:看上图的橙色响应图像 (top−left),抠出橙色方块 RoI,池化橙色方块 RoI 获得橙色小方块 (分数);其它颜色的响应图像同理。对全部颜色的小方块投票 (或池化) 获得1类的响应结果。

     

      产生完了这张map以后,再根据proposal产生一个长宽各为k,channel数目为C+1的score map。具体产生score map的方法是,假如k=3,C=20,那么score map的20个类每一个类都有3*3的feature,一共9个格子,每个格子都记录了空间信息。而这每个类的每个格子都对应前面那个channel数为3*3*21的大map的其中一个channel的map。如今把score map中的格子对应的区域的map中的信息取平均,而后这个平均值就是score map格子中的值。最后把score map的值进行vote(avg pooling)来造成一个21维的向量来作分类便可。

       

      当分类正确时,该类通道的位置敏感分数图 (中间) 的大多数橙色实线网格内的响应在整个 RoI 位置范围内最强。

      对应的bbox regression只须要把C+1设成4就能够了。
      R-FCN采用的一些方法比Faster R-CNN的baseline提升了3个点,而且比原来Faster R-CNN更快(由于所有计算都共享了)。可是和改进过的Faster R-CNN相比(ROI Pooling提早那种)提升了0.2个点,速度快了2.5倍。因此目前为止这个方法的结果应该是全部方法中速度和Performance结合的最好的。

3.4 基于回归方法的深度学习目标检测算法

      Faster R-CNN的方法目前是主流的目标检测方法,可是速度上并不能知足实时的要求。YOLO一类的方法慢慢显现出其重要性,这类方法使用了回归的思想,即给定输入图像,直接在图像的多个位置上回归出这个位置的目标边框以及目标类别。

3.4.1 YOLO (CVPR2016, oral)

      YOLO:You Only Look Once: Unified, Real-Time Object Detection
               
    咱们直接看上面YOLO的目标检测的流程图:
    (1) 给个一个输入图像,首先将图像划分红7*7(设S=7)的网格
    (2) 对于每一个网格,咱们都预测2个边框(包括每一个边框是目标的置信度以及每一个边框区域在多个类别上的几率)
    (3) 根据上一步能够预测出7*7*2个目标窗口,而后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口便可。
    能够看到整个过程很是简单,不须要中间的Region Proposal在找目标,直接回归便完成了位置和类别的断定。
    
     那么如何才能作到直接在不一样位置的网格上回归出目标的位置和类别信息呢?上面是YOLO的网络结构图,前边的网络结构跟GoogLeNet的模型比较相似,主要的是最后两层的结构,卷积层以后接了一个4096维的全链接层,而后后边又全链接到一个7*7*30维的张量上。实际上这7*7就是划分的网格数,如今要在每一个网格上预测目标两个可能的位置以及这个位置的目标置信度和类别,也就是每一个网格预测两个目标,每一个目标的信息有4维坐标信息(中心点坐标+长宽),1个是目标的置信度,还有类别数20(VOC上20个类别),总共就是(4+1)*2+20 = 30维的向量。这样能够利用前边4096维的全图特征直接在每一个网格上回归出目标检测须要的信息(边框信息加类别)。
   
    总结:
    YOLO将目标检测任务转换成一个回归问题,大大加快了检测的速度,使得YOLO能够每秒处理45张图像。并且因为每一个网络预测目标窗口时使用的是全图信息,使得false positive比例大幅下降(充分的上下文信息)。可是YOLO也存在问题:没有了Region Proposal机制,只使用7*7的网格回归会使得目标不能很是精准的定位,这也致使了YOLO的检测精度并非很高
    

3.4.2 SSD(单次检测)

     SSD: Single Shot MultiBox Detector
     上面分析了YOLO存在的问题,使用整图特征在7*7的粗糙网格内回归对目标的定位并非很精准。那是否是能够结合Region Proposal的思想实现精准一些的定位?SSD结合YOLO的回归思想以及Faster R-CNN的anchor机制作到了这点。
     
     上图是SSD的一个框架图,首先SSD获取目标位置和类别的方法跟YOLO同样,都是使用回归,可是YOLO预测某个位置使用的是全图的特征,SSD预测某个位置使用的是这个位置周围的特征(感受更合理一些)。那么如何创建某个位置和其特征的对应关系呢?可能你已经想到了,使用Faster R-CNN的anchor机制。如SSD的框架图所示,假如某一层特征图(图b)大小是8*8,那么就使用3*3的滑窗提取每一个位置的特征,而后这个特征回归获得目标的坐标信息和类别信息(图c)。
    不一样于Faster R-CNN,这个anchor是在多个feature map上,这样能够利用多层的特征而且天然的达到多尺度(不一样层的feature map 3*3滑窗感觉野不一样)。

    小结:
          SSD结合了YOLO中的回归思想和Faster R-CNN中的anchor机制,使用全图各个位置的多尺度区域特征进行回归,既保持了YOLO速度快的特性,也保证了窗口预测的跟Faster R-CNN同样比较精准。SSD在VOC2007上mAP能够达到72.1%,速度在GPU上达到58帧每秒。
    

    总结:YOLO的提出给目标检测一个新的思路,SSD的性能则让咱们看到了目标检测在实际应用中真正的可能性。

3.5 基于残差(Residual)方法的深度学习目标检测算法

3.5.1 深度残差网络(Deep Residual Networks)

       Deep Residual Networks  

      它使用残差学习的这一思想使得学习更深的网络成为可能,从而学习到更好的表达。

      层数越多的神经网络越难以训练。当层数超过必定数量后,传统的深度网络就会因优化问题而出现欠拟合(underfitting)的状况。残差学习框架大幅下降训练更深层网络的难度,也使准确率获得显著提高。在 ImageNet 和 COCO 2015 竞赛中,共有 152 层的深度残差网络 ResNet 在图像分类、目标检测和语义分割各个分项都取得最好成绩,相关论文更是连续两次得到 CVPR 最佳论文。
     最新研究发现,当残差网络将身份映射做为 skip connection 并实现 inter-block activation,正向和反向信号可以直接从一个区块传播到另外一个区块,这样就达到了 1001 层的残差网络。因而可知,神经网络的深度这一很是重要的因素,还有很大的提高空间。
     
     1)深度谱
         
    2)为使用网络层数更多,一般采用的方法有:初始化算法,BN方法
    3)是否简单堆叠的网络层数越多,训练偏差和测试偏差就越小?答案正好相反
    4)目前流行的深度神经网络结构大体能够分为三类:
           - 直线型(如AlexNet, VGGNet)
           - 局部双分支型(ResNet)
           - 局部多分支型(GoogleNet)    
          好久之前人们就已经认识到更深的网络可以产生更好的数据表达,可是如何训练一个很深的网络却一直是一个困扰人们的问题,这主要是因为梯度消失或爆炸以及尺度不均匀的初始化形成的。围绕这一问题,人们提出了ReLU、Xavier、pReLU、batch normalization和path-SGD等一系列方法,可是本文做者却发现即便有这些方法,神经网络的训练仍然呈现了degradation的现象。所谓degradation现象,就是随着网络深度的增长,网络的性能反而降低,并且这种性能的降低并非由前面所说的问题形成的。
         
    4)深度残差学习(Deep Residual Learning)的思想
         假如目前有一个能够工做的很好的网络A,这时来了一个比它更深的网络B,只须要让B的前一部分与A彻底相同,后一部分只实现一个恒等映射(identity mapping),这样B最起码能得到与A相同的性能,而不至于更差。深度残差学习的思想也由此而产生,既然B后面的部分完成的是恒等映射,何不在训练网络的时候加上这一先验(在网络训练过程当中,加入先验信息指导很是重要,合理的先验每每会取得很是好的效果),因而构造网络的时候加入了捷径(shortcut)链接,即每层的输出不是传统神经网络中的输入的映射,而是输入的映射和输入的叠加,以下图中的"Residual net"所示。
         
         在Residual net中:
          (1)identity:为恒等映射,此条路径一直存在
          (2)F(x):为须要学习的残差函数(residual function):H(x)-x = F(x)  
                   问题的从新表示或预处理会简化问题的优化!
         假设咱们指望的网络层关系映射为 H(x), 咱们让 the stacked nonlinear layers 拟合另外一个映射, F(x):= H(x)-x , 那么原先的映射就是 F(x)+x。 这里咱们假设优化残差映射F(x) 比优化原来的映射 H(x)容易

         这里咱们首先求取残差映射 F(x):= H(x)-x,那么原先的映射就是 F(x)+x。尽管这两个映射应该均可以近似理论真值映射 the desired functions (as hypothesized),可是它俩的学习难度是不同的。
        
        这种改写启发于"网络层数越多,训练和测试偏差越大"性能退化问题违反直觉的现象。若是增长的层数能够构建为一个恒等映射(identity mappings),那么增长层数后的网络训练偏差应该不会增长,与没增长以前相比较。性能退化问题暗示多个非线性网络层用于近似identity mappings 可能有困难。使用残差学习改写问题以后,若是identity mappings 是最优的,那么优化问题变得很简单,直接将多层非线性网络参数趋0。
       
       实际中,identity mappings 不太多是最优的,可是上述改写问题可能帮助预处理问题。若是最优函数接近identity mappings,那么优化将会变得容易些。 实验证实该思路是对的。

       F(x)+x 能够经过shortcut connections 来实现,以下图所示: 
       
       上图中的shortcut connections执行一个简单的恒等映射;既没有参数,也没有计算复杂度。
        公式分析以下:
        (1)须要学习的残差映射
                
         (2)x和F的维数必须相同
                 若是x和F的维数不相同,则对x进行线性投影(linear projection)使用其与F的维数一致,公式以下:
                          
       5)网络架构
       5.1)普通网络(Plain Network)
                设计原则
                 (1)对于输出特征图大小相同的层,它们的卷积拥有相同的filter个数
                 (2)若是输出的特征图大小减半,则filter个数乘以2,以确保每层的时间复杂度相同
                          
       5.2)残并网络(Residual Network)      
               在遵循普通网络设计原则的基础上,增长了shortcut connections
               
       6)恒等映射的重要性
       6.1)平滑的正向传播
              
             任意xl被直接正向传播到xL,xL是xl与残差相加的结果。
            
       6.2)平滑的反向传播      
             
       7)保持最短路径尽可能平滑
       
       - 若是h(x)不是identity mapping,它将阻塞正向、反向传播,从而致使偏差增长
         
      - BN可能阻塞传播
        
     - ReLU可能阻塞传播
       
               
        

3.5 提升目标检测方法

    R-CNN系列目标检测框架和YOLO目标检测框架给了咱们进行目标检测的两个基本框架。除此以外,研究人员基于这些框架从其余方面入手提出了一系列提升目标检测性能的方法。

    (1) 难分样本挖掘(hard negative mining)
    R-CNN在训练SVM分类器时使用了难分样本挖掘的思想,但Fast R-CNN和Faster R-CNN因为使用端到端的训练策略并无使用难分样本挖掘(只是设置了正负样本的比例并随机抽取)。CVPR2016的Training Region-based Object Detectors with Online Hard Example Mining(oral)将难分样本挖掘(hard example mining)机制嵌入到SGD算法中,使得Fast R-CNN在训练的过程当中根据region proposal的损失自动选取合适的Region Proposal做为正负例训练。实验结果代表使用OHEM(Online Hard Example Mining)机制可使得Fast R-CNN算法在VOC2007和VOC2012上mAP提升 4%左右。

    (2) 多层特征融合
    Fast R-CNN和Faster R-CNN都是利用了最后卷积层的特征进行目标检测,而因为高层的卷积层特征已经损失了不少细节信息(pooling操做),因此在定位时不是很精准。HyperNet等一些方法则利用了CNN的多层特征融合进行目标检测,这不只利用了高层特征的语义信息,还考虑了低层特征的细节纹理信息,使得目标检测定位更精准。

    (3) 使用上下文信息
    在提取Region Proposal特征进行目标检测时,结合Region Proposal上下文信息,检测效果每每会更好一些。(Object detection via a multi-region & semantic segmentation-aware CNN model以及Inside-Outside Net等论文中都使用了上下文信息)

3.6 总结

      Localization:
      - Find a fixed number of objects (one or many)
      - L2 regression from CNN features to box coordinates
      - Much simpler than detection; consider it for your projects!
      - Overfeat: Regression + efficient sliding window with FC -> conv conversion
      - Deeper networks do better


      Object Detection:
      Find a variable number of objects by classifying image regions- Before CNNs: dense multiscale sliding window (HoG, DPM)- Avoid dense sliding window with region proposals- R-CNN: Selective Search + CNN classification / regression- Fast R-CNN: Swap order of convolutions and region extraction- Faster R-CNN: Compute region proposals within the network- Deeper networks do better