Introduce
Faster RCNN 组成
(1)基础特征提取网络(2)RPN (Region Proposal Network) (3)Fast-RCNN
共享:RPN和Fast-RCNN共享特征提取卷积层
思路:提取proposal + 分类
Faster RCNN 和 SPPNet
- 不同于SPP层的是,没有多尺度的pooling,只有一个尺度的pooling(可以理解为特殊的SPP层)
- 其次引入了多任务损失函数,用于同时计算bbox回归和分类的损失。
Net
我们先整体的介绍下上图中各层主要的功能
- Conv layers提取特征图:
提取图片的特征
- 作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取input image的feature maps,该feature maps会用于后续的RPN层和全连接层
-
RPN(Region Proposal Networks):
RPN网络主要用于生成 region proposals
-
首先生成一堆 Anchor box,对其进行裁剪过滤后通过softmax判断anchors属于前景(foreground)或者后景(background),即是物体or不是物体,所以这是一个二分类;同时,另一分支bounding box regression修正anchor box,形成较精确的proposal(注:这里的较精确是相对于后面全连接层的再一次box regression而言)
-
RPN网络为CNN后面接一个3*3的卷积层,再接两个1*1的卷积层(原文称这两个卷积层的关系为sibling),其中一个是用来给 softmax 层进行分类,另一个用于给候选区域精确定位。
-
代替之前的 search selective
-
-
Roi Pooling:
该层利用RPN生成的proposals和VGG16最后一层得到的feature map,得到固定大小的proposal feature map,进入到后面可利用全连接操作来进行目标识别和定位
- 和Fast R-CNN一样,将不同大小的输入转换为固定长度的输出,输入输出和Fast R-CNN中RoI pooling一样。
- Classifier:
输出候选区域所属的类,和候选区域在图像中的精确位置。
- 会将Roi Pooling层形成固定大小的feature map进行全连接操作,利用Softmax进行具体类别的分类,
- 利用L1 Loss完成 bounding box regression 回归操作获得物体的精确位置.
Anchor
- 可以理解为一些预设大小的框
- anchor 种类 k = 9
分别是三个面积尺寸(128 × 128,256 × 256,512 × 512)
三种不同的长宽比例(1:1,1:2,2:1) - 每个anchor对应原图的一个区域,我们要学习这个区域的分类(2分类前景/背景)和框回归微调(4个x,y,w,h)
- 两个Loss,每个anchor分类有2个输出,回归有4个输出
一共k个anchor,即一共2k和分类score和4k各回归坐标
Multi-task Loss Function
多任务损失函数(Multi-task Loss Function)
- Softmax Classification Loss
- Bounding Box Regression Loss
Anchors的生成规则
-
经过Conv layers后,图片大小变成了原来的1/16
-
在生成Anchors时,我们先定义一个base_anchor,大小为1616的box
(因为特征图(6040)上的一个点,可以对应到原图(1000600)上一个1616大小的区域) -
源码中转化为[0,0,15,15]的数组,参数ratios=[0.5, 1, 2],scales=[8, 16, 32]
-
先看[0,0,15,15],面积保持不变,长、宽比分别为[0.5, 1, 2] 产生的Anchors box
-
经过scales变化,即长、宽分别均为 (168=128)、(1616=256)、(16*32=512),对应anchor box如图
-
综合以上两种变换,最后生成9个Anchor box
-
最终base_anchor=[0,0,15,15]生成的9个Anchor box坐标如下:
[[ -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.]]
具体计算过程见 Pytorch - Anchor
- 特征图大小为6040,所以会一共生成6040*9=21600个Anchor box
源码中,通过width:(060)*16,height(040)*16建立shift偏移量数组,再和base_ancho基准坐标数组累加,得到特征图上所有像素对应的Anchors的坐标值,是一个[216000,4]的数组
这21600 个anchor怎么筛选呢??这就用到下面的 RPN 了
RPN
RPN
- 是 Faster R-CNN与Fast R-CNN最大的区别
- 可以理解为一种全卷积网络,该网络可以进行end-to-end的训练
- 最终目的是为了推荐候选区域