DAY8:Faster-R-CNN简单理解

一、Faster-R-CNN

经过R-CNN和Fast-R-CNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN,在结构上,Faster RCNN已经将特征提取(feature extraction),proposal提取,bounding box regression(rect refine),classification都整合在了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显。

Faster R-CNN最突出的贡献就在于提出了Region Proposal Network(RPN)代替了Selective Search,从而将候选区域提取的时间开销几乎降为0。

二、R-CNN、Fast-R-CNN、Faster-R-CNN比较

(一)R-CNN


1、利用selective search 算法在图像中从上到下提取2000个左右的Region Proposal
2、将每个Region Proposal缩放(warp)成227*227的大小并输入到CNN,生成feature map
3、将每个Region Proposal提取的feature map输入到SVM进行分类
4、对于SVM分好类的Region Proposal做边框回归,用Bounding box回归值校正原来的建议窗口,生成预测窗口坐标
 

(二)Fast-R-CNN

1、输入图片,通过ss算法得到2000个建议框

2、将图片输入到网络,经过卷积迟化得到特征图

3、根据原图中建议框到特征图映射关系,在特征图中找到每个建议框对应的特征框。

4、通过ROI Pooling层缩放到7x7大小的特征图,在经过全连接层得到固定大小的特征向量。

5、随后会并联输入两个全链接层,其中一个负责目标概率预测,一个负责候选框边界回归

6、最后得到两个输出分别是经过Softmax的分类输出和Bounding-box窗口回归输出
 

(三)Faster-R-CNN

1、将整张图片输入CNN,进行特征提取;
2、用RPN先生成一堆Anchor box,对其进行裁剪过滤后通过softmax判断anchors属于前景(foreground)或者后景(background),即是物体or不是物体,所以这是一个二分类;同时,另一分支bounding box regression修正anchor box,形成较精确的proposal(注:这里的较精确是相对于后面全连接层的再一次box regression而言)
3、把建议窗口映射到CNN的最后一层卷积feature map上;
4、通过RoI pooling层使每个RoI生成固定尺寸的feature map;
5、利用Softmax Loss(探测分类概率) 和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练.
 

三、算法流程

Faster-R-CNN主要分为一下四个模块:CNN、RPN、Rol Pooling、Classification

DAY8:Faster-R-CNN简单理解

 

(一)CNN

将输入图片经过预训练cnn网络(vgg16)后得到feature map

(二)RPN

1、anchor

DAY8:Faster-R-CNN简单理解

 

对特征图像上的每个点人为设置9个anchor ,选定了3种不同scale(1:1 , 1:2 , 2:1)

conv5层num_output=256,对应生成256张特征图,所以相当于feature map每个点都是256-dimensions。conv5之后,做了rpn_conv/3x3卷积且num_output=256,相当于每个点又融合了周围3x3的空间信息,同时256-d不变。

假设在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 coordinates

2、RPN网络结构

DAY8:Faster-R-CNN简单理解

RPN网络结构

如图所示将输入的feature先经过3×3的卷积进行特征的进一步提取,然后分为两支:(rpn_cls)上面一直进行通过softmax二分类;(rpn_bbox)下面一支进行计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。

rpn_cls:样本分类

如果anchor box与ground truth的IoU值最大,标记为正样本,label=1
如果anchor box与ground truth的IoU>0.7,标记为正样本,label=1
如果anchor box与ground truth的IoU<0.3,标记为负样本,label=0
剩下的既不是正样本也不是负样本,不用于最终训练,label=-1

 

rpn_bbox:bounding box regression

DAY8:Faster-R-CNN简单理解 

绿色框为飞机的Ground Truth(GT),红色为提取的positive anchors,即便红色的框被分类器识别为飞机,但是由于红色的框定位不准,这张图相当于没有正确的检测出飞机。所以我们希望采用一种方法对红色的框进行微调,使得positive anchors和GT更加接近。 我们的目标是寻找一种关系,使得输入原始的anchor A经过映射得到一个跟真实窗口G更接近的回归窗口G',即

DAY8:Faster-R-CNN简单理解

采用以下思想:(具体看:https://zhuanlan.zhihu.com/p/31426458

DAY8:Faster-R-CNN简单理解 

 3、去除冗余框

 接着进一步对Anchors进行越界剔除和使用nms非最大值抑制。最后留下大约2000个anchor,然后再取前N个box(比如300个);这样,进入到下一层ROI Pooling时region proposal大约只有300个。
 

(三)Rol Pooling 

ROI pooling layer只需要下采样到一个7x7的特征图.对于VGG16网络conv5_3有512个特征图,这样所有region proposal对应了一个77512维度的特征向量作为全连接层的输入。(Fast-R-CNN有介绍过算法思想)

 为什么要pooling成7×7的尺度?是为了能够共享权重。Faster RCNN除了用到VGG前几层的卷积之外,最后的全连接层也可以继续利用。当所有的RoIs都被pooling成(512×7×7)的feature map后,将它reshape 成一个一维的向量,就可以利用VGG16预训练的权重,初始化前两层全连接。

DAY8:Faster-R-CNN简单理解

 

 

(四)Classification

DAY8:Faster-R-CNN简单理解

将从RoI Pooling获取到7x7=49大小的proposal feature maps后,送入后续网络,可以看到做了如下2件事:

1、通过全连接和softmax对proposals进行分类,计算每个proposal具体属于那个类别(如人,车,电视等),输出cls_prob概率向量

2、再次对proposals进行bounding box regression,获取更高精度的rect bo(所以是进行了两次bounding box regression)

 (全连接层的参数可以采用VGG训练好的,这里也就体现了ROI的重要性。)

四、代码实现

https://github.com/jwyang/faster-rcnn.pytorch

https://blog.csdn.net/weixin_43198141/article/details/90178512

https://blog.csdn.net/woshicao11/article/details/82055449

https://blog.csdn.net/qq_27825451/article/details/88843333

https://zhuanlan.zhihu.com/p/31426458

上一篇:链表Linkedlist题目


下一篇:Leetcode No.141 Linked List Cycle环形链表(c++实现)