FPN 论文阅读小结

论文链接: https://arxiv.org/abs/1612.03144
pytorch实现代码: https://github.com/YiJiangYue/FPN

motivation

FPN是针对物体检测中多尺度难题提出的一种解决方法,结合高层的语义信息低层高分辨率的特征信息,在融合后的不同特征层检测尺度不一样的物体,提高了物体检测的准确率,尤其是小物体的检测

Approach

FPN 论文阅读小结_第1张图片
三步走:(FPN结合ResNet为例)

  1. bottom-up: Resnet的5个stage: C1, C2, C3, C4, C5,每个stage的scale是两倍关系。
  2. upsample: 自上向下的上采样,上采样建议用 ‘bilinear’,转置卷积设置的不好会出现棋盘效应。
  3. lateral connection: Ck经过1x1卷积(减少通道数)后,与上采样的特征相加,注意这里是add,不是concat

横向连接后,将新的融合后的特征经过一个3x3的卷积(论文里说是为了消除上采样的混叠效应),会生成P2,P3,P4,P5, 在Pk上检测物体。具体编程细节可以参考上面的代码实现。

与Faster RCNN结合

主要是在RPN 网络加入FPN模块。先来看一下Faster RCNN+ResNet 的网络结构:
FPN 论文阅读小结_第2张图片
原始RPN是以ResNet的stage4特征图作为输入,结合了FPN的RPN如下图所示:
FPN 论文阅读小结_第3张图片
在不同尺度下的P2,P3,P4,P5,P6上分别检测物体,没有FPN的RPN输入特征图中每个点预测9个不同scale,不同比例的anchors,加了FPN后,每个level的feature P2,P3,P4,P5,P6只对应一种scale,分别对应的anchor尺度为{32^2, 64^2, 128^2, 256^2, 512^2 },使用三种比例{1:2, 1:1, 2:1}

Fast RCNN的输入是ROI pooling层的输出,ROI pooling层用那一层的feature是个问题。 作者提出不同尺度的ROI使用不同特征层作为ROI pooling层的输入,大尺度ROI就用后面一些的金字塔层,比如P5;小尺度ROI就用前面一点的特征层,比如P4。那怎么判断ROI改用那个层的输出呢?这里作者定义了一个系数Pk,其定义为:
在这里插入图片描述
加了FPN的Faster RCNN结构可能如下,但是,论文中提到设置的k0=4,所以可能p5 没有用到,如果设置k0=5的话,示意图如下。
FPN 论文阅读小结_第4张图片

参考:

深度学习网络 | FPN和fast rcnn及RPN网络是如何结合的细节

你可能感兴趣的:(深度学习(图像))