FPN 论文理解

本文给出了对 FPN 网络的理解。

网络结构

  常见的特目标测网络中特征的利用方式主要有 4 种

*(a) 图像金字塔,即将图像做成不同的 scale,然后不同 scale 的图像生成对应的不同 scale 的特征。这种方法的缺点在于增加了时间成本。有些算法会在测试时候采用图像金字塔。
(b) 像 SPP net,Fast RCNN,Faster RCNN 是采用这种方式,即仅采用网络最后一层的特征。
© 像 SSD (Single Shot Detecto) 采用这种多尺度特征融合的方式,没有上采样过程,即从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。作者认为 SSD 算法中没有用到足够低层的特征(在 SSD 中,最低层的特征是 VGG 网络的 conv4_3),而在作者看来足够低层的特征对于检测小物体是很有帮助的。
© 本文作者是采用这种方式,顶层特征通过上采样和低层特征做融合,而且每层都是独立预测的。

检测网络的 4 种特征利用方式
图中,线越粗表示特征的语义程度越强。

  与以往的方式不同,FPN 网络在 pyramid 的所有 level 上都进行预测。
FPN 网络在 pyramid 的所有 level 上进行预测

  FPN 网络的内部结构
FPN 网络的内部结构

自底向上其实就是网络的前向过程 (论文中使用的是 ResNet )。在前向过程中,feature map 的大小在经过某些层后会改变,而在经过其他一些层的时候不会改变,作者将不改变 feature map 大小的层归为一个 stage,因此每次抽取的特征都是每个 stage 的最后一个层输出,这样就能构成特征金字塔。
自顶向下的过程采用上采样进行,而横向连接则是将上采样的结果和自底向上生成的相同大小的 feature map 进行融合。在融合之后还会再采用 3*3 的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应。并假设生成的 feature map 结果是 {P2,P3,P4,P5}\{P_2, P_3,P_4,P_5\},和原来自底向上的卷积结果 {C2,C3,C4,C5}\{C_2,C_3,C_4,C_5\} 一一对应。


Feature Pyramid Network for RPN

  FPN 可以用在 RPN 网络中,从而提高多尺度物体的检测性能。与 Faster R-CNN 中不同的是,FPN 在不同的 level 上使用 anchor,{P2,P3,P4,P5,P6}\{P_2, P_3,P_4,P_5, P_6\} 上的 anchor 尺寸分别是 {322,642,1282,2562,5122}\{32^2, 64^2, 128^2, 256^2, 512^2\}。可以看出,尺寸较大的 feature map 上的 anchor 的尺寸较小,适合用来检测小物体。
FPN 的 anchor 机制


*关于 anchor 尺寸选取的个人理解。*   RPN 网络的输入 feature map 在原图上的感受野是固定的,取决于此 featured map 相对于原图的尺寸缩小了多少倍。缩小的倍数越大,相邻感受野的中心距离越远(因为 feature map 尺寸越小,就需要用越少的感受野覆盖整张原图,因此相邻感受野的中心距离就会越远)。如果在尺寸较小的 feature map 上使用尺寸较小的 anchor 的话,相邻感受野的 anchor 可能会不重叠,从而漏掉物体。 ![anchor 尺寸较小](pic5.png)   但是在这种情况下选择较大尺寸 anchor 也会产生新的问题。当遇到小物体时,如果与大的 anchor 计算 IoU 时,IoU 可能较小,在生成样本时也会遇到问题。 ![anchor 尺寸较大时检测小物体](pic6.png)   可以看出,由于 feature map 尺寸较小,对应在原图上的感受野个数也较少,因而需要用较少的 anchor 来覆盖原图。若 feature map 的尺寸较大,则用来覆盖原图的感受野的个数较多,则每个 anchor 的尺寸就不用太大,因而可以更好地检测小物体。 ![较大 feature map](pic7.png)   可以看出,当 feature map 尺寸较大时,就可以用较小的 anchor 来覆盖原图,这样既不会出现 anchor 不相交从而漏检的情况,也不会造成小物体和 anchor 的 IoU 较小从而无法正确产生正样本的情况。

从以上分析可以得出结论,尺寸较大的 feature map 适合用来检测用来检测小物体,尺寸较小的 feature map 适合用来检测大物体。因此,FPN 的思想就是将各种尺寸的 feature map 结合起来,将大物体分配给小的 feature map 进行检测,将小物体分配给大 feature map 进行检测,从而提升检测性能。


总结

  在 FPN 中,anchor 机制跟 Faster R-CNN 有所不同。FPN 产生了上文所述的 {P2,P3,P4,P5,P6}\{P_2, P_3,P_4,P_5, P_6\} 不同尺寸的 feature map,在一个 feature map 上只使用一个尺度的 anchor(Faster R-CNN 中为 3 个尺度)。在尺寸较大的 feature map 中使用尺度较小的 anchor,能够更好地检测小物体。

FPN 中有多个尺度的 feature map,每一个 feature map 作为输入进入一个 RPN。因此,有多少 feature map,就有多少 RPN。最后,将这些 RPN 的输出进行综合,得到所有的 proposals。


参考文章

https://blog.csdn.net/u014380165/article/details/72890275


文章作者: taosean
文章链接: https://taosean.github.io/2018/04/26/FPN/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 taosean's 学习之旅