FPN:Feature Pyramid Networks for Object Detection

一种特征融合网络,能有效融合底层的特征和高层的语义信息,常用于目标检测。解决目标检测小尺寸物体检测问题

什么是特征金字塔网络(Feature Pyramid Network,FPN)?

  • FPN-20230408141534
  • 一种特征融合网络,能有效融合底层的特征和高层的语义信息,常用于目标检测。解决目标检测小尺寸物体检测问题
  • (a)多尺度训练多尺度预测:先把图片弄成不同尺寸的,然后再对每种尺寸的图片提取不同尺度的特征,再对每个尺度的特征都进行单独的预测,优点是不同尺度的特征都可以包含很丰富的语义信息,但是缺点就是时间成本太高
  • (b)最后一层预测:SPPnet,Fast R-CNN,Faster R-CNN 中使用的,就是在网络的最后一层的特征图上进行预测。优点是计算速度会比较快,但是缺点就是最后一层的特征图分辨率低,不能准确的包含物体的位置信息
  • (c)多尺度预测:在不同尺寸的特征图上都进行预测,如 SSD高层语义信息接触不了底层位置信息,特征融合不够彻底
  • (d)多尺度融合最高层预测:FPN 的做法,引入了高层特征向低层融合的路径,并在多个尺度进行预测

特征金字塔网络 FPN 的组成?

  • FPN-20230408141534-1
  • Bottom-up:将图片输入到 backbone ConvNet 中提取特征的过程中。Backbone 输出的 feature map 的尺寸有的是不变的,有的是成 2 倍的减小的。以 ResNet 为例,将卷积块 conv2, conv3, conv4, conv5 的输出定义为{C2 , C3, C4, C5} ,这些都是每个 stage 中最后一个残差块的输出,这些输出分别是原图的{ 1/4, 1/8, 1/16, 1/32 }倍
  • Top-Down:将高层得到的feature map进行上采样然后往下传递,这样做是因为高层的特征包含丰富的语义信息,经过top-down的传播就能使得这些语义信息传播到低层特征上,使得低层特征也包含丰富的语义信息。本文采样方法是最近邻上采样
  • Lateral connection:Bottom-up 的某个 stage 使用 1x1 卷积降低通道数,然后和 Top-Down 的某个 stage 的 2xup 特征融合,融合的目的为了消除上采样产生的混叠效应,混叠效应应该就是指上边提到的‘插值生成的图像灰度不连续,在灰度变化的地方可能出现明显的锯齿状

特征金字塔网络 FPN 应用于 RPN?

  • 将 FPN 和 RPN 结合起来,那 RPN 的输入就会变成多尺度的 feature map,那我们就需要在金字塔的每一层后边都接一个 RPN head (一个 3x3 卷积,两个 1x1 卷积) FPN-20230408141536
  • 在生成anchor的时候,因为输入是多尺度特征,就不需要再对每层都使用3种不同尺度的anchor了,所以只为每层设定一种尺寸的anchor,图中绿色的数字就代表每层anchor的size,但是每种尺寸还是会对应3种宽高比。所以总共会有15种anchors。此外,anchor的ground truth label和Faster R-CNN中的定义相同,即如果某个anchor和ground-truth box有最大的IoU,或者IoU大于0.7,那这个anchor就是正样本,如果IoU小于0.3,那就是负样本

特征金字塔网络 FPN 应用于 Fast RCNN?

  • 在Fast R-CNN 中有一个ROI Pooling层,它是使用region proposal的结果和特征图作为输入,得到的每个proposal对应的特征然后pooling,之后再分别用于分类结果和边框回归。之前Fast R-CNN使用的是单尺度的特征图,但是现在使用不同尺度的特征图,那么RoI需要在哪一个尺度的特征图上提取对应的特征呢?
  • 假设 FPN 产生了特征金字[P2, P3, P4, P5, P6],通过下列公式决定宽 w 和高 h 的 ROI 到底要从哪个 Pk 来切

    k=k0+log2(wh/224)k=\left\lfloor k_{0}+\log _{2}(\sqrt{w h} / 224)\right\rfloor

    • 其中 224 表示预训练 ImageNet 图片大小,k0 表示面积为 wxh=224x224 的 ROI 所在层级,论文将 k0 设置为 p4,如果 ROI 小于 224,比如说 122x122,则使用 k0-1=4-1=3 层特征池化
    • 这种做法很合理,大尺度的ROI要从低分辨率的feature map上切,有利于检测大目标,小尺度的ROI要从高分辨率的feature map上切,有利于检测小目标

特征金字塔网络 FPN 应用于 Faster RCNN?

  • FPN-20230408141537
  • 和普通的 Faster R-CNN 相同,为每个 RoI 提取特征之后,需要经过 RoI pooling 层将 RoI 的特征 resize 成相同大小的,这里是 resize 成 7x7 的,之后再连接两个 1024-d 的 FC layer,然后再并行的输入到两个 FC layer 中分别进行分类和回归,便得到最终的结果

FPN系列的演进方向?

  • 1)无融合: 直接利用不同stage的特征图分别负责不同scale大小物体的检测SSD使用该思想
  • 2)自上而下: 自上而下单向融合特征金字塔(Feature Pyramid Network,FPN),事实上仍然是当前物体检测模型的主流融合模式。如我们常见Faster RCNNMask RCNNYOLOv3、RetinaNet、Cascade RCNN等
  • 3)简单双向: PAN是第一个提出从下向上二次融合的模型
  • 4)复杂双向: EfficientDet是google出品,在FPN中寻找一个有效的block,然后重复叠加,这样就可以弹性的控制FPN的大小

Faster RCNN、Mask RCNN、YOLOv3、RetinaNet、Cascade RCNN使用FPN的区别?

  • 1)Faster/Mask/CascadeRCNN: 利用了C2-C6五个stage的特征,其中C6是从C5直接施加1x1/2的MaxPooling操作得到。FPN融合后得到P2-P6,其中P6直接等于C6,P5是先经过1x1Conv,再经过3x3Conv得到,P2-P4均是先经过1x1Conv,再融合上一层2xUpsample的特征,再经过3x3Conv得到-
  • 2)RetinaNet: 基本与Faster/Master/CascadeRCNN中的FPN一脉相承。只是利用的stage的特征略有差别,Faster/Master/CascadeRCNN利用了高分辨率低语义的C2,RetinaNet利用了更低分辨率更高语义的C7。其他都是细微的差别
  • 3)YOLOv3: FPN与上述两个有比较大的区别。首先,YOLOv3中的FPN只利用到了C3-C5三个stage的特征;其次,从C5征到P5特征,会先经过5层Conv,然后再经过一层3x3Conv;最后,C3-C4到P3-P4特征,上一层特征会先经过1x1Conv+2xUpsample,然后先与本层特征concatenate,再经过5层Conv,之后经过一层3x3Conv