1.Faster RCNN论文背景
2. Faster-RCNN算法流程
(1)Fast-RCNN算法流程
(2)特征提取conv layers
(3)Region Proposal Networks(RPN)
(4)ROI Pooling作用
(5)Classification
3.Faster RCNN问题和优缺点

本篇还有细节原理部分没有解释清楚,如有不懂可查看之前更详细部分文章

一、Faster RCNN论文背景

  在目标检测领域,传统的方法通常分为两个阶段:生成候选区域和对这些区域进行分类。然而,这些方法的处理速度较慢,限制了实时应用的可能性。在此之前,有两个重要的工作推动了目标检测领域的发展。第一个是R-CNN(Region-based Convolutional Neural Networks)方法,它首次将卷积神经网络(CNN)应用于目标检测中。R-CNN通过在图像中提取固定大小的候选区域,然后对每个候选区域进行分类,从而实现目标检测。尽管R-CNN在准确性上表现出色,但其处理速度非常慢。第二个工作是SPP-net(Spatial Pyramid Pooling Network),它引入了空间金字塔池化层来提高处理速度,但其仍然需要在每个候选区域上运行CNN。


  “Faster R-CNN” 是一篇于2015年发布的论文,题为 “Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks”。该论文由Shaoqing Ren、Kaiming He、Ross Girshick和Jian Sun等人共同撰写,发表在IEEE Transactions on Pattern Analysis and Machine Intelligence (PAMI)期刊上。

  该论文提出了一个包含共享卷积层和RPN的网络结构。共享卷积层用于提取图像的特征表示,RPN则通过滑动窗口在特征图上生成候选区域,并预测每个窗口是否包含目标以及目标的边界框。生成的候选区域经过候选区域池化层提取特征向量,并输入到后续的分类器进行目标分类

  “Faster R-CNN” 的创新点在于将候选区域生成和目标分类集成到一个网络中,实现了端到端的目标检测,并取得了较高的准确性和较快的处理速度

二、Faster-RCNN算法流程

1.Fast-RCNN算法流程:

(1)输入图像;

(2)通过深度网络中的卷积层(VGG、Alexnet、Resnet等中的卷积层)对图像进行特征提取,得到图片的特征图;

(3)通过选择性搜索算法得到图像的感兴趣区域(通常取2000个);

(4)对得到的感兴趣区域进行ROI pooling(感兴趣区域池化):即通过坐标投影的方法,在特征图上得到输入图像中的感兴趣区域对应的特征区域,并对该区域进行最大值池化,这样就得到了感兴趣区域的特征,并且统一了特征大小,如图2所示;

(5)对ROI pooling层的输出(及感兴趣区域对应的特征图最大值池化后的特征)作为每个感兴趣区域的特征向量;

(6)将感兴趣区域的特征向量与全连接层相连,并定义了多任务损失函数,分别与softmax分类器和boxbounding回归器相连,分别得到当前感兴趣区域的类别及坐标包围框;

(7)对所有得到的包围框进行非极大值抑制(NMS),得到最终的检测结果。

rcnn缺点_算法

2.Faster-RCNN算法流程:

(1)conv layers:即特征提取网络,用于提取特征。通过一组conv+relu+pooling层来提取图像的feature maps,用于后续的RPN层和取proposal。
(2)RPN(Region Proposal Network):即区域候选网络,该网络替代了之前RCNN版本的Selective Search,用于生成候选框。这里任务有两部分,一个是分类:判断所有预设anchor是属于positive还是negative(即anchor内是否有目标,二分类);还有一个bounding box regression:修正anchors得到较为准确的proposals。因此,RPN网络相当于提前做了一部分检测,即判断是否有目标(具体什么类别这里不判),以及修正anchor使框的更准一些。
(3)RoI Pooling即兴趣域池化(SPP net中的空间金字塔池化):用于收集RPN生成的proposals(每个框的坐标),并从(1)中的feature maps中提取出来(从对应位置扣出来),生成proposals feature maps送入后续全连接层继续做分类(具体是哪一类别)和回归。
(4)Classification and Regression:利用proposals feature maps计算出具体类别,同时再做一次bounding box regression获得检测框最终的精确位置。

rcnn缺点_目标检测_02


rcnn缺点_池化_03


rcnn缺点_深度学习_04

三个图同时参考好思考更多细节部分,每一个步骤展开说明

3.特征提取conv layers

Conv layers包含了conv,pooling,relu三种层。以VGG16模型中的faster_rcnn_test.pt的网络结构为例上图,有13个conv层,13个relu层,4个pooling层。还可以用ResNet、Inception等。
conv层都是:kernel_size=3,pad=1,stride=1
pooling层都是:kernel_size=2,pad=0,stride=2
经过每个conv层后,feature map大小都不变;经过每个pooling层后,feature map的宽高变为之前的一半

4.Region Proposal Networks(RPN)

  提取前景(本文称为提取proposal)的方法是Selective Search,简称SS法,通过比较相邻区域的相似度来把相似的区域合并到一起,反复这个过程,最终就得到目标区域,这种方法相当耗时以至于提取proposal的过程比分类的过程还要慢,完全达不到实时的目的。而Faster RCNN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster R-CNN的巨大优势,能极大提升检测框的生成速度,把提取proposal的过程也通过网络训练来完成,部分网络还可以和分类过程共用,新的方法称为Reginal Proposal Network(RPN),速度大大提升。

rcnn缺点_池化_05

RPN网络结构
生成anchors -> softmax分类器提取positvie anchors -> bbox reg回归positive anchors -> Proposal Layer生成proposals

RPN作用
(1)把feature map分割成多个小区域,识别出哪些小区域是前景,哪些是背景,简称RPN Classification.
(2)获取前景区域的大致坐标,简称RPN bounding box regression。

anchors
  anchors是一组预定义的矩形,论文中设置了3种形状,3种比例,一共9个预定义的anchors。需要注意anchors是针对哪个图像设置的!这样做获得检测框很不准确,但是后面还有2次bounding box regression修正检测框位置。Fast R-CNN以及SPP-net使用的BBR的输入是从任意大小的RoI上池化得到的(RoI pooling),同时回归权重在所有RoI上共享,而Faster R-CNN使用的BBR的输入是固定大小的3 x 3 RoI(3 x 3 convolution),同时不同尺度和长宽比的anchor使用不同的回归器,k个回归器之间并不共享权重。

rcnn缺点_rcnn缺点_06

[[ -84.  -40.   99.   55.]
 [-176.  -88.  191.  103.]
 [-360. -184.  375.  199.]
 [ -56.  -56.   71.   71.]
 [-120. -120.  135.  135.]
 [-248. -248.  263.  263.]
 [ -36.  -80.   51.   95.]
 [ -80. -168.   95.  183.]
 [-168. -344.  183.  359.]]

其中每行的4个值 表矩形左上和右下角点坐标。9个矩形共有3种形状,长宽比为大约为 三种

特征图上每个像素都对应了k个anchors,会产生大量anchors,在实际训练RPN时,程序会在合适的anchors中随机选取128个postive anchors+128个negative anchors进行训练。

rcnn缺点_池化_07


(1)在原文中使用的是ZF model中,其Conv Layers中最后的conv5层num_output=256,对应生成256张特征图,所以相当于feature map每个点都是256-dimensions

(2)在conv5之后,做了rpn_conv/3x3卷积且num_output=256,相当于每个点又融合了周围3x3的空间信息

(3)假设在conv5 feature map中每个点上有k个anchor(默认k=9),而每个anhcor要分positive和negative,所以每个点由256d feature转化为cls=2•k scores;而每个anchor都有(x, y, w, h)对应4个偏移量,所以reg=4•k coordinatesRPN Classification:这是个二分类的过程。先要在feature map上均匀的划分出KxHxW个区域(称为anchor,默认K=9,H是feature map的高度,W是宽度),通过比较这些anchor和ground truth间的重叠情况来决定哪些anchor是前景,哪些是背景,也就是给每一个anchor都打上前景或背景的label。有了labels,你就可以对RPN进行训练使它对任意输入都具备识别前景、背景的能力。

RPN bounding box regression:用于得出前景的大致位置,要注意这个位置并不精确,准确位置的提取在后面的Proposal Layer bounding box regression。

  RPN训练时要把RPN classification和RPN bounding box regression的loss加到一起来实现联合训练。

如图9所示绿色框为飞机的Ground Truth(GT),红色为提取的positive anchors,即便红色的框被分类器识别为飞机,但是由于红色的框定位不准,这张图相当于没有正确的检测出飞机。所以我们希望采用一种方法对红色的框进行微调,使得positive anchors和GT更加接近。

rcnn缺点_目标检测_08

Proposal Layer顺序依次处理
(1)生成anchors,利用【dx dy dw dh】对所有的anchors做bbox regression回归(这里的anchors生成和训练时完全一致)
(2)按照输入的positive softmax scores由大到小排序anchors,提取前pre_nms_topN(e.g. 6000)个anchors,即提取修正位置后的positive anchors
(3)限定超出图像边界的positive anchors为图像边界,防止后续roi pooling时proposal超出图像边界(见文章底部QA部分图21)
(4)剔除尺寸非常小的positive anchors
(5)对剩余的positive anchors进行NMS(nonmaximum suppression)
(6)Proposal Layer有3个输入:positive和negative anchors分类器结果rpn_cls_prob_reshape,对应的bbox reg的(e.g. 300)结果作为proposal输出[x1, y1, x2, y2]。

5.ROI Pooling作用

1、从feature maps中“抠出”proposals(大小、位置由RPN生成)区域;
2、把“抠出”的区域pooling成固定长度的输出

(1)由于proposals坐标是基于MxN尺度的,先映射回(M/16)x(N/16)尺度
(2)再将每个proposal对应的feature map区域分为pooled_w x pooled_h的网格
(3)对网格的每一部分做max pooling
(4)这样处理后,即使大小不同的proposal输出结果都是pooled_w x pooled_h固定大小,实现了固定长度输出,

rcnn缺点_rcnn缺点_09


  feature map中有两个不同尺寸的proposals,但pooling后都是7x7=49个输出,这样就能为后面的全连接层提供固定长度的输入。RPN网络提取出的proposal大小是会变化的,而分类用的全连接层输入必须固定长度,所以必须有个从可变尺寸变换成固定尺寸输入的过程。在较早的R-CNN和Fast R-CNN结构中都通过对proposal进行拉升(warp)或裁减(crop)到固定尺寸来实现,拉升、裁减的副作用就是原始的输入发生变形或信息量丢失(图7),以致分类不准确。而ROI Pooling就完全规避掉了这个问题,proposal能完整的pooling成全连接的输入,而且没有变形,长度也固定。

6.Classification

  Classification部分利用已经获得的proposal feature maps,通过full connect层与softmax计算每个proposal具体属于那个类别(如人,车,电视等),输出cls_prob概率向量;同时再次利用bounding box regression获得每个proposal的位置偏移量bbox_pred,用于回归更加精确的目标检测框。RPN中只是二分类,区分目标还是背景;这里的分类是要对之前的所有positive anchors识别其具体属于哪一类。

rcnn缺点_深度学习_10


(1)通过全连接层和softmax对所有proposals进行具体类别的分类(通常为多分类)

(2)再次对proposals进行bounding box regression,获取更高精度的最终的predicted box

三、Faster RCNN问题和优缺点

1.问题:

(1)计算复杂度较高:相对于传统的目标检测方法,“Faster R-CNN” 的计算复杂度更高。由于需要进行区域生成网络(RPN)的预测和候选区域的分类,整个网络的计算成本较大。

(2)训练和调参困难:“Faster R-CNN” 模型的训练和调参需要一定的技术和计算资源。要获得最佳的检测性能,需要仔细调整网络的超参数和训练策略。

2.优点:

(1)端到端目标检测:与传统的两阶段目标检测方法相比,“Faster R-CNN” 提供了一个端到端的目标检测框架。通过引入区域生成网络(RPN),候选区域的生成和目标分类可以在同一个网络中进行,使得整个目标检测过程更加简洁和高效。

(2)较高的准确性:“Faster R-CNN” 在目标检测任务中表现出较高的准确性。通过利用深度卷积神经网络(CNN)进行特征提取和候选区域分类,可以获得更准确的目标定位和分类结果。

(3)实时性能改进:相较于传统的方法,“Faster R-CNN” 在实时目标检测方面取得了显著的改进。引入区域生成网络(RPN)的设计使得整个检测过程更加高效,从而实现了更快的检测