两阶段目标检测详解--FasterRCNN

目录

一、Faster R-CNN的思想

二、FasterRCNN模型结构

(一)网络结构

(二)RPN网络(Region Proposal Networks)

(三)什么是锚点(Anchors)

(四)ROI Pooling

三、总结


        RCNN、FastRCNN、FasterRCNN比较:

两阶段目标检测详解--FasterRCNN_第1张图片

一、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上的每个特征点预测多个候选框。

(一)网络结构

        如下图:

两阶段目标检测详解--FasterRCNN_第2张图片

 ​​​​模块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网络结构:

两阶段目标检测详解--FasterRCNN_第3张图片

 RPN的全流程:

  1. RPN的输入公共Feature Map特征图,形状N*(H*W) ,经过3*3卷积层输出得到256*(H*W)的conv feature map特征图;
  2. conv feature map特征图的每个点(256d特征向量)经过FC全连接层后得到2个分数和4个坐标
  3. 以上过程每个点一共计算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;

两阶段目标检测详解--FasterRCNN_第4张图片

生成详细代码地址:

https://github.com/rbgirshick/py-faster-rcnn/blob/master/lib/rpn/generate_anchors.py;

论文中特征图尺寸H×W: 16×16;锚点框k=9;

两阶段目标检测详解--FasterRCNN_第5张图片

 后续处理:

  • 1.删除背景框(9×16×16 );
  • 2.NMS去除重合度大的框中分数低的那个;
  • 3.取分数最大的K(Top-K)个框;

(四)ROI Pooling

        ROI是在FastRCNN中新引入的方法;

        每个目标的大小不同,因此映射在feature Map的形状也不同;Faster Rcnn为了使得后续的全连接层能够处理大小不同的特征,就把大小不同的特征统一按长宽方向切成相同个小区域,每个区域中包含若干个像素,每区域进行pooling,最后统一得到7*7的feature map,便于后续处理。

        如下:

两阶段目标检测详解--FasterRCNN_第6张图片

三、总结

        1、还是无法达到实时检测目标;

        2、获取region proposal,再对每个proposal分类计算量还是比较大。

你可能感兴趣的:(目标检测,目标检测)