目录
一、Faster R-CNN的思想
二、FasterRCNN模型结构
(一)网络结构
(二)RPN网络(Region Proposal Networks)
(三)什么是锚点(Anchors)
(四)ROI Pooling
三、总结
RCNN、FastRCNN、FasterRCNN比较:
一、Faster R-CNN的思想
Faster R-CNN可以简单地看做“区域生成网络RPNs + Fast R-CNN”的系统,用区域生成网络RPN代替FastR-CNN中的Selective Search方法。
Faster R-CNN这篇论文着重解决了这个系统中的三个问题:
- 1. 如何设计区域生成网络;
- 2. 如何训练区域生成网络;
- 3. 如何让区域生成网络和Fast RCNN网络共享特征提取网络。
二、FasterRCNN模型结构
在FastRCNN的基础上,引入了RPN网络,在feature map上的每个特征点预测多个候选框。
(一)网络结构
如下图:
模块1:对图像进行卷积特征提取,产生共享卷积feature maps。
- 用来作为RPN的输入;
- 用来作为提取RoI特征的输入;
模块2:
- 1)在 feature maps 中采用RPN提取候选框;
- 2)对RPN候选框和feature maps采用RoI,提取固定长度的特征向量,并输出分类和回归。
(二)RPN网络(Region Proposal Networks)
经典的检测方法生成检测框都非常耗时,如OpenCV adaboost使用滑动窗口+图像金字塔生成检测框;或如R-CNN使用SS(Selective Search)方法生成检测框。
而Faster RCNN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster R-CNN的巨大优势,能极大提升检测框的生成速度。
RPN目的:筛选候选框,最后一个目标仅保留最优的候选框。
RPN网络结构:
RPN的全流程:
- RPN的输入是公共Feature Map特征图,形状N*(H*W) ,经过3*3卷积层输出得到256*(H*W)的conv feature map特征图;
- conv feature map特征图的每个点(256d特征向量)经过FC全连接层后得到2个分数和4个坐标;
- 以上过程每个点一共计算k次(k为每个点的anchor数量,作者实验默认给出9个)。
细节理解:
- (1)2个分数分别是前景和背景;因为RPN是提候选框,还不用判断类别,所以只要求区分是不是物体就行,那么就有两个分数,前景(物体)的分数,和背景(不是物体)的分数。
- (2)4个坐标(x,y,w,h)是对原图GT的偏移,那么候选框 = Anchor框+偏移量;
- (3)conv feature map特征图的每个点要经过k次处理(k是anchor boxs个数)。
(三)什么是锚点(Anchors)
- 1. conv feature map特征图的256*H×W,即得到H*W个点(每个点256d),任意点跟原图肯定是有个一一对应的关系;
- 2. 由于原图和特征图大小不同,所以特征图上的一个点对应原图肯定是一个框;
- 3. 然而这个框很小,比如说8 x 8,但这个小框不是候选框,只是原图与特征图的比例;
- 4. 因此,需要基于这个框找到附近可能有的物体,如何做呢?
选取这个小框的中心点为基准,基于这个点想象出K个大小不同的框,这些框就叫做Anchors,利用这些框去寻找这个特征点附近的物体。
所谓的anchor其实就是人为设定的一些大小不同bounding box,也就是这些bounding box有可能和我们要检测的各种目标的大小比较接近。
在文章中作者设置了9种不同的anchor,其长宽比为[1:1, 1:2, 2:1]。
anchor的表示[x1,y1,x2,y2],分别是anchor的左上角坐标[x1,y1],右下角坐标[x2,y2]。
例如:
- 1.基于每个特征点生成9个Anchor;
- 2.如果原图是800*600,获取下采样/16的特征图,则特征图大小50*38;
- 3.则基于此特征图,在原图上共产生50*38*9个Anchor;
生成详细代码地址:
https://github.com/rbgirshick/py-faster-rcnn/blob/master/lib/rpn/generate_anchors.py;
论文中特征图尺寸H×W: 16×16;锚点框k=9;
后续处理:
- 1.删除背景框(9×16×16 );
- 2.NMS去除重合度大的框中分数低的那个;
- 3.取分数最大的K(Top-K)个框;
(四)ROI Pooling
ROI是在FastRCNN中新引入的方法;
每个目标的大小不同,因此映射在feature Map的形状也不同;Faster Rcnn为了使得后续的全连接层能够处理大小不同的特征,就把大小不同的特征统一按长宽方向切成相同个小区域,每个区域中包含若干个像素,每区域进行pooling,最后统一得到7*7的feature map,便于后续处理。
如下:
三、总结
1、还是无法达到实时检测目标;
2、获取region proposal,再对每个proposal分类计算量还是比较大。