目标检测系列5——Faster R-CNN(RPN,anchors)

Faster R-CNN

  • 1 Faster R-CNN
    • 1.1 简介
    • 1.2 结构
      • 1.2.1 主干特征提取网络
      • 1.2.2 建议框
      • 1.2.3 RoI pooling
      • 1.2.4 Classification
    • 1.3 特点
    • 1.4 训练
    • 1.5 结果
  • 2 代码
  • 3 总结

1 Faster R-CNN

1.1 简介

faster rcnn是何凯明等大神在2015年提出目标检测算法,该算法在2015年的ILSVRV和COCO竞赛中获得多项第一。该算法在fast rcnn基础上提出了RPN候选框生成算法,使得目标检测速度大大提高。

在Fast R-CNN还存在着瓶颈问题:Selective Search(选择性搜索)。要找出所有的候选框,那我们有没有一个更加高效的方法来求出这些候选框呢?

目标检测系列5——Faster R-CNN(RPN,anchors)_第1张图片

论文地址:
https://arxiv.org/abs/1506.01497

1.2 结构

Faster R-CNN可以简单地看成是区域生成网络+Fast R-CNN的模型,用区域生成网络(Region Proposal Network,简称RPN)来代替Fast R-CNN中的选择性搜索方法,整个系统是一个单个的,统一的目标检测网络。RPN模块告诉Fast R-CNN模块在哪里寻找。结构如下:
目标检测系列5——Faster R-CNN(RPN,anchors)_第2张图片
目标检测系列5——Faster R-CNN(RPN,anchors)_第3张图片
目标检测系列5——Faster R-CNN(RPN,anchors)_第4张图片
上面图的18指9个anchors,再加2个分类结果,anchors是前景还是背景。
36指9个anchors,再加4个框的位置

Faster R-CNN步骤:

(1)首先向CNN网络(VGG-16)输入图片,Faster RCNN使用一组基础的conv+relu+pooling层提取feature map。该feature map被共享用于后续RPN层和全连接层

(2)Region Proposal Networks。RPN网络用于生成region proposals,faster rcnn中称之为anchor bbox(anchor)

(3)就是将一个个不同形状的候选区域(比如3446,4836)通过ROI算法都固定为同样大小,RoI pooling layer映射到一个固定长度的特征向量,每个特征会输入到一系列全连接层,

(4)进行分类和回归,这个分为两部分,一个是分类,比如20类,就需要加个背景类分成21类,另一个是框回归bounding box regressor,回归框的位置。

对比下面的Fast R-CNN
Fast R-CNN步骤:
(1)首先和R-CNN一样,使用选择性搜索算法得到2000个候选框;
(2)将整个图片输入到一个基础卷积网络,得到整张图的feature map;
(3)将选择性搜索算法的结果region proposal(RoI)被池化到固定大小的feature map中;就是将一个个不同形状的候选区域(比如3446,4836)通过ROI算法都固定为同样大小,RoI pooling layer映射到一个固定长度的特征向量,每个特征会输入到一系列全连接层,得到一个RoI特征向量(此步骤是对每一个候选区域都会进行同样的操作)
(4)进行分类和回归,这个分为两部分,一个是分类,比如20类,就需要加个背景类分成21类,另一个是框回归bounding box regressor,回归框的位置。

1.2.1 主干特征提取网络

通过常用的特征提取网络vgg\resnet等提取特征,得到特征图。
有很多不同的主干提取网络,得到的特征图大小也不一样,vgg16是经过4次池化得到的特征图变成原来的1/16,

1.2.2 建议框

得到最后的回归框需要经过3个步骤,先验框anchors,框回归,建议框。
(1)其实RPN最终就是在原图尺度上,设置了密密麻麻的候选Anchor。然后用cnn去判断哪些Anchor是里面有目标的positive anchor,哪些是没目标的negative anchor。所以,仅仅是个二分类而已!每个位置都是9个框,所以得到的结果就是特征图尺寸表示位置信息,特征图通道表示9个anchors,38389,前面3838代表这么多个位置。
(2)bbox reg回归positive anchors ,bounding box regression,问题是在边界回归的时候,每个anchors包括4个位置信息,x,y,w,h,所以就是4
9=36个通道(回归特征图)。得到的结果就是特征图尺寸表示位置信息,特征图通道表示9个anchors和4个回归框参数,383836,前面38*38代表这么多个位置,36表示9个anchors,每个anchors有4个位置信息。
(3)Proposal Layer生成proposals,
这一层的输入包括3个部分:
positive vs negative anchors分类器结果rpn_cls_prob_reshape,对应的bbox reg的 [公式] 变换量rpn_bbox_pred,以及im_info;另外还有参数feat_stride=16
首先解释im_info。对于一副任意大小PxQ图像,传入Faster RCNN前首先reshape到固定MxN,im_info=[M, N, scale_factor]则保存了此次缩放的所有信息。然后经过Conv Layers,经过4次pooling变为WxH=(M/16)x(N/16)大小,其中feature_stride=16则保存了该信息,用于计算anchor偏移量。

框回归的原理

1.2.3 RoI pooling

这个就是将不同输入大小的候选框输出为固定大小的尺度,看Fast R-CNN
而RoI Pooling层则负责收集proposal,并计算出proposal feature maps,送入后续网络。从图2中可以看到Rol pooling层有2个输入:
(1)原始的feature maps
(2)RPN输出的proposal boxes(大小各不相同)

RoI pooling层的输出是7x7=49大小的proposal feature maps。

1.2.4 Classification

Classification部分利用已经获得的proposal feature maps,通过full connect层与softmax计算每个proposal具体属于那个类别(如人,车,电视等),输出cls_prob概率向量;同时再次利用bounding box regression获得每个proposal的位置偏移量bbox_pred,用于回归更加精确的目标检测框。Classification部分网络结构。
目标检测系列5——Faster R-CNN(RPN,anchors)_第5张图片
从RoI Pooling获取到7x7=49大小的proposal feature maps后,送入后续网络,可以看到做了如下2件事:

(1)通过全连接和softmax对proposals进行分类,这实际上已经是识别的范畴了
(2)再次对proposals进行bounding box regression,获取更高精度的rect box

1.3 特点

(1)RPN区域生成网络(Region Proposal Network,简称RPN)
作用:区域提议网络(RPN)以任意大小的图像作为输入,输出一组矩形的目标提议,每个提议都有一个目标得分
目标检测系列5——Faster R-CNN(RPN,anchors)_第6张图片

目标检测系列5——Faster R-CNN(RPN,anchors)_第7张图片

目标检测系列5——Faster R-CNN(RPN,anchors)_第8张图片

目标检测系列5——Faster R-CNN(RPN,anchors)_第9张图片

目标检测系列5——Faster R-CNN(RPN,anchors)_第10张图片
上面对应每个点有9个框

(2)小目标检测不行

目标检测系列5——Faster R-CNN(RPN,anchors)_第11张图片

参考下面两篇文章:
https://zhuanlan.zhihu.com/p/31426458

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

1.4 训练

Faster R-CNN的训练分为两部分,即两个网络的训练。

目标检测系列5——Faster R-CNN(RPN,anchors)_第12张图片

目标检测系列5——Faster R-CNN(RPN,anchors)_第13张图片

目标检测系列5——Faster R-CNN(RPN,anchors)_第14张图片
目标检测系列5——Faster R-CNN(RPN,anchors)_第15张图片

目标检测系列5——Faster R-CNN(RPN,anchors)_第16张图片

细节:有些RPN建议框和其他建议框大量重叠,为了减少冗余,我们基于建议区域的cls得分,对其采用非极大值抑制(non-maximum suppression, NMS)。我们固定对NMS的IoU阈值为0.7,这样每个图像只剩2k个建议区域。

1.5 结果

目标检测系列5——Faster R-CNN(RPN,anchors)_第17张图片

目标检测系列5——Faster R-CNN(RPN,anchors)_第18张图片

目标检测系列5——Faster R-CNN(RPN,anchors)_第19张图片

2 代码

一共有两套代码:
(1)https://blog.csdn.net/xiaotiig/article/details/117673634这套全部实验理解了,比较好
(2)https://blog.csdn.net/xiaotiig/article/details/117256649
这套代码可以运行,但是没有进行代码阅读和注释。

3 总结

(1)Overfeat 使用滑动窗口进行目标检测,过于耗时。
(2)R-CNN针对这个缺点开始使用SS选择性搜索算法进行提取2000个候选框,对2000候选框进行resize成同样大小,进行卷积和特征提取分类,最后使用SVM分类器。
(3)SPPNet针对R-CNN的每个候选框都进行resize成同样大小,进行卷积和特征提取分类的缺点,这样耗时巨大,提出了SPP金字塔结构,就只对整张图象先进行提取2000个候选框,但是这里不对2000候选框进行resize,而是直接对整张图像进行卷积和特征提取,这一个步骤将相当于把之前的2000次计算变成了1次计算了,然后根据对应关系,找出2000个候选框在特征图上的位置,然后通过SPP结构转换为统一大小输出给fc全连接层。
(4)Fast R-CNN对SPP结构进行了改进,spp结构也需要大量耗时,Fast R-CNN就将SPP结构替换为了ROI结构,同时将SVM分类器替换为softmax,进行多损失回归。
(5)Faster R-CNN主要解决之前的SS选择性搜索算法进行提取2000个候选框的问题,这个也是耗时较大,Faster R-CNN不用ss选择性搜索算法了,直接就先卷积得到特征图,然后用区域生成网络(Region Proposal Network,简称RPN)来代替Fast R-CNN中的选择性搜索方法。

参考资料:

1、这个特别好 https://blog.csdn.net/happyday_d/article/details/85870358
2、faster rcnn概述讲解 https://zhuanlan.zhihu.com/p/31426458
3、tensorflow2.0实现faster rcnn源码https://blog.csdn.net/qq_36758914/article/details/105886811
4、tensorflow1.13和keras2.4实现faster rcnn
https://www.bilibili.com/video/BV1U7411T72r?p=14
5、tensorflow2.0实现faster rcnn
https://www.bilibili.com/video/BV15V411Y7Qy?p=3
巨巨好
对提供上面资料的作者表示感谢

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