Paper Reading:RCNN-SPP-Fast RCNN-Faster RCNN

本文对基于RCNN框架的几个模型进行介绍和总结。
[目标检测][base64str0]

RCNN

论文:Rich feature hierarchies for accurate object detection and semantic segmentation
发表时间:2014
发表作者:(加州大学伯克利分校)Ross Girshick
发表刊物/会议:CVPR

本文具有很多比较重要的意义。
1、在 Pascal VOC 2012 的数据集上,能够将目标检测的验证指标 mAP 提升到 53.3%,这相对于之前最好的结果提升了整整 30%.
2、这篇论文证明了可以讲神经网络应用在自底向上的候选区域,这样就可以进行目标分类和目标定位。
3、这篇论文也带来了一个观点,那就是当你缺乏大量的标注数据时,比较好的可行的手段是,进行神经网络的迁移学习,采用在其他大型数据集训练过后的神经网络,然后在小规模特定的数据集中进行 fine-tune 微调。

候选区域与 CNN 结合

R-CNN利用候选区域与 CNN 结合做目标定位。其中借鉴了滑动窗口思想,R-CNN 采用对区域进行识别的方案。具体是:
给定一张输入图片,从图片中提取 2000 个类别独立的候选区域。
对于每个区域利用 CNN 抽取一个固定长度的特征向量。
再对每个区域利用 SVM 进行目标分类。

[R-CNN1][base64str1]

预训练与微调解决标注数据缺乏的问题

采用在 ImageNet 上已经训练好的模型,然后在 PASCAL VOC 数据集上进行 fine-tune。
因为 ImageNet 的图像高达几百万张,利用卷积神经网络充分学习浅层的特征,然后在小规模数据集做规模化训练,从而可以达到好的效果。
现在,称之为迁移学习,是必不可少的一种技能。

架构

R-CNN 系统分为 3 个阶段,反应到架构上由 3 个模块完成。

  • 生产类别独立的候选区域,这些候选区域其中包含了 R-CNN 最终定位的结果。
  • 神经网络去针对每个候选区域提取固定长度的特征向量。
  • 一系列的 SVM 分类器。

候选区域

能够生成候选区域的方法很多,比如:

  • objectness
  • selective search
  • category-independen object proposals
  • constrained parametric min-cuts(CPMC)
  • multi-scale combinatorial grouping
  • Ciresan
    R-CNN 采用的是 Selective Search 算法。
    Selective Search 算法采用子区域合并的方法进行提取候选边界框。首先,对输入图像进行分割算法产生许多小的子区域。其次,根据这些子区域之间相似性(相似性标准主要有颜色、纹理、大小等等)进行区域合并,不断的进行区域迭代合并。每次迭代过程中对这些合并的子区域做外切矩形(bounding boxes),这些子区域外切矩形就是通常所说的候选框。
    其过程如下:
    1、首先通过图像分割的方法(如felzenszwalb算法)获得很多小的区域,假设现在图像上有n个预分割的区域(Efficient Graph-Based Image Segmentation),表示为R={R1, R2, ..., Rn};
    2、计算区域集R里每个相邻区域的相似度S={s1,s2,…} ;
    3、找出相似度最高的两个区域,将其合并为新集(即两个子区域合并为一个外切矩形(bounding boxes)的新区域),将这个新区域添加进R;
    4、从S中移除所有与第3步中有关的子集(也就是被合并的区域所计算的相似度数值) ;
    5、计算新集与所有子集的相似度 ;
    6、跳至第3步,重复之后的过程,直到S为空。

特征抽取

R-CNN 抽取了一个 4096 维的特征向量,采用的是 Alexnet,基于 Caffe 进行代码开发。
需要注意的是 Alextnet 的输入图像大小是 227x227。而通过 Selective Search 产生的候选区域大小不一,为了与 Alexnet 兼容,R-CNN 采用了非常暴力的手段,那就是无视候选区域的大小和形状,统一变换到 227*227 的尺寸。

有一个细节,在对 Region 进行变换的时候,首先对这些区域进行膨胀处理,在其 box 周围附加了 p 个像素,也就是人为添加了边框,在这里 p=16。

测试阶段的目标检测

在测试阶段,R-CNN 在每张图片上抽取近 2000 个候选区域。
然后将每个候选区域进行尺寸的修整变换,送进神经网络以读取特征,然后用 SVM 进行类别的识别,并产生分数。候选区域有 2000 个,所以很多会进行重叠。
针对每个类,通过计算 IoU 指标,采取非极大性抑制,以最高分的区域为基础,剔除掉那些重叠位置的区域。

可视化、框架精简和错误检测

在卷积神经网络中,第一层可以直接用来显示,而且肉眼可视,通常他们是为了捕捉物体边缘,及突出的颜色信息,但越往后的卷积层越抽象,这个时候进行可视化就是一个挑战了。
Zeiler 和 Fergus 提出了一种基于反卷积手段的可视化研究,但 R-CNN 的作者直接提供了一个没有参数的方法,简单直接。
思路是挑选一个特征出来,把它直接当成一个物体分类器,然后计算它们处理不同的候选区域时,activation 的值,这个值代表了特征对这块区域的响应情况,然后将 activation 作为分数排名,取前几位,然后显示这些候选区域,自然也可以清楚明白,这个 feature 大概是什么。
R-CNN 作者将 pool5 作为可视化对象,它的 feature map 是 6x6x255 的规格,可以理解为有 256 个小方块,每个方块对应一个特征。
下面的图表中显示了这以可视化的效果,这里只显示了 256 个特征中的 6 个,每个特征取 activation 值最高的 16 个区域。

[R-CNN2][base64str2]

框架精简

AlexNet 有 7 层,那么那些层是关键指标呢?哪些层可有可无呢?

[R-CNN3][base64str3]

pool5 在上一小节已经讨论过了,那么 fc6 和 f7 就成了研究的对象。
fc6 与 pool5 构成全连接,为了计算 feature 它会乘以一个 4096x9216 的权重矩阵,然后在与一组 bias 相加,所以它有 3700 多万的参数。fc7 是最后一层,它的权重矩阵是 4096x409,它的参数有 1678 万多的参数。

但经过作者在 PASCAL 上不做 fine-tune 处理,直接测试,可以发现 fc7 的意义没有 fc6 大,甚至移除它之后,对于 mAP 结果指标没有影响。移除 fc7 就表示可以减少将近 1800 万个参数。
更惊喜的事情是,同时移除 fc6 和 fc7 并没有多大的损失,甚至结果还要好一点点。

所以,神经网络最神奇的力量来自卷积层,而不是全连接层。

上面说的是没有 fine-tune 的情况,那么在 fine-tune 的情况是什么呢?
结果证明,fine-tune 后 fc6 与 fc7 提升的效果明显。所以结论就是,pool5 从 ImageNet 训练集中学习了物体的泛化能力,而能力的提升则是通过特定领域的 fine-tune
举个例子,神经网络在 ImageNet 数据集中学习到了 100 种猫的特征,而我自己的数据集只有两种猫,经过 fine-tune 训练后,这个神经网络可以更准确识别这两种猫了。
R-CNN 还与其他的特征方法进行了能力比较,作者选取了两种基于 DPM 的方法,DPM ST 和 DPM HSC,结果都证明,R-CNN 要好于它们。

流程

R-CNN整体流程如下:

  1. 先利用Selective Search在每个图片选出大约2k个region proposals
  2. 由于之后的网络结构只能接受相同大小的proposal,所以需要把每一个proposal拉伸(warp)成227*227大小
  3. 如果proposal与GT IOU大于阈值(0.5)标记为正样本,否则是负样本
  4. 对于每一个proposal利用CNN提取特征
  5. 利用这些特征训练一个SVM分类器,从而得出相应类别的分数
  6. 利用NMS去掉一些冗余的候选框,大致的Detection就完成了
  7. 很容易发现许多proposal都不精确,因此使用Bounding Box Regression对候选框进行微调

流程注意点:
首先在fine-tuning阶段,IOU阈值为0.5,即大于0.5的都是目标,小于0.5的都是背景,而在SVM训练时,小于0.3的都是负样本,正样本为GT。
为什么要分开设置阈值呢?在fine-tuning期间,为了防止过拟合,阈值设置的宽松一点,就是就算有一半左右的物体与GT相交,那也是算是物体,而不是背景。在训练SVM的时候,则正样本只有GT,阈值大于0.3的忽略掉,小于0.3的算负样本(0.3也是通过实验挑选出来的)。之所以要重新训练SVM,也是因为在之前fine-tuning网络的时候设置的阈值较为宽松,所以softmax进行分类的性能其实并不是很理想。因此重新训练了一个SVM分类器,效果相比softmax更理想了。

总结

  • R-CNN 采用 AlexNet
  • R-CNN 采用 Selective Search 技术生成 Region Proposal.
  • R-CNN 在 ImageNet 上先进行预训练,然后利用成熟的权重参数在 PASCAL VOC 数据集上进行 fine-tune
  • R-CNN 用 CNN 抽取特征,然后用一系列的的 SVM 做类别预测。
  • R-CNN 的 bbox 位置回归基于 DPM 的灵感,自己训练了一个线性回归模型。
  • R-CNN 的语义分割采用 CPMC 生成 Region

创新点:
(1)采用高容量的CNN进行特征提取;
(2)采用大样本下有监督预训练+小样本微调的方式解决小样本难以训练甚至过拟合等问题。小样本数据训练很容易造成网络过拟合,但是在大样本训练后利用其参数初始化网络可以很好地训练小样本,这解决了小样本训练的难题。文中利用ILSVRC2012的训练集先进行有监督预训练,再利用PASCAL 2007进行微调。

缺点:
(1)训练过程是多级流水线。R-CNN首先使用目标候选框对卷积神经网络使用log损失进行微调。然后,它将卷积神经网络得到的特征送入SVM。 这些SVM作为目标检测器,替代通过微调学习的softmax分类器。 在第三个训练阶段,学习检测框回归。
(2)训练在时间和空间上的开销很大。对于SVM和检测框回归训练,从每个图像中的每个目标候选框提取特征,并写入磁盘。对于非常深的网络,如VGG16,这个过程在单个GPU上需要2.5天(VOC07 trainval上的5k个图像)。这些特征需要数百GB的存储空间。
(3)目标检测速度很慢。在测试时,对每个测试图像中的1000-2000个目标候选框各自提取特征。上千个 Region 存在大量的范围重叠,重复的特征提取带来巨大的计算浪费。
(4)针对传统 CNN 需要固定尺寸的输入图像,crop/warp(归一化)产生物体截断或拉伸,会导致输入 CNN 的信息丢失;

SPP-Net

论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
发表时间:2015
发表作者:(微软研究院)Kaiming H
发表刊物/会议:ECCV

针对卷积神经网络重复运算问题,本文提出一种 SPP-Net 算法,通过在卷积层和全连接层之间加入空间金字塔池化结构(Spatial Pyramid Pooling代替 R-CNN 算法在输入卷积神经网络前对各个候选区域进行剪裁、缩放操作使其图像子块尺寸一致的做法。利用空间金字塔池化结构有效避免了 R-CNN 算法对图像区域剪裁、缩放操作导致的图像物体剪裁不全以及形状扭曲等问题,更重要的是解决了卷积神经网络对图像重复特征提取的问题,大大提高了产生候选框的速度,且节省了计算成本。但是和 R-CNN 算法一样训练数据的图像尺寸大小不一致,导致候选框的 ROI 感受野大,不能利用 BP 高效更新权重。

SPP-Net的改进如下:

  1. 送入网络的不再是proposal里的图像,而是一次性的把整个图片送入,而且只输入一次,将通过Selective Search生成的proposal映射到通过卷积网络生成的feature map上,相当于一个proposal中的图像通过一层层卷积得到的feature map
  2. CNN网络之所以需要固定输入图像的尺寸,不在于卷积层与池化层,而在于全连接层,全连接层的参数维度需要固定。之前的解决方法都是固定图片的尺寸,这里在最后一层卷积层与FC层之间插入了一层SPP-layer,对于输入任意尺寸都是可以输出相同尺寸的特征。

ROI Pooling

ROI是Region of Interest的简写,指的是在“特征图上的框”。
在SPP Net和Fast RCNN中, ROIS是指Selective Search完成后得到的所有“候选框”在特征图上的映射;
在Faster RCNN中,候选框是经过RPN算法产生的,然后再把各个“候选框”映射到特征图上,得到ROIS。
根据输入的原始图像和Selective Search算法提供的1000-2000个候选框位置,产生整个原始图像得到的feature map上对应的框,也就是我们说的ROI(Region of Interest,即“特征图上的框”);
将映射后的区域划分为相同大小的块,块的数量是我们指定的;对每个块进行max pooling操作。
可以从不同大小的方框得到固定大小的相应的feature maps。输出的pooling结果的大小只和我们划分成多少块有关,而不取决于ROI和卷积feature maps的大小。

我们将Selective Search算法提供的1000-2000个候选框的位置记录下来,然后通过比例映射到整张图像的feature map上,每个候选框得到一个自己的候选区域的特征图B,然后将B同时送入上面的SPP层的4个ROI Pooling层;
SPP层(1×1, 2×2, 3×3, 6×6, totally 50 bins),得到112,800-d (256×50)个特征值;

[SPP1][base64str4]

目标检测

对卷积层可视化发现:输入图片的某个位置的特征反应在特征图上也是在相同位置。基于这一事实,对某个ROI区域的特征提取只需要在特征图上的相应位置提取就可以了。
一张任意尺寸的图片,在最后的卷积层conv5可以得到特征图。根据Region proposal步骤可以得到很多候选区域,这个候选区域可以在特征图上找到相同位置对应的窗口,然后使用SPP,每个窗口都可以得到一个固定长度的输出。将这个输出输入到全连接层里面。这样,图片只需要经过一次CNN,候选区域特征直接从整张图片特征图上提取。在训练这个特征提取网络的时候,使用分类任务得到的网络,固定前面的卷积层,只微调后面的全连接层。
在检测的后面模块,仍然和R-CNN一样,使用SVM和边框回归。SVM的特征输入是FC层,边框回归特征使用SPP层。

把候选区域从全图的feature map映射出特征向量

在CNN中感受野(receptive fields)是指某一层输出结果中一个元素所对应的上一层的区域大小。
在卷积参数计算过程中,我们给出上一层/下一层/滤波器尺寸、步长和填充大小的关系:
令:
输入尺寸 W1×H1
卷积核 F×F
输出尺寸 W2×H2
步长 stride:S
填充大小 padding:P
关系式如下:
\[
W_2 = \frac{W_1-F+2P}{S}+1 \H_2 = \frac{H_1-F+2P}{S}+1
\]
这是上一层到下一层的推导,如果现在反过来,给你下一层的大小,问你上一层的感受野多大,该怎么计算?
我们把上面公式变个形式:
\[
W_1=(W_2-1)S-2P+F \H_1=(H_2-1)S-2P+F
\]

基于感受野的特征映射

通常,我们需要知道网络里面任意两个feature map之间的坐标映射关系(一般是中心点之间的映射),计算公式:

  • 对于 Conv/Poollayer:\(p_i=s_i?p_{i+1}+((k_i?1)/2?padding)\)
  • 对于Neuronlayer(ReLU/Sigmoid/..):\(p_i=p_{i+1}\)
    上面是计算任意一个layer输入输出的坐标映射关系,如果是计算任意feature map之间的关系,只需要用简单的组合就可以得到,下图是一个简单的例子:

[SPP2][base64str5]

检测结果

作者主要展示了在VOC 2007数据集上SPP与RCNN的效果。

[SPP3][base64str6]

总结

SPP Net是一个灵活的解决方案,可以处理不同的规模、大小和纵横比。这些问题在视觉识别中很重要,但在深度网络环境中却很少被考虑。本文提出了一种利用空间金字塔池层训练深度网络的方法。由此产生的SPP-net在分类/检测任务中显示出优异的精度,大大加快了基于dnn的检测速度。但SPP Net网络也有显著的缺点:
像RCNN一样,训练过程是一个多级流水线,涉及提取特征,使用log损失对网络进行微调,训练SVM分类器,最后拟合检测框回归。但是有一点要注意,就是SPP Net的优化算法无法更新SPP层之前的卷积层(这些卷积层用来提取整张图像的特征)。这种限制(固定的卷积层)影响了深层网络的精度。

  1. 虽然解决了R-CNN许多大量冗余计算的问题,但是还是沿用了R-CNN的训练结构,也训练了SVM分类器, 单独进行BBox regression。
  2. SPP-Net 很难通过fine-tuning对SPP-layer之前的网络进行参数微调,效率会很低,原因具体是(Fast-RCNN中的解释): SPP做fine-tuning时输入是多个不同的图片,这样对于每一个图片都要重新产出新的feature map,效率很低,而Fast-RCNN对其进行了改进。

Fast R-CNN

论文:Fast R-CNN
发表时间:2015
发表作者:(Microsoft)Ross Girshick
发表刊物/会议:ICCV

本文提出一种改进的 Fast R-CNN 算法,借鉴 SPP-Net 算法结构,设计一种 ROI pooling 的池化层结构,有效解决 R-CNN 算法必须将图像区域剪裁、缩放到相同尺寸大小的操作。提出多任务损失函数思想,将分类损失和边框回归损失结合统一训练学习,并输出对应分类和边框坐标,不再需要额外的硬盘空间来存储中间层的特征,梯度能够通过 RoI Pooling 层直接传播。用SVD对Fast R-CNN网络末尾并行的全连接层进行分解,减少计算复杂度,加快检测速度。但是其仍然没有摆脱选择性搜索算法生成正负样本候选框的问题。

背景

经典的R-CNN存在以下几个问题:

  • 训练分多步骤(先在分类数据集上预训练,再进行fine-tune训练,然后再针对每个类别都训练一个线性SVM分类器,最后再用regressors对bounding box进行回归,并且bounding box还需要通过selective search生成)
  • 时间和空间开销大(在训练SVM和回归的时候需要用网络训练的特征作为输入,特征保存在磁盘上再读入的时间开销较大)
  • 测试比较慢(每张图片的每个region proposal都要做卷积,重复操作太多)

在Fast RCNN之前提出过SPPnet来解决R-CNN中重复卷积问题,但SPPnet仍然存在与R-CNN类似的缺陷:

  • 训练分多步骤(需要SVM分类器,额外的regressors)
  • 空间开销大

  因此,该文提出的Fast RCNN便是解决上述不足,在保证效果的同时提高效率。基于VGG16的Fast RCNN模型在训练速度上比R-CNN快大约9倍,比SPPnet快大约3倍;测试速度比R-CNN快大约213倍,比SPPnet快大约10倍,在VOC2012数据集上的mAP大约为66%。

流程

训练

Fast R-CNN输入是224×224224×224的固定大小图片;经过5个卷积层+2个降采样层(分别跟在第一和第二个卷积层后面)进入ROIPooling层(其输入是conv5层的输出和region proposal,region proposal个数大约为2000个);再经过两个output都为4096维的全连接层,分别经过output各为21和84维的全连接层(并列的,前者是分类输出,后者是回归输出);最后接上两个损失层(分类是softmax,回归是smoothL1)
Fast R-CNN模型的流程图如下:

[Fast R-CNN1][base64str7]

ROIPooling

由于region proposal的尺度各不相同,而期望提取出来的特征向量维度相同,因此需要某种特殊的技术来做保证。ROIPooling的提出便是为了解决这一问题的。其思路如下:

  • 将region proposal划分为H×W大小的网格
  • 对每一个网格做MaxPooling(即每一个网格对应一个输出值)
  • 将所有输出值组合起来便形成固定大小为H×W的feature map
训练样本

训练过程中每个mini-batch包含2张图像和128个region proposal(即ROI,64个ROI/张),其中大约25%的ROI和ground truth的IOU值大于0.5(即正样本),且只通过随机水平翻转进行数据增强。

损失函数

多损失融合(分类损失和回归损失融合),分类采用log loss(即对真实分类的概率取负log,分类输出K+1维),回归的loss和R-CNN基本一样。
总的损失函数如下:
\[
L(p,u,t^u,v)=L_{cls}(p,u)+\lambda [u\geqslant 1]L_{loc}(t^u,v)
\]
分类损失函数如下:
\[
L_{cls}(p,u)=-log\ p_u
\]
回归损失函数如下:
\[
L_{loc}(t^u,v)=\sum_{i\epsilon \{x,y,w,h\}}smooth_{L_1}(t_i^u-v_i)
\]
其中有:
\[
smooth_{L_1}(x)=\left\{\begin{matrix}0.5x^2\ \ \ \ \ \ if\ |x|< 1\\|x|-0.5\ \ otherwise\end{matrix}\right.
\]

改进全连接层

由于卷积层计算针对的是一整张图片,而全连接层需要对每一个region proposal都作用一次,所以全连接层的计算占网络计算的将近一半。作者采用SVD来简化全连接层计算。

Fast R-CNN整体训练流程如下:
将整个图片与通过Selective Search筛选出的region proposals一同输入,经过卷积层、池化层产出feature map,计算出原图的proposal在feature map的映射,将相应的feature送到ROI pooling层,进行池化,产出固定长度的feature vector作为FC层(SVD分解实现)的输入最终分支成两个兄弟输出层:一个通过softmax产生K+1个分类的概率,另一个对于每个object 类别输出四个实数,代表一个较为精确的BBox position,最后进行NMS得到最终的结果。
训练整体架构总结如下:
[Fast R-CNN2][base64str8]

测试整体架构整体架构总结如下:
[Fast R-CNN3][base64str9]

结果

Fast R-CNN相比其他算法表现更好,且注意到,VOC12由于数据集更大而使得模型效果提高很多。(这一角度也说明了数据对于当前深度学习的重要性不容忽视!)
[Fast R-CNN4][base64str10]

总结

Fast R-CNN最主要的是解决了SPP-Net与R-CNN训练步骤复杂、冗余的缺点,首先它同样对整个图像只做一次卷积提取full-image feature map,其次它利用了ROI pooling layer(可以看做SPP的简化版) 进行固定送入FC层的feature尺寸,从而达到对任意尺寸的图像进行训练及测试,最后它将分类与回归同时进行,相当于多任务学习,他们共享前面网络的特征与计算,这样也不需要利用磁盘对特征进行存储。同时Fast R-CNN也对损失函数,FC层加速等做了优化。同时该文章还通过实验证明了深度网络具有较好的scale-invariance,即对scale并不是特别敏感。但region proposal的提取仍然采用selective search,整个检测流程时间大多消耗在这上面(生成region proposal大约2~3s,而特征提取+分类只需要0.32s),之后的Faster RCNN的改进之一便是此点。

Fast R-CNN

论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
发表时间:2016
发表作者:(Microsoft)Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun
发表刊物/会议:NIPS
论文链接:论文链接
论文代码:Matlab版本点击此处,Python版本点击此处

2015 年微软研究院的任少庆、何恺明以及 Ross B Girshick 等人又提出了 Faster R-CNN 算法。从R-CNN到Fast R-CNN,再到本文的Faster R-CNN,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内。所有计算没有重复,完全在GPU中完成,大大提高了运行速度。
Faster R-CNN可以简单地看做“区域生成网络(RPN)+Fast RCNN“的系统,用区域生成网络代替Fast R-CNN中的Selective Search方法,网络结构如下图。本篇论文着重解决了这个系统中的三个问题:

  • 如何设计区域生成网络
  • 如何训练区域生成网络
  • 如何让区域生成网络和Fast R-CNN网络共享特征提取网络

[Faster RCNN1][base64str11]

步骤如下:

  • 首先向CNN网络【ZF或VGG-16】输入任意大小图片M×NM×N;
  • 经过CNN网络前向传播至最后共享的卷积层,一方面得到供RPN网络输入的特征图,另一方面继续前向传播至特有卷积层,产生更高维特征图;
  • 供RPN网络输入的特征图经过RPN网络得到区域建议和区域得分,并对区域得分采用非极大值抑制【阈值为0.7】,输出其Top-N【文中为300】得分的区域建议给RoI池化层;
  • 第2步得到的高维特征图和第3步输出的区域建议同时输入RoI池化层,提取对应区域建议的特征;
  • 第4步得到的区域建议特征通过全连接层后,输出该区域的分类得分以及回归后的bounding-box。

RPN

设计辅助生成样本的 RPN(Region Proposal Networks)网络,将算法结构分为两个部分,先由 RPN 网络判断候选框是否为目标,再经分类定位的多任务损失判断目标类型,整个网络流程都能共享卷积神经网络提取的的特征信息,节约计算成本,且解决 Fast R-CNN 算法生成正负样本候选框速度慢的问题,同时避免候选框提取过多导致算法准确率下降。

RPN网络基本设想是:在提取好的特征图上,对所有可能的候选框进行判别。由于后续还有位置精修步骤,所以候选框实际比较稀疏。

[Faster RCNN2][base64str12]

但是由于 RPN 网络可在固定尺寸的卷积特征图中生成多尺寸的候选框,导致出现可变目标尺寸和固定感受野不一致的现象。
Faster R-CNN的结构主要分为三大部分:
第一部分是共享的卷积层-backbone,第二部分是候选区域生成网络-RPN,第三部分是对候选区域进行分类的网络-classifier。
RPN与classifier部分均对目标框有修正。classifier部分就是Fast R-CNN结构。

Anchor:
Anchor实际上指的是预先设置好长宽比与面积的候选框。但是这种候选框产生的机制与Selective Search算法不一样。
在论文中,作者为每一个位置生成9种anchor,包含三种面积(128×128,256×256,512×512),每种面积又包含三种长宽比(1:1,1:2,2:1)。

RPN(Region Proposal Networks)网络,RPN网络实际分为2条线,上面一条通过softmax分类(分类指的是候选框中是不是有目标物体,而不是对其内部的具体类别进行分类)anchors获得foreground和background(检测目标是foreground),下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合foreground anchors和bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。
anchors(三个大小,三种形状,with:height∈{1:1, 1:2, 2:1}),而这 9 个 anchors 的作用,就是用来遍历 Conv layers 获得的 feature map(将 anchor 中心点与滑窗中心点进行对其),为每一个点都配备anchors 作为初始的检测框。
此外,全部anchors拿去训练太多了,训练程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练。训练RPN时,与VGG共有的层参数可以直接拷贝经ImageNet训练得到的模型中的参数,剩下没有的层参数用标准差=0.01的高斯分布初始化。

一句话总结:其实RPN最终就是在原图尺度上,设置了密密麻麻的候选Anchor。然后用cnn去判断哪些Anchor是里面有目标的foreground anchor,哪些是没目标的backgroud。所以,仅仅是个二分类而已!
缺点:由于RPN网络可在固定尺寸的卷积特征图中生成多尺寸的候选框,导致出现可变目标尺寸和固定感受野不一致的现象。
RPN最大的问题就是对小物体检测效果很差

参考:
RCNN
SPP Net
Fast R-CNN

原文地址:https://www.cnblogs.com/hellojamest/p/11437523.html

时间: 2024-10-29 03:00:30

Paper Reading:RCNN-SPP-Fast RCNN-Faster RCNN的相关文章

目标检测梳理:基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN(转)

基于深度学习的目标检测技术演进:R-CNN.Fast R-CNN.Faster R-CNN(转) 原文链接:https://www.cnblogs.com/skyfsm/p/6806246.html object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.object detection要解决的问题就是物体在哪里,是什么这整个流程的问题.然而,这个问题可不是那么容易解决的,物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方

RCNN,Fast RCNN,Faster RCNN 的前生今世:(2)R-CNN

Region CNN(RCNN)可以说是利用深度学习进行目标检测的开山之作.作者Ross Girshick多次在PASCAL VOC的目标检测竞赛中折桂,2010年更带领团队获得终身成就奖,如今供职于Facebook旗下的FAIR. 这篇文章思路简洁,在DPM方法多年平台期后,效果提高显著.包括本文在内的一系列目标检测算法:RCNN,Fast RCNN, Faster RCNN代表当下目标检测的前沿水平,在github都给出了基于Caffe的源码 思想 本文解决了目标检测中的两个关键问题. 问题

R-CNN , Fast R-CNN , Faster R-CNN原理及区别

github博客传送门 csdn博客传送门 ==RCNN== 1.生成候选区域 使用Selective Search(选择性搜索)方法对一张图像生成约2000-3000个候选区域,基本思路如下: (1)使用一种过分割手段,将图像分割成小区域 (2)查看现有小区域,合并可能性最高的两个区域,重复直到整张图像合并成一个区域位置.优先合并以下区域: 颜色(颜色直方图)相近的 纹理(梯度直方图)相近的 合并后总面积小的 合并后,总面积在其BBOX中所占比例大的 在合并时须保证合并操作的尺度较为均匀,避免

R-CNN/Fast R-CNN/Faster R-CNN

一.R-CNN 横空出世R-CNN(Region CNN,区域卷积神经网络)可以说是利用深度学习进行目标检测的开山之作,作者Ross Girshick多次在PASCAL VOC的目标检测竞赛中折桂,2010年更是带领团队获得了终身成就奖,如今就职于Facebook的人工智能实验室(FAIR). R-CNN算法的流程如下 1.输入图像2.每张图像生成1K~2K个候选区域3.对每个候选区域,使用深度网络提取特征(AlextNet.VGG等CNN都可以)4.将特征送入每一类的SVM 分类器,判别是否属

检测算法简介及其原理——fast R-CNN,faster R-CNN,YOLO,SSD,YOLOv2,YOLOv3

1 引言 深度学习目前已经应用到了各个领域,应用场景大体分为三类:物体识别,目标检测,自然语言处理.本文着重与分析目标检测领域的深度学习方法,对其中的经典模型框架进行深入分析. 目标检测可以理解为是物体识别和物体定位的综合,不仅仅要识别出物体属于哪个分类,更重要的是得到物体在图片中的具体位置. 为了完成这两个任务,目标检测模型分为两类.一类是two-stage,将物体识别和物体定位分为两个步骤,分别完成,这一类的典型代表是R-CNN, fast R-CNN, faster-RCNN家族.他们识别

Faster R-CNN论文详解

原文链接:http://lib.csdn.net/article/deeplearning/46182 paper链接:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks &创新点 设计Region Proposal Networks[RPN],利用CNN卷积操作后的特征图生成region proposals,代替了Selective Search.EdgeBoxes等方法,速度上提升明显:

Faster RCNN学习记录

<Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks>Shaoqing Ren, Kaiming He, Ross Girshick, Jian Sun                                           ——学习资料记录(Simon John) 文章拟解决问题(Towards Real-Time) SPP net和Fast R-CNN提取proposal(

faster r-cnn学习(一)

http://closure11.com/rcnn-fast-rcnn-faster-rcnn%E7%9A%84%E4%B8%80%E4%BA%9B%E4%BA%8B/ 首先看fast r-cnn这篇论文,中间加入了有些博友的想法. 问题 目标检测主要面临两个问题:过多的候选位置(proposals):必须由这些粗略的候选位置中选出准确的位置. 这篇论文将学习目标proposals分类和精确定位结合起来. 1. R-CNN和SPPnet存在的问题 (1)R-CNN的问题 训练需要多阶段:先用Co

r-cnn学习系列(三):从r-cnn到faster r-cnn

把r-cnn系列总结下,让整个流程更清晰. 整个系列是从r-cnn至spp-net到fast r-cnn再到faster r-cnn.  RCNN 输入图像,使用selective search来构造proposals(大小不一,需归一化),输入到CNN网络来提取特征, 并根据特征来判断是什么物体(分类器,将背景也当做一类物体),最后是对物体的区域(画的框)进行微调(回归器). 由下面的图可看出,RCNN分为四部分,ss(proposals),CNN,分类器,回归器,这四部分是相对独立的.改进的