1.论文启发点详细内容(文+图)
1.1RPN(RegionProposal Network)区域候选网络
RPN的本质是 “ 基于滑窗的无类别obejct检测器 ”。
对于提取候选框最常用的 SelectiveSearch 方法,提取一副图像大概需要2s的时间。(相当于在原本图像上进行滑块操作)
改进的 EdgeBoxes 算法将效率提高到了0.2s(但还是在原本图像上操作)
RPN简单来说就是:假设输入一张图片,经过前面骨干网络的一系列的卷积或者池化之后之后,得到一个尺寸 m ∗ n的特征图(暂且不说通道),对应将原图划分为 m ∗ n个区域,原图的每个区域的中心由这个特征图上的一个像素点坐标表示。通过anchor机制,可以在每个像素点对应原图的区域生成k个可能存在目标的候选框(称为anchor box),如上图所示(k=9)。
RPN就是用来判断每个像素点对应的k个区域是不是包含目标,如果包含(那么先根据输出的坐标偏置修正box位置)则输给后面的RCNN做进一步判断。(意思就是要从m_n_9个候选框中做筛选,提取proposals)
RPN 的结构如下图所示,backbone 输出的特征图经过一个 3 ∗ 3 卷积之后分别进入了不同的分支,对应不同的 1 ∗ 1卷积。第一个卷积为定位层,输出 anchor 的4个坐标偏移。第二个卷积为分类层,输出anchor的前后景概率。
1.1.1RPN详细结构
看完了rpn的大致结构,下面来看rpn的详细过程。主要看一下,rpn是如何生成以及处理anchor的。下图表示了rpn网络的详细结构。
第一步,生成基础 anchor(base_anchor),基础 anchor 的数目 = 长宽比的数目 * anchor 的缩放比例数目, 即 =。这里,设置了3种长宽比(1:1, 1:2,2:1)和3种缩放尺度(8, 16, 32),因此 anchor_num = 9. 下图表示了其中一个位置对应的9个尺寸的 anchor。
第二步,根据 base_anchor,对特征图上的每一个像素,都会以它为中心生成9种不同尺寸的边界框,所以总共生成 60 × 40 × 9 =21600 个anchor。需要注意的是,所有生成的 anchor 都是相对于原图的。
牢记:特征图上的每个点生成一个Anchors,Anchors 可以理解成9个不同的框(框的属性是长宽了,再进一步是四个点的坐标)。这个框的数据(框的左上角坐标(x0,y0),右下角坐标(x1,y1))这四个值都是对应于原图的。下面这个就是原图,红色点就是特征图上的点对应于原图的位置。每一个位置使用 9 个锚点,每个位置会生成 2×9 个目标分数和 4×9 个坐标分数。显然,通过一个中心定义9个不同的框,就是为实现多尺度这个想法。当然这样做获得检测框很不准确,后面会做2次 bounding box regression 修正检测框位置。
第三步,anchor的筛选。首先将定位层输出的坐标偏移应用到所有生成的 anchor,然后将所有 anchor 按照 前景概率/得分 从高到低进行排序。只取前 pre_nms_num 个 anchor(训练阶段),最后 anchor 通过 nms 筛选得到 post_nms_num(训练阶段)个anchor,也称作ROI。
1.2ROI 通常指的是感兴趣区域(Region of Interest)
ROI是Region of interest的简写,指的是faster rcnn结构中,经过rpn层后,产生的proposal对应的box框。
ROIs Pooling顾名思义,是pooling层的一种,而且是针对ROIs的pooling。整个 ROI 的过程,就是将这些 proposal 抠出来的过程,得到大小统一的 feature map。
ROI Pooling 该层有两个输入:
- 从具有多个卷积核池化的深度网络中获得的固定大小的feature maps;
- 一个表示所有ROI的N*5的矩阵,其中N表示ROI的数目。一列表示图像index,其余四列表示其余的左上角和右下角坐标;
如图所示,我们先把roi中的坐标映射到feature map上,映射规则比较简单,就是把各个坐标除以输入图片与feature map的大小的比值,得到了feature map上的box坐标后,我们使用pooling得到输出;由于输入的图片大小不一,所以这里我们使用的spp pooling,spp pooling在pooling的过程中需要计算pooling后的结果对应的两个像素点反映社到feature map上所占的范围,然后在那个范围中进行取max或者取average。
1.2.1ROI pooling具体操作如下:
- 根据输入image,将ROI映射到feature map对应位置;
- 将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同);
- 对每个sections进行max pooling操作;
这样我们就可以从不同大小的方框得到固定大小的相应 的feature maps。值得一提的是,输出的feature maps的大小不取决于ROI和卷积feature maps大小。ROI pooling 最大的好处就在于极大地提高了处理速度。
1.2.2ROI pooling example
我们有一个 8 ∗ 8 大小的feature map,一个ROI,以及输出大小为 2∗2.
输入的固定大小的feature map
region proposal 投影之后位置(左上角,右下角坐标): ( 0 , 3 ) , ( 7 , 8 ) 。如下图:
将其划分为(22)个sections(因为输出大小为22),我们可以得到:
对每个section做max pooling,可以得到输出:
注意:在此案例中region proposals 是57大小的,在pooling之后需要得到22的,所以在57的特征图划分成22的时候不是等分的,行是5/2,第一行得到2,剩下的那一行是3,列是7/2,第一列得到3,剩下那一列是4。
1.3FPN特征金字塔
在最后一层进行预测的缺点是对小目标的检测效果不好。利用前几层的信息进行多尺度预测的缺点是低层的语义信息不够。特征金字塔处理好物体检测中的多尺度变化问题——特征金字塔网络FPN——2017~2021
2.论文摘要
无
3.与启发点相关内容
RPN博客
https://blog.csdn.net/fenglepeng/article/details/117898968
ROI博客
https://www.pianshen.com/article/78972689360/
FPN博客