深度学习:FPN网络

FPN的作用?

答: 以往的ROI映射到feature map都在作用在最后一层,这种映射是直接将ROI除以相应的stride来获取feature map上对应的特征。对于小目标来说,ROI映射到feature map很可能没有了。那我用浅层一点好不好:不好,因为深层的特征含有比较高级的语义信息,浅层的对于准确定位比较有用,只用浅层的就发挥不了深度网络的强大能力了。FPN就是一种 结合多层级特征来解决多尺度问题的特征金字塔模型


FPN长什么样?

自底向上 :黄色部分就是ResNet前项传播的结构,不多逼逼

自顶向下 :将顶层特征做两倍上采样,然后和其对应的前一层特征做element-wise的加法。注意,前一层特征在加法之前,要先采用1×1×256的卷积,使得不同层的通道数都相同,以便后续前后层特征的相加。


Faster R-CNN的数据流

Faster R-CNN:RPN生成ROI,创建特征图上对应的特征片,传给ROI pooling以resize到相同的尺度。

FPN + Faster R-CNN的数据流

FPN + Faster R-CNN:RPN生成ROI,根据其尺寸选择最合适的尺度的特征层以生成特征片,传给ROI pooling以resize到相同的尺度。

概览:

①RPN:固定每种特征图上只用一个尺度的anchor,每层的anchor对应3种长宽比。这样对于每一个ROI,就有12个anchor。RPN在特征图上应用3×3卷积,然后再分别采用1×1卷积进行分类(前景or背景)和回归,得到ROI。

②对于不同尺度的ROI,选择合适的特征层做ROI pooling。即小目标采用浅一点的特征层,大目标采用深一点的特征层。(对每一个ROI提取对应特征图上的特征,组成一个大的特征列表,然后进行ROI pooling)

③对这个特征列表先接两个1024通道数的卷积层(也就是全连接层,卷积核的大小等于ROI pooling后的大小),再分别送入分类层和回归层得到最终的结果。

参考

编辑于 2020-03-25 01:58