目标检测之两阶段算法--R-CNN详解

论文题目:《Rich feature hierarchies for accurate object detection and semantic segmentation

论文地址:R-CNN

1. 概述

       R-CNN是two-stage目标检测算法的开篇之作,也是将深度学习引入目标检测的开山之作。
在这里插入图片描述
       如上图所示,R-CNN算法大致可以分为4个步骤:

1)使用selective Search算法在图像中确定约2000个候选区域(region proposal)。
2)对于每个候选框内图像块,使用CNN提取特征(在送入CNN之前需要将所有候选框裁剪到相同大小(227*227),因为FC层需要固定输入图像的尺寸)。
3)对于候选框中提取出的特征,使用SVM判别是否属于某一特定类。
4)使用回归器精细修正候选框的位置。

2. 候选区域(region proposal)

2.1. 选取候选区域

       R-CNN使用了Selective Search算法从一张图像上生成约2000个候选区域。Selective Search算法流程如下:

step1:生成原始分割区域R={r1,r2,…,rn}
step2:初始化相似度集合S={}
step3:计算两两相邻区域之间的相似度,将其添加到相似度集合S中。
while S ≠ {}
       step4:从相似度集合S中找出相似度最大的两个区域ri和rj,将其合并成为一个区域rt,并将其添加到R中。
        step5:从相似度集合S中除去原先与ri和rj相邻区域之间计算的相似度。
        step6:重新计算rt与其相邻区域(原先与ri或rj相邻的区域)的相似度,将其结果添加到相似度集合S中。
-区域相似度主要是考虑颜色、纹理、尺寸和交叠四个方面。

2.2. 缩放候选区域

       因为CNN的全连接层对输入图像的大小有限制,所以在将候选区域输入CNN之前,要将候选区域进行固定尺寸(227*227)的缩放。缩放分为两大类(该部分在原文附录A):

  1. 各向同性缩放(长宽放缩相同的倍数):
    考虑到图片扭曲会对分类精度有影响,提出各向同性缩放,有如下两种方式:
    1) 将region proposal的边界向外延伸,使图片成正方形,然后裁剪。如果延伸到原来图片的外界,则用region proposal中的颜色补齐。图(B)
    2)先将region proposal中的图片裁剪出来,然后用固定的背景颜色填充成正方形(背景颜色是region proposal的像素颜色均值)。图(C)
  2. 各向异性缩放(长宽放缩的倍数不同):
    不管图片长宽比例,不管是否扭曲,只管缩放到cnn要求的比例(227*227)。图(D)

在这里插入图片描述
       在放缩之前,作者考虑,在region proposal周围补额外的原始图片像素(pad p)。上图中,第一层p=0,第二层p=16。最后试验发现,采用各向异性缩放并且p=16的时候效果最好。

3. 特征提取

       采用AlexNet进行对每个候选区域提取4096维的特征向量,即把一个227×227大小的图像,通过五个卷积层和两个全连接层进行前向传播,最终得到一个4096维的特征向量。为了计算候选区域的特征,我们首先要对图像进行转换,使得它符合CNN的输入(架构中的CNN只能接受固定大小:277×277)。这个变换有很多办法,我们使用了最简单的一种。无论候选区域是什么尺寸和宽高比,我们都把候选框变形成想要的尺寸。具体的,变形之前,我们现在候选框周围加上16的padding,再进行各向异性缩放。

4. 测试

5. 训练

缺点

1)计算量大:每个候选区域都需要通过CNN计算特征。
2)质量不够好:Selective Search提取的区域质量不够好。
3)训练耗时长:特征提取,SVM分类器是分模块独立训练,没有联合起来系统性优化。

猜你喜欢

转载自blog.csdn.net/Roaddd/article/details/114006529