神经网络学习笔记8——FPN理论及代码理解

系列文章目录

目标分割相关的RPN
B站讲解

文章目录

  • 系列文章目录
  • 前言
  • 一、金字塔结构
    • 图(a)
    • 图(b)
    • 图(c)
    • 图(d)
  • 二、FPN结构
    • 1、局部
    • 2、整体
  • 代码


前言

特征金字塔(Feature Pyramid Networks, FPN)的基本思想是通过构造一系列不同尺度的图像或特征图进行模型训练和测试,目的是提升检测算法对于不同尺寸检测目标的鲁棒性。但如果直接根据原始的定义进行FPN计算,会带来大额的计算开销。为了降低计算量,FPN采用一种多尺度特征融合的方法,能够在不大幅度增加计算量的前提下,显著提升特征表达的尺度鲁棒性。

一、金字塔结构

神经网络学习笔记8——FPN理论及代码理解_第1张图片

图(a)

先对原始图像缩放到不同尺度构造成图像金字塔,然后通过图像金字塔的每个尺度图片都提取不同的特征,有多少个尺度就需要预测多少次。
优点:直接从图片中得来,精度不错
缺点:尺度越多计算量越大,重复操作多,效率低,占用内存大

图(b)

通过backbone对原始图像进行卷积和池化操作,在之前的输出上获得新的不同尺寸的特征图feature map,在图像的特征空间中构造出金字塔。它认为浅层的网络更关注于细节信息,高层的网络更关注于语义信息,更有利于准确检测出目标,因此通过多次缩放后在最后的feature map上进行预测分类。

优点:速度快、内存占用少。
缺点:对于小目标特征容易丢失,仅关注深层网络中最后一层的特征,却忽略了其它层的特征。

图(c)

通过backbone对原始图像进行卷积和池化操作,在之前的输出上获得新的不同尺寸的特征图feature map,在图像的特征空间中构造出金字塔。但是它是同时利用低层特征和高层特征分别做预测,通过不同尺度的特征图做出不同的预测,从而减少小目标的丢失。

优点:在不同的层上面输出对应的目标,不需要经过所有的层才输出对应的目标,速度更快,又提高了算法的检测性能。

缺点:获得的特征不鲁棒,都是一些弱特征,容易受较浅的层的影响。

图(d)

FPN,通过backbone对原始图像进行卷积和池化操作,在之前的输出上获得新的不同尺寸的特征图feature map,在图像的特征空间中构造出金字塔。但不像图bc那样简单的缩放然后做预测,而是通过对不同尺度的特征图做融合后在进行预测。

简单概括来说就是:自下而上,自上而下,横向连接和卷积融合。

二、FPN结构

1、局部

因为不同层次的特征图特征的表达能力不同,浅层特征主要反映明暗、边缘等细节,深层特征则反映更丰富的整体结构。单独使用浅层特征是无法包含整体结构信息的,会减弱特征的表达能力。而深层特征本身就是由浅层特征构建起来的,所以包含了一定的浅层特征的特殊信息,如果再把深层特征融合到浅层特征中,就兼顾了部分细节和整体语义,使得融合后的特征会具有更为丰富的表达能力。
FPN就是采用这种思路并且实现,在特征金字塔上提取出若干层特征图,这些层本身构成了一个由浅到深的层次关系,再把深层特征逐级向浅层合并,就构成了一个新的特征金字塔,这个新金字塔的每一层都融合了浅层和深层的信息,分别应用新金字塔每一层的特征进行检测,就达到了检测不同尺度目标的目的。我们将这种构造特征的方法称为特征金字塔方法,这种方法利用了网络本身的层次结构,提供了基于原图的端到端的训练方法,能够在不显著增加计算开销和内存开销的情况下,实现多尺度目标检测。
神经网络学习笔记8——FPN理论及代码理解_第2张图片

  1. 在FPN中采用的不同尺度的特征图需要选取都是2倍关系,假设最底层的特征图大小为28x28,则上一层为14×14,最上层为7×7,最终得到左侧的原始金字塔。
  2. 左侧金字塔的每一个特征图都会对其执行 1x1 conv 的操作进行处理,调整backbone上不同特征图的channel,为了融合保证channel相同。
  3. 对高层次的特征图执行 2x up 操作也就是2倍上采样,比如对最上层7x7大小的特征图进行2倍上采样,得到14x14的特征图,从而保证与中间层特征图的尺寸大小相同。
  4. 通过处理后,最高层与中间层的特征图的shape完全相同,就可以进行add操作,比如最上层的7×7特征图进行2倍上采样,中间的14×14特征图进行1×1卷积调整channel,两者进行相加输出新的金字塔层,得出来的新特征层可以进行预测,而这一层又可以作为下一层的上采样基础。

2、整体

结合resnet模型来展示FPN整体结构,模型来自B站
神经网络学习笔记8——FPN理论及代码理解_第3张图片

  1. 以resnet50作为backbone,输出原始金字塔,从原图640×640×3开始输出到20×20×2048,得到C2,C3,C4,C5四个特征图。
  2. C2,C3,C4,C5四个特征图分别执行一个1×1×256卷积操作,执行这个卷积操作的原因就是为了在两两融合时保证channel相同,原论文中是使channel变为256。
  3. Upsample操作就是将上层的特征图进行2倍上采样,然后与下层的特征图进行融合,比如C5经过1×1×256卷积操作后输入Upsample进行2倍上采样,然后与经过1×1×256卷积操作的C4特征图进行融合。
  4. 经过融合后输出的结果还会经过一个3×3×256卷积操作,最终得到P2,P3,P4,P5。其中P5是C5连续执行1×1×256卷积操作和3×3×256卷积操作得到的,不需要融合。
  5. 在P5的基础上进行一个1×1×256步距为2的2倍下采样得到一个P6,而P6则是用于且只用于RPN部分,也就是说P23456可以用于RPN部分进行预测,Fast-RCNN只会用到P2345进行预测。

代码

ResNet+FPN实现+白嫖代码

你可能感兴趣的:(深度学习,神经网络,学习,计算机视觉)