目标检测组件之FPN
论文:https://arxiv.org/abs/1612.03144
FPN网络可以说是一个非常经典的组件,twostage网络中一般都会加上去,能够有效的提升对小目标的检测能力,cascade_rcnn/faster_rcnn+big backbone+fpn+dcn的经典组合经久不衰。
这篇博客就结合mmdetection的fpn模块来简单介绍一下FPN网络


这个是目标检测常用结构,输入一张图像,经过backbone提取特征,最后输出一张featuremap,以fasterrcnn举例,featuremap直接输入rpn得到proposals,proposals在featuremap上提取proposal feature然后进行box的分类和位置的回归。
为了增加多尺度能力,在上面结构上有很多变种,第一个就是下图的特征图像金字塔(Featurized image pyramid ),每一层做预测,缺点是计算量太大。
本文提出的FPN:

接下来我会从mmdetection的fpn模块实现具体介绍:

注意在mmdection的backbone中,输出是一个list,list里面是每个block的结果。这样的好处是方便FPN计算
接下来我们再看FPN是如何实现的:
在mmdection中,我们以twostage为例:
在
class TwoStageDetector(BaseDetector)
中。
Backbone输出的结果直接进入neck中,这里的neck就可以是fpn
def extract_feat(self, img):
"""Directly extract features from the backbone+neck."""
x = self.backbone(img)
if self.with_neck:
x = self.neck(x) #注意,这个neck就是FPN
return x
我们再看FPN具体是怎么做的:
在necks/fpn,py中可以直接找到class FPN(nn.Module)
在介绍FPN代码之前我还是先贴一下FPN的结构图,这个是我在这里找到的灵魂绘图,非常的形象。对于backbone来说,已经完成了down-top过程,FPN要做的其实就是top-down。

首先是FPN的init阶段
for i in range(self.start_level, self.backbone_end_level):
l_conv = ConvModule(
in_channels[i],
out_channels,
1,
conv_cfg=conv_cfg,
norm_cfg=norm_cfg if

本文结合mmdetection的fpn模块介绍FPN网络。FPN是目标检测经典组件,能提升小目标检测能力,如cascade_rcnn等经典组合常用。文中介绍目标检测常用结构及变种,还从mmdetection实现角度,阐述FPN的初始化和前向过程,最后输出进入RPN。
最低0.47元/天 解锁文章
696





