rpn和roi align是two-stage detector中比较关键的两个操作,这两个操作将two-stage detector中的两个stage连接起来,变成end-to-end(端到端)的网络,同时也给整个检测方法的性能带来提升。rpn为roi align提供高质量的候选框,即proposal,关系如图1所示:
下面详细说明一下各个过程,并且配合了代码的说明,其中代码来自facebook的detectron2,其中相关参数的配置文件可以参考detectron2/config/defaults.py
一、RPN
rpn全称是region proposal network,作用是为第二阶段提供高质量的目标候选框,如图1所示,包括了anchor generator、anchor target generator、rpn loss、proposal generator几个关键的步骤,下面分别详细说明。
1,anchor generator
Anchor是根据scale和ratio预先设定的,这些参数在全特征图中共享,如下图所示。左边表示使用stride=16的feature map作为目标检测的特征图,对于输入大小为800*600的图像,该特征图大小为50*38。其中anchor的scale包括为(8,16,32),ratio参数包括(0.5,1,2),故产生9种anchor;右图表示对于50*38大小的特征图,共产生17100个anchor,平铺到原图时,有一部分框会超出图像边界。
步骤及代码实现:
detectron2/modeling/anchor_generator.py:
grid_anchors(self, grid_sizes)
1)根据scale和ratio产生,预先生成n种anchor,这n种anchor所在坐标系为以anchor中心为原点的图像坐标系。
generate_cell_anchors(self, sizes=(32, 64, 128, 256, 512), aspect_ratios=(0.5, 1, 2))
2)在特征图中的每个坐标点处,计算anchor中心与该坐标的偏移
_create_grid_offsets(size, stride, offset, device)
3)通过anchor与生成的相对偏移,计算每张特征图中的所有anchor
anchors.append((shifts.view(-1, 1, 4) + base_anchors.view(1, -1