• fpn(feature-Pyramid-network)学习笔记


    FPN(特征金字塔网络)学习笔记

    在物体检测里面,有限计算量情况下,网络的深度(对应到感受野)与 stride 通常是一对矛盾的东西,常用的网络结构对应的 stride 一般会比较大(如 32),而图像中的小物体甚至会小于 stride 的大小,造成的结果就是小物体的检测性能急剧下降

    Overview

    • fpn的灵感来源于
      1. 上图中的特征图片金字塔:即使用多尺度进行训练,如上图(a)所示:使用同一种图片的不同尺度进行训练并进行分别预测。这样做的缺点是时间和计算量巨大
      2. 如上图(c)中SSD的训练:让不同层学习相同的语义信息。但是对于卷积神经网络不同层的语义信息不同。低层次的具有较高的分辨率即location较为明确,高层次的语义信息更高
    • 因此fpn对于小物体检测效果更好

    Detail

    • fpn采用Bottom-up pathway,Top-down pathway 和 lateral connections连接的方式
    • 其中2x是因为主干网络采用resnet将其降为到与下一层相连接。1×1 conv是为了减少通道数使得能够与上层下来的进行向加。
    • 更为详细的网络结构如下图:
    1. 网络结构代码:
    # Bottom-up pathway
    c1 = self.conv1(image)
    c2 = self.conv2(c1)
    c3 = self.conv3(c2)
    c4 = self.conv4(c3)
    c5 = self.conv5(c4)
    
    # Top-down pathway and lateral connections
    p5 = self.lateral_c5(c5)
    p4 = self.lateral_c4(c4) + F.interpolate(input=p5, size=(c4.shape[2], c4.shape[3]), mode='nearest')
    p3 = self.lateral_c3(c3) + F.interpolate(input=p4, size=(c3.shape[2], c3.shape[3]), mode='nearest')
    p2 = self.lateral_c2(c2) + F.interpolate(input=p3, size=(c2.shape[2], c2.shape[3]), mode='nearest')
    
    # Reduce the aliasing effect
    p4 = self.dealiasing_p4(p4)
    p3 = self.dealiasing_p3(p3)
    p2 = self.dealiasing_p2(p2)
    
    p6 = F.max_pool2d(input=p5, kernel_size=2)
    
    1. 网络结构图:

    Question&Answer?

    1. 为什么 FPN 相比去掉深层特征 upsample(bottom-up pyramid) 对于小物体检测提升明显?
    • 答案:对于小物体,一方面我们需要高分辨率的 feature map 更多关注小区域信息,另一方面,如图中的挎包一样,需要更全局的信息更准确判断挎包的存在及位置

    Reference

  • 相关阅读:
    c学习第3天
    [BZOJ2124] 等差子序列
    CF710F String Set Queries
    Cow Hopscotch (dp+树状数组优化)
    CF528D Fuzzy Search (bitset)
    Gym 101667L Vacation Plans (dp)
    Codeforces 432D Prefixes and Suffixes (kmp+dp)
    [题解]BZOJ2115 XOR
    洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
    从中国矢量图筛选出江苏省行政区划图
  • 原文地址:https://www.cnblogs.com/zranguai/p/14446321.html
Copyright © 2020-2023  润新知