CNN中的目标多尺度处理方法

视觉任务中处理目标多尺度主要分为两大类:

  • 图像金字塔:经典的基于简单矩形特征(Haar)+级联Adaboost与Hog特征+SVM的DPM目标识别框架,均使用图像金字塔的方式处理多尺度目标,早期的CNN目标识别框架同样采用该方式,在image pyramid中,我们直接对图像进行不同尺度的缩放,然后将这些图像直接输入到detector中去进行检测。虽然这样的方法十分简单,但其效果仍然是最佳。特别地,随着图像金字塔尺度归一化(SNIP)的出现,解决了小目标和大目标在小尺度和大尺度下难以识别的问题。
  • 特征金字塔:最具代表性的工作便是经典的FPN了,FPN网络通过将不同层的优势结合,使得每一层相比原来都有更丰富的语义特征和分辨率信息。

目标检测中存在不同目标实例之间的尺度跨度非常大,在多尺度的物体中,大尺度的物体由于面积大、特征丰富,通常来讲较为容易检测。难度较大的主要是小尺度的物体,而这部分小物体在实际工程中却占据了较大的比例。通常认为绝对尺寸小于32×32的物体,可以视为小物体或者物体宽高是原图宽高的1/10以下,可以视为小物体。

小物体由于其尺寸较小,可利用的特征有限,这使得其检测较为困难。当前的检测算法对于小物体并不友好,体现在以下4个方面:

  • 过大的下采样率:假设当前小物体尺寸为15×15,一般的物体检测中卷积下采样率为16,这样在特征图上,过大的下采样率使得小物体连一个像素点都占据不到。
  • 过大的感受野:在卷积网络中,特征图上特征点的感受野比下采样率大很多,导致在特征图上的一个点中,小物体占据的特征更少,会包含大量周围区域的特征,从而影响其检测结果。
  • 语义与空间的矛盾:当前检测算法,如Faster RCNN,其Backbone大都是自上到下的方式,深层与浅层特征图在语义性与空间性上没有做到更好的均衡。
  • SSD一阶算法(一种物体识别算法)缺乏特征融合:SSD虽然使用了多层特征图,但浅层的特征图语义信息不足,没有进行特征的融合,致使小物体检测的结果较差。

较为通用的提升多尺度检测的经典方法有:

  1. 降低下采样率与空洞卷积(即padding)可以显著提升小物体的检测性能;
  2. 设计更好的Anchor(标框)可以有效提升Proposal的质量;
  3. 多尺度的训练可以近似构建出图像金字塔,增加样本的多样性;
  4. 特征融合可以构建出特征金字塔,将浅层与深层特征的优势互补。

下面将详细介绍:

  1. 降低下采样率与空洞卷积:直接去除掉Pooling层降低下采样率,会导致减小后续层的感受野,因此使用空洞卷积可以在保证不改变网络分辨率的前提下增加网络的感受野。
  2. 多尺度训练(Multi Scale Training, MST):训练时从多个尺度中随机选取一种尺度,将输入图片缩放到该尺度并送入网络中,简单有效的trick方法。
  3. 优化Anchor尺寸设计:Anchor通常是多个不同大小与宽高的边框,这个大小与宽高是一组超参数,需手动配置。行人标签宽高比通常为0.41。Anchor设计不合理,会给模型收敛带来较大的困难,影响模型的精度。可以从以下两个角度设计一组好的Anchor:
    (1)统计实验,手工设计
    (2)边框聚类:如YOLO采用的Anchor聚类方法。
  4. 深层和浅层特征融合:层多-感受野增加-语义丰富,但小物体特征可能会丢失。(列举6种方式示例)
  5. SNIP(尺度归一化):MST改进版,只对size在指定范围内的目标回传损失,解决映射迁移(Domain Shift)的误差。
  6. TridentNet(三叉戟网络):将3种不同的感受野网络并行化

FPN

  • 论文地址:https://arxiv.org/abs/1612.03144
  • 代码地址:https://github.com/jwyang/fpn.pytorch
    在这里插入图片描述
    FPN将深层信息上采样,与浅层信息逐元素地相加,从而构建了尺寸不同的特征金字塔结构,性能优越,FPN如今已成为Detecton算法的标准组件,不管是one-stage(RetinaNet、DSSD)、two-stage(Faster R-CNN、Mask R-CNN)还是four-stage(Cascade R-CNN)都可用;

如下图所示,FPN把低分辨率、高语义信息的高层特征和高分辨率、低语义信息的低层特征进行自上而下的侧边连接,使得所有尺度下的特征都有丰富的语义信息。
在这里插入图片描述

算法结构可以分为三个部分:自下而上的卷积神经网络(上图左),自上而下过程(上图右)和特征与特征之间的侧边连接。

  • 自下而上:最左侧为卷积神经网络的前向过程,这里默认使用ResNet结构,用作提取语义信息。在前向过程中,特征图的大小在经过某些层后会改变,而在经过其他一些层的时候不会改变,作者将不改变特征图大小的层归为一个阶段,因此每次抽取的特征都是每个阶段的最后一个层的输出,这样就能构成特征金字塔。具体来说,对于ResNets,作者使用了每个阶段的最后一个残差结构的特征激活输出。将这些残差模块输出表示为{C2, C3, C4, C5},对应于conv2,conv3,conv4和conv5的输出。
    在这里插入图片描述
  • 自上而下:首先对C5进行1×1卷积降低通道数,然后依次进行上采样。上采样(插值)几乎都是采用内插值方法,即在原有图像像素的基础上在像素点之间采用合适的插值算法插入新的元素,从而扩大原图像的大小。通过对特征图进行上采样,使得上采样后的特征图具有和下一层的特征图相同的大小。
  • 横向连接(Lateral Connection):目的是为了将上采样后的高语义特征与浅层的定位细节特征进行融合。根本上来说,是将上采样的结果和自下而上生成的特征图进行融合。我们将卷积神经网络中生成的对应层的特征图进行1×1的卷积操作,将之与经过上采样的特征图融合,得到一个新的特征图,这个特征图融合了不同层的特征,具有更丰富的信息。这里1×1的卷积操作目的是改变channels,要求和后一层的channels相同。在融合之后还会再采用3*3的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应,如此就得到了一个新的特征图。这样一层一层地迭代下去,就可以得到多个新的特征图。假设生成的特征图结果是P2,P3,P4,P5,它们和原来自底向上的卷积结果C2,C3,C4,C5一一对应。金字塔结构中所有层级共享分类层(回归层)。
  • 卷积融合:在得到相加后的特征后,利用3×3卷积对生成的P2至P4再进行融合,目的是消除上采样过程带来的重叠效应,以生成最终的特征图。

优点:

  • 底层feature map位置信息多但语义信息少,FPN为其增强了语义信息,提升了对小物体的检测效果;
  • 提升检测精度,包括加强对小物体的检测效果和对大物体的检测效果。一般来说,顶层feature map是检测大物体的关键,因为容易框出大物体;底层feature map是检测小物体的关键,因为容易框出小物体;
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值