目标检测组件之FPN介绍

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

目标检测组件之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 
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值