RCNN算法简述
RCNN丰富特征层次的结构提取算法,由Ross Girshick 在2014年CVPR提出算法将目标检测推向新的里程碑。自从12年AlexNet在ImageNet上大放异彩之后,卷积神经网络重新引起大家的重视,同时手工设计特征方式逐渐退出舞台。RCNN是将CNN与SVM优势结合来突破目标检测的瓶颈,借助CNN强大的特征表达能力和SVM高效的分类性能。
RCNN主要过程如下:
1 首先通过Selective Search来提取图像上的Region Proposal。
2 其次,对提取的Region进行Warp裁剪。
3 将Warp后的Region送入CNN中进行特征的提取。
4 最后,经过CNN提取的Region产生的特征向量送入SVMs中进行有监督训练。
RCNN算法核心要点:
![](https://i-blog.csdnimg.cn/blog_migrate/d9273e5dab394e0e461aaff7d3e3bd36.png)
区域候选框(Region Proposal)提取:
对一幅图像上进行Region Proposal提取目前存在许多方法: 例如Objectness、Selective Search、Category-independent object proposals、Constrained parametric min-cuts(CPMC)等。RCNN文章采用Selective Search策略来进行Region proposal的提取。关于选择搜索策略提取Region proposal的主要流程参考博客<目标检测之Selective Search原理简述>。
![](https://i-blog.csdnimg.cn/blog_migrate/8570ca6a652844863697ded607fe5ab5.jpeg)
那么作者为什么要进行Region Proposal呢?
首先,目标检测与分类不同之处在于分类只需要判别图像中是否存在该物体,但是检测需要定位物体在图像中的具体位置。那么如何定位物体在图像中的位置呢?一般容易想到的思想是:用不同大小的窗口在图像上进行滑动,滑动窗口在图像上做卷积(相关)操作,通过卷积(或者相关)运算之后,如果当前窗口滑到对应图像中的位置那么其响应值会最大or最小<这就是早期的模板匹配>。
滑窗法缺点在于:1 计算量大 2 设计不同大小的滑窗 3 穷举搜索。那么换一种思路来进行目标检测,图像中同一目标的纹理、颜色、像素值会存在一定的类似或者相同。所以,可以先对图像进行图像分割技术,分割完的区域在进行类别判断来完成目标检测过程。采用图像分割优势在于计算耗时要比滑窗法低,但是图像分割由于图像中目标与背景之间关系复杂,较难准确的进行分割。近几年图像分割技术进展迅速,Selective Search对于Region Proposal提取较好,该算法主要综合颜色、纹理等信息,区域迭代合并、非极大值抑制等综合取得高效的区域提取。RCNN在Region proposal阶段就是采用Selective Search的思想。
Warp Region(候选框裁剪):
![](https://i-blog.csdnimg.cn/blog_migrate/dab828f4d8840084396549053b4b0d84.png)
为什么要对提取的Region进行Warp?
RCNN对输入图像提取出Region Proposal之后,每个Region(区域)在进入卷积神经网络之前要进行Warp裁剪操作。原因很简单: 每个区域大小形状不一,如果直接输入CNN网络不好统一操作(即CNN对图像的输入层具有固定的维度)。比如:卷积操作边界问题、Stride大小设置问题等等。所以,CNN网络统一了卷积核大小、Stride等一系列操作后,对输入图像进行大小的限制。这就是为什么的每个Region提取之后需要进行Warp操作。
如何有效的进行warp来保留区域最大信息?
![](https://i-blog.csdnimg.cn/blog_migrate/1ec92aba2fb2c30c07fedf7eabe1b68d.png)
对输入区域文中尝试三种方法来对区域进行 Warp操作, 1 图2(B)带有上下文内容的目标矩形框按照图像缩放比例成CNN网络层大小。 2 图2(C)显示没有上下文内容信息排除原始目标矩阵框周围的信息(图2 (B)、(C)都是各向同性操作)。 3 图2(D)对每个对象采用各向异性缩放到CNN输入的大小。RCNN采取图2(D)操作,主要原因可能是图2 (B)信息冗余比较大会引入干扰和其它的信息。图2(C)边界效果太明显。图2 (D)经过各向异性扩充区域,最大程度保留原始区域信息同时没有添加附加冗余信息。
CNN卷积神经网络:
![](https://i-blog.csdnimg.cn/blog_migrate/68861b96a079d13a965cdab53b5b3825.png)
卷积神经网络特征表达?
图像处理领域近些年几乎被卷积神经网络一统天下,网络结构设计几乎成了当下最为重要的核心。如何在卷积网络中提高感受野的同时降低运算量,提高特征表达的能力。例如:VGG-Net提出多个小卷积核叠加能够获取大卷积核的类似效果,GoogleNet提出的Inception策略等都是在提高从图像中目标的特征表达的同时降低计算量。
高层次特征到底是什么?
对于卷积神经网络的高层输出向量到底是什么,这个问题似乎是深度学习可解释性关键所在。“Visualing and Understanding Convolutional Networks” 论文介绍卷积神经网络不同层次的可视化展现。从可视化CNN可以看出卷积低层次特征输出一般是边缘、角点、曲线等。可以理解为图像中的结构信息,这是不是12年之前大家都在广泛研究的手动设计特征提取的信息。随着网络加深,你会发现在高层逐渐显示图像的基本轮廓,这可能来自于神经元之间强大的异或功能。可能你还是不太理解为什么异或就能够表达图像高层次轮廓信息?
假设可不可以这样理解,神经元(卷积核参数)经过对图像提取特征信息后线性(非线性)组合描述之前信息。当然,卷积网络同时也提取图像颜色、纹理、相位等信息进行组合,最后以特征向量模式进行表述。(这里是不是有点类似SIFT图像梯度描述子的模式:SIFT只是单纯的运用像素梯度信息进行局部邻域构建),卷积神经网络将提取图像颜色、梯度、纹理、相位(个人理解,如有错误还请见谅)组合成特征向量对当前图像中物体进行表达。多维度的特征表达肯定会提高图像中物体的表述能力,很简单你可以参考经典CSIFT、MSCR都只是简单加入颜色信息描述性能要优于SIFT、MSER算法。
线性SVMs分类:
![](https://i-blog.csdnimg.cn/blog_migrate/93b0419efd31b8d74d8350d5b822a10a.png)
SVM判别分类输入向量来自全连接层的输出向量,这里你可以理解成为特征向量在高维空间中进行分类表达。例如:假设 1*n为向量,映射到 n维空间就是一个点(假设为 A),另外一个 1*n向量同样映射到n维空间假设为 B点。带有标签的 A(狗)、 B(猫)维向量通过 SVM得到判别。因此,测试图像输出矢量会经过所有训练标签的 SVM分类器进行判别出类别信息。
为什么要用全连接层输出?
一句话:提高特征表达能力用于分类判别。经过卷积神经网络之后输出的特征向量,进入SVMs进行训练。每一类别都会训练出一个SVM分类,这里是二分类SVM判别。例如:有标签数据含有20中类别,那么将会分别训练出20个SVM来对有标签的数据进行单独判别。
训练完成之后由于之前的Region Proposal提取出的可能存在重复区域,经过SVM判别之后就产生相同物体多个bounding boxes标注。那么通过非极大值NMS抑制的策略来减少重复标注问题。同时对bounding boxes使用线性回归方法来对位置估计精修。关于什么是bounding boxes回归操作可以参考:Bounding boxes Regression详解文章解释很详细。
RCNN 算法优缺点:
优点:
1 推动目标检测新的里程碑,结合高效的Region Proposal策略、CNN强大的特征表达能力、SVM强大的分类性能,对比当时的OverFeat效果提升显著。
缺点:
1 计算量大:选择搜索、每个Region Proposal都经过卷积网络耗时较高。
2 进入CNN层图像大小指定,Warp裁剪阶段评估问题寻找高效的策略。
3 训练步骤繁琐(微调网络 + 训练SVM、Bounding Boxes),占据空间大。
参考文章
http://www.rossgirshick.info/
https://github.com/rbgirshick/rcnn
https://arxiv.org/abs/1311.2901