从CNN到RCNN

来源:互联网 发布:淘宝异地租车违章代办 编辑:程序博客网 时间:2024/05/22 17:11

1.首先是图像分割,初步筛选出要提取特征的物体。不用滑窗,
参考文章:R-CNN之前的准备:Efficient Graph-Based Image Segmentation
这篇论文的思想是把图像看作为一个图(graph),图中的节点就是图像中的像素,而权重就是相邻像素之间的差异性。然后通过贪心算法不断融合差异性小的像素或者区域为一个区域,将图最后划分为数个区域(regions或者是components),从而完成对图像的分割。 
差异性小如何判断?根据像素之间的最小差异性来判断是否属于同一个区域。细节在文中。

这个算法的作用是给定一张图片,输出一系列的可能包含物体的矩形框,这些矩形框我们称之为检测建议(detection proposals),一般而言,这些检测建议随后会被送入分类器进行类别的判定。
2.我们的目标是生成一个类独立的、数据驱动的、选择性的搜索策略,生成一组高质量的对象位置。

 selective search算法主要基于颜色、纹理、亮度进行区域分割。

参考文章:R-CNN之前的准备:Selective Search for Object Recognition

多种策略下都分割出同样的区域的话,那么这些区域更有可能是物体存在的区域。

3.讨论RCNN

RCNN-将CNN引入目标检测的开山之作将CNN引入目标检测的开山之作

      RCNN算法分为4个步骤 

  • 候选区域生成: 一张图像生成1K~2K个候选区域 (采用Selective Search 方法)
  • 特征提取: 对每个候选区域,使用深度卷积网络提取特征 (CNN) 
  • 类别判断: 特征送入每一类的SVM 分类器,判别是否属于该类 
  • 位置精修: 使用回归器精细修正候选框位置 
 


        RCNN算法的核心思想就是对每个区域通过CNN提取特征,然后接上一个分类器预测这个区域包含一个感兴趣对象的置信度,也就是说,转换成了一个图像分类问题(类似imagenet),后面接的这个分类器可以是独立训练的svm也可以是简单的softmax分类。在RCNN论文里,作者还提到两个保证检测速度的关键点:1.所有类别的分类器共享相同的特征输入;2.与传统特征相比,深度特征维度一般比较低,比如VGG16里的4096维。但是很可惜,即使使用了selective search等预处理步骤来提取潜在的bounding box作为输入.
        

        但是RCNN仍会有严重的速度瓶颈,原因也很明显,就是计算机对所有region进行特征提取时会有重复计算,Fast-RCNN正是为了解决这个问题诞生的,作者提出了一个可以看做单层sppnet(空间金字塔池化)的网络层,叫做ROI Pooling,这个网络层可以把不同大小的输入映射到一个固定尺度的特征向量(在rcnn中是把图片进行拉伸或者像素均值填充,而在fast中是直接映射到固定尺度的feature map,见下图)而我们知道,conv、pooling、relu等操作都不需要固定size的输入,因此,在原始图片上执行这些操作后,虽然输入图片size不同导致得到的feature map尺寸也不同,不能直接接到一个全连接层进行分类,但是可以加入这个神奇的ROI Pooling层,对每个region都提取一个固定维度的特征表示,再通过正常的softmax进行类型识别。


        另外,之前RCNN的处理流程是先提proposal,然后CNN提取特征,之后用SVM分类器,最后再做bbox regression,而在Fast-RCNN中,作者巧妙的把bbox regression放进了神经网络内部,与region分类和并成为了一个multi-task模型,实际实验也证明,这两个任务能够共享卷积特征,并相互促进。Fast-RCNN很重要的一个贡献是成功的让人们看到了Region Proposal+CNN这一框架实时检测的希望,原来多类检测真的可以在保证准确率的同时提升处理速度,也为后来的Faster-RCNN做下了铺垫。


        Fast-RCNN之后的问题已经非常清晰,就是我们能不能把region proposal部分也放到GPU上?rbg大神给的答案当然又是yes,于是有了Faster-RCNN,出现了一个end-to-end的CNN对象检测模型。作者提出,网络中的各个卷积层特征其实可以用来预测类别相关的regionproposal,不需要事先执行诸如selective search之类的算法,但是如果简单的在前面增加一个专门提proposal的网络又显得不够elegant,所以最终把region proposal提取和Fast-RCNN部分融合进了一个网络模型,虽然训练阶段仍然要分多步,但是检测阶段非常方便快捷,准确率也与原来的Fast-RCNN相差不多,从此,再也不用担心region proposal提取耗时比实际对象检测还多这种尴尬场景了。


RCNN使用的是AlexNet网络,AlexNet解读




原创粉丝点击