【论文阅读】YOLO系列相关论文:FPN和SPP Net

FPN通过自底向上和自顶向下的特征融合解决多尺度目标检测问题,提高了小物体检测性能,而SPP-Net利用空间金字塔池化实现固定长度的特征向量,加快运算速度。两者都对传统CNN结构进行了优化,提升了模型的效率和准确性。

FPN

论文: Feature Pyramid Networks for Object Detection

https://arxiv.org/abs/1612.03144

代码:GitHub - Tianxiaomo/pytorch-YOLOv4: PyTorch ,ONNX and TensorRT implementation of YOLOv4

作者:Tsung-Yi Lin, Piotr Dollár, Ross Girshick, Kaiming He, Bharath Hariharan, Serge Belongie

发布时间 :CVPR, 2016

主要贡献

  • 图像的低层的特征语义信息比较少,是目标位置准确
  • 高层的特征语义信息比较丰富,但是目标位置比较粗略
  • 对不同尺度的目标采取分治
  • 多尺度特征融合
  • 基本不增加原有模型计算量

模型的主要改进

  • 解决了多尺度问题
  • 通过简单的网络连接改变,在基本不增加原有模型计算量的情况下,大幅度提升了小物体检测的性能。
  • 通过高层特征进行上采样和低层特征进行自顶向下的连接,而且每一层都会进行预测
    • 自下而上,下采样,将特征图的逐渐缩小,并且将定位特征传递,增加检测能力
    • 自上而下,上采样,将更抽象、语义特征更强的高层特征图信息向下传递,有更好的感受野,增强了分割能力
    • 横向连接,融合不同层特征并且单独进行预测,增加对不同尺度的鲁棒性,效果好

思路的提出

1、通常的CNN网络结构

  • 自底向上卷积,然后使用最后一层特征图进行预测,像SPP-Net,Fast R-CNN,Faster R-CNN就是采用这种方式,即仅采用网络最后一层的特征。
  • 网络的缺点就是会造成检测小物体的性能急剧下降

2、图片金字塔生成特征金字塔

  • 单层检测会丢失细节特征
  • 利用图像的各个尺度进行训练和测试,将图像做成不同的scale,然后不同scale的图像生成对应的不同scale的特征

  • 将图片缩放成多个比例,每个比例单独提取特征图进行预测,可以得到比较理想的结果,但是比较耗时,不太适合运用到实际当中
  • 有些算法仅会在测试时候采用图像金字塔

3、多尺度特征融合的方式

  • SSD就是采用这种多尺度特征融合的方式,没有上采样过程,即从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。
  • 作者认为SSD算法中没有用到足够低层的特征,而在作者看来足够低层的特征对于检测小物体是很有帮助的。

4、FPN(Feature Pyramid Networks)

  • FPN主要解决的是物体检测中的多尺度问题,通过简单的网络连接改变,在基本不增加原有模型计算量的情况下,大幅度提升了小物体检测的性能。
  • 通过高层特征进行上采样和低层特征进行自顶向下的连接,而且每一层都会进行预测。

5、top-down pyramid w/o lateral

  • 有自顶向下的过程,但是没有横向连接,即向下过程没有融合原来的特征
  • 实验发现这样效果比原始的网络效果更差

6、only finest nevel

  • 带有跳层连接的网络结构在预测的时候是在finest level(自顶向下的最后一层)进行的,简单讲就是经过多次上采样并融合特征到最后一步,拿最后一步生成的特征做预测,跟FPN的区别是它仅在最后一层预测。

FPN网络详解

  • 作者的主网络采用了ResNet
  • 算法大致结构如下:一个自底向上的线路,一个自顶向下的线路,横向连接。图中放大的区域就是横向连接,这里1*1的卷积核的主要作用是减少卷积核的个数,也就是减少了feature map的个数,并不改变feature map的尺寸大小。

  • 1 × 1卷积核的主要目的是为了调整 backbone 上不同特征图的 channel,因为后面能够融合需要保证相同的 shape;2 倍上采样的具体实现方法则是简单的最近邻插值算法。
    • 使用最近邻值插值法,可以在上采样的过程中最大程度地保留特征图的语义信息(有利于分类),从而与 bottom-up 过程中相应的具有丰富的空间信息(高分辨率,有利于定位)的特征图进行融合,从而得到既有良好的空间信息又有较强烈的语义信息的特征图。

① 自底向上:

自底向上的过程就是神经网络普通的前向传播过程,特征图经过卷积核计算,通常会越变越小。

② 自上而下:

自上而下的过程是把更抽象、语义更强的高层特征图进行上采样,而横向连接则是将上采样的结果和自底向上生成的相同大小的feature map进行融合。横向连接的两层特征在空间尺寸相同,这样做可以利用底层定位细节信息。然后通过按元素相加,将上采样映射与相应的自底而上映射合并。这个过程是迭代的,直到生成最终的分辨率图。

③ 横向连接:

采用1×1的卷积核进行连接(减少特征图数量)。

SPP Net

论文:Spatial pyramid pooling in deep convolutional networks for visual recognition

https://arxiv.org/abs/1406.4729

作者:He K, Zhang X, Ren S, et al.

发布时间 :ECCV, 2014

优缺点/总结

优点

  • 引入了空间金字塔,适应各种不同尺寸的特征图(输入不需要放缩到指定大小)
  • 基于空间金字塔,对每张图进行一次特征提取(卷积复用),加速运算速度,并提出了权重共享的策略
  • SPP-Net对R-CNN做了速度和精度上的改进,在达到R-CNN精度的同时,其速度是R-CNN的24-102倍,在运算速度方面有了很大提高

缺点

  • 分类器使用SVM,不能端到端训练
  • 进行分阶段训练,训练步骤复杂,需要额外的回归器
  • 仍满足不了实时的需求

模型的改进

  • 尺度问题,形变会导致信息失真,影响性能,引入空间金字塔池化层
  • 速度问题,一张图片RCNN提取特征2k次而SPPnet只要1次,速度提升

解决的问题

  • SPP-Net解决尺度统一
  • R-CNN的网络结构中有全连接层,造成CNN网络输入时图像尺寸一致,但是region proposal的尺寸是不一致的
  • 由于每个region proposal都需要进行正向传播,导致R-CNN的运行速度慢

模型

深度卷积神经网络的基础结构分为:卷积层(conv layers)->池化层(pooling layers)->全连接层(fc layers)。我们在设计网络的时候,全连接层的输入维数必须提前固定,这也就要求我们在检测图片时,需要将图片经过crop(裁剪)、warp(拉伸)等操作把图片变换成固定尺寸,才能输入神经网络。这些操作在一定程度上会导致图片信息的丢失或者变形。

对此SPPnet提出的解决方案是在最后一层卷积层后用空间金字塔池化层(Spatial Pyramid Pooling)代替普通池化层。

结构

空间金字塔池化(Spatial Pyramid Pooling)

  • 不同尺寸的region proposal经过前面卷积层生成feature map的大小也不相同,假设大小为W * H * C
  • SPP结构中,我们以不同大小的块来提取特征,分别是4*4, 2*2, 1*1,
  • 然后把这三个网格对应到feature map中,就可以得到16+4+1=21个不同的spatial bin
  • 其中每一块都提取一个特征,可以得到固定的21 * C的特征向量,而与feature map的尺寸无关
  • 如最大池化时,就可以在每一个小网格的区域里面提取一个最大的特征来代表整个小网格,或者取平均等其他策略

特征提取

SPP-Net直接对一整张图片进行特征提取,得到feature map,然后在feature map中找到region proposals的区域,并通过空间金字塔池化提取固定的特征向量,使运算速度大大提升,并且特征文件的储存空间大大减少

  • SPPnet的做法是首先通过选择性搜索,对待检测的图片进行搜索出2000个候选窗口(这一步和R-CNN一样)。
  • 然后把整张待检测的图片,输入CNN中,进行一次性特征提取,得到feature maps,然后在feature maps中通过映射关系找到各个候选框的区域,再对各个候选框采用金字塔空间池化,提取出固定长度的特征向量。
    • 特征图(feature maps)的大小是根据图片的大小与卷积层的卷积核大小(kernel size)与步长(stride)决定的
      • 在特征图上确定原图上对应的候选区域

假设(x’,y’)表示特征图上的坐标点,坐标点(x,y)表示原输入图片上的点,那么它们之间有如下转换关系,这种映射关心与网络结构有关: (x,y)=(Sx’,Sy’),反过来,我们希望通过(x,y)坐标求解(x’,y’),那么计算公式如下:

S就是CNN中所有的strides的乘积,包含了池化、卷积的stride

  • R-CNN输入的是每个候选框,然后再进入CNN,因为SPP-Net只需要一次对整张图片进行特征提取,速度会大大提升

Tricks

1、在全连接层前面,加入一个空间金字塔结构

由于CNN网络中存在全连接层,所以在输入全连接层前要进行裁剪或缩放处理,这是由既定的全连接层结构决定的,这样处理的缺点是会丢失一些信息,加入空间金字塔结构代替普通池化。

2、特征提取阶段直接对整张图片卷积,只进行一次特征提取再确定区域

R-CNN速度慢的原因是有很多region proposals要经过CNN网络计算特征,消耗过多时间,并且特征文件的储存也需要大量存储空间,于是作者考虑共享特征信息。在特征提取阶段,SPP-Net直接对一整张图片进行特征提取,得到feature map,然后在feature map中找到region proposals的区域,并通过空间金字塔池化提取固定的特征向量,使运算速度大大提升,并且特征文件的储存空间大大减少

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值