R-CNN,Fast R-CNN,Faster R-CNN

关于物体检测的三个经典方法,都是出自Ross Girshick大神的作品,都是结合region proposal 和CNN分类的目标检测框架。

code :https://github.com/rbgirshick

R-CNN (Region-based Convolutional Neural Network)

   2014年CVPR上的R-CNN,将深度卷积网络应用在物体检测的开山之作,之后的Fast R-CNN 和Faster R-CNN就是一系列的改进方法。

  文章主要解决的两个问题

   1.使用深度网络进行物体定位。

   2.使用稀疏标签数据训练一个high-capacity的网络模型。

   R-CNN进行物体检测的主要步骤:

                                   

  (1) 对每张输入图像,借助SS算法生成~2K的候选区域(region proposals)。

       SS算法(Selective Search),可以参考文章[1]做具体了解。SS方法的过人之处在于预先划分的区域什么大小的都有(满足目标多尺度的要求),而且对过分割的区域还有一个合并的过程(区域的层次聚类),最后剩下的都是那些最可能的候选区域,然后在这些已经过滤了一遍的区域上进行后续的识别等处理,这样的话,将会大大减小候选区域的数目,提供了算法的速度。

  (2) 使用CNN对每个proposal进行特征提取。

       针对物体检测中标注数据稀疏的问题,如何利用有限的数据训练一个网络?文章的做法是使用在ImageNet上预训练的模型(AlexNet/VGG16)进行微调得到用于特征提取的CNN模型,修改最后一个分类层的神经元个数。(N+1)

       将每个region proposals缩放至固定尺寸,输入预训练的网络进行微调。在进行softmax分类的使用,将IoU>0.5的proposal认为是正样本。(因为训练CNN网络需要大量的样本,因此IoU的限制比较宽松,也就是对于某个部分包含物体的区域,我们仍认定它是属于该物体类别。)对于此处的hard negative,个人的理解是这样,对于softmax分类,除了上面挑选出的正样本,我们还需要对于每类物体的负样本进行区分,负样本可能是其他类别的物体又或者是背景,负样本数量是远远都正样本,那么就需要选择出hard negative的样本对网络进行训练,增强网络的分类能力。

  (3) 对每个proposal使用特定类的线性SVM分类器进行分类。

      利用CNN模型对训练集提特征训练SVM。

  1. 没有直接采用softmax的输出去做分类(作者提到也许可以不用svm,直接一个模型搞定)
  2. 真正的对象区域才是正样本,和正样本重叠低于0.3的才是负样本,灰色区域去掉。这样的目的是让结果更精确
  3. 因为一个对象相关的proposal可能有很多,所以作者采用了greedy non-maximum suppression (for each class independently) 的方法来选取最大的那个区域。
  4. 由于数量太大不能放到内存,所以采用hard negative mining method优化SVM

* (4) bounding box regression,微调候选区域的位置

   对于SVM分好类的region proposal做边框回归(bounding-box regression),边框回归是对region proposal进行纠正的线性回归算法,为了让region proposal提取到的窗口跟目标真实窗口更吻合。因为region proposal提取到的窗口不可能跟人手工标记那么准,如果region proposal跟目标位置偏移较大,即便是分类正确了,但是由于IoU(region proposal与Ground Truth的窗口的交集比并集的比值)低于0.5,那么相当于目标还是没有检测到。 

  1. 原理是实现一个proposal的box到真实box的线性映射
  2. 这个映射需要确定4个参数:中心x,y的位置(或者等价的左上角的位置),长和宽。
  3. 线性映射的参数是一个F的线性函数。
  4. 对这个过程中的参数需要加一个权重很大(1000)的L2范数的约束
  5. 只挑选哪些和真正box相隔不远的proposal作为训练样本(否则没法训练)

   R-CNN 的主要问题:

  1. 训练和测试过程分为好几个阶段:得到候选区域,CNN 特征提取, SVM分类、SVM边界框回归,训练过程非常耗时。

  2. 训练过程中需要保存DCNN得到的特征,很占内存空间。

  3. 测试过程中,每一个候选区域都要提取一遍特征,而这些区域有一定重叠度,各个区域的特征提取独立计算,效率不高,使测试一幅图像非常慢。

Fast R-CNN

    针对R-CNN速度慢的问题,rbg提出改进的R-CNN,在R-CNN的基础上,为了使训练和测试过程更快,Ross Girshick 提出了Fast R-CNN,使用VGG19网络结构比R-CNN在训练和测试时分别快了9倍和213倍。

   主要做法:

     1. 对整个图像进行卷积得到特征图像而不是对每个候选区域分别算卷积;
     2. 把候选区域分类和边框拟合的两个步骤结合起来而不是分开做。
    原理图如下:
                             
                               

    相比与R-CNN,文本的主要改进点就是每张图像只需在CNN提取一次特征,然后根据映射关系,得到SS选定的region proposals对应的卷积特征图,由ROI pooling layer得到ROI特征向量。直接利用softmax进行分类和bbox的回归。没有了之前R-CNN的SVM训练,把分类和回归放在一个系统框架内处理好。
    

  1. 任意size图片输入CNN网络,经过若干卷积层与池化层,得到特征图;
  1. 在任意size图片上采用selective search算法提取约2k个建议框;
  1. 根据原图中建议框到特征图映射关系,在特征图中找到每个建议框对应的特征框【深度和特征图一致】,并在RoI池化层中将每个特征框池化到H×W【VGG-16网络是7×7】的size;
  1. 固定H×W【VGG-16网络是7×7】大小的特征框经过全连接层得到固定大小的特征向量;
  1. 第4步所得特征向量经由各自的全连接层【由SVD分解实现】,分别得到两个输出向量:一个是softmax的分类得分,一个是Bounding-box窗口回归;
  1. 利用窗口得分分别对每一类物体进行非极大值抑制剔除重叠建议框,最终得到每个类别中回归修正后的得分最高的窗口。


[1] J. Uijlings, K. van de Sande, T. Gevers, and A. Smeulders.Selective search for object recognition. IJCV, 2013. 1, 2, 3,4, 5, 9


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值