多尺度问题概述

Apr 25, 2024
1 views
Computer Vision

一、传统的图像金字塔

最开始在深度学习方法流行之前,对于不同尺度的目标,大家普遍使用将原图构建出不同分辨率的图像金字塔,再对每层金字塔用固定输入分辨率的分类器在该层滑动来检测目标,以求在金字塔底部检测出小目标;或者只用一个原图,在原图上,用不同分辨率的分类器来检测目标,以求在比较小的窗口分类器中检测到小目标。经典的基于简单矩形特征(Haar)+级联Adaboost与Hog特征+SVM的DPM目标识别框架,均使用图像金字塔的方式处理多尺度目标,早期的CNN目标识别框架同样采用该方式,但对图像金字塔中的每一层分别进行CNN提取特征,耗时与内存消耗均无法满足需求。但该方式毫无疑问仍然是最优的。值得一提的是,其实目前大多数深度学习算法提交结果进行排名的时候,大多使用多尺度测试。同时类似于SNIP使用多尺度训练,均是图像金字塔的多尺度处理。

二、SNIP/SNIPER中的多尺度处理

1. SNIP

尺度归一化:SNIP是多尺度训练(Multi-Scale Training)的改进版本。MST的思想是使用随机采样的多分辨率图像使检测器具有尺度不变特性。然而作者通过实验发现,在MST中,对于极大目标和过小目标的检测效果并不好,但是MST也有一些优点,比如对一张图片会有几种不同分辨率,每个目标在训练时都会有几个不同的尺寸,那么总有一个尺寸在指定的尺寸范围内。

2.SNIPER:SNIP方法的改进

SNIPER的关键是减少了SNIP的计算量。SNIP借鉴了multi-scale training的思想进行训练,multi-scale training是用图像金字塔作为模型的输入,这种做法虽然能够提高模型效果,但是计算量的增加也非常明显,因为模型需要处理每个scale图像的每个像素,而SNIPER(Scale Normalization for Image Pyramids with Efficient Resampling)算法以适当的比例处理ground truth(称为chips)周围的上下文区域,在训练期间每个图像生成的chips的数量会根据场景复杂度而自适应地变化,由于SNIPER在采样后的低分辨率的chips上运行,故其可以在训练期间收益于Batch Normalization,而不需要在GPU之间再用同步批量标准化进行统计信息。实验证明,BN有助于最后性能的提升。

这些chips主要分为两大类:

一种是postivice chips,这些chips包含ground truth;

另一种是从RPN网络输出的ROI抽样得到的negative chips,这些chips相当于是难分类的背景,而那些容易分类的背景就没必要进行多尺度训练了。

因此模型最终只处理这些chips,而不是处理整张图像,这样就达到提升效果的同时提升速度。相比于SNIP,基于Faster RCNN(ResNet101作为Backbone)的实验结果显示SNIPER的mAP值比SNIP算法提升了4.6百分点,所以效果也还是非常不错的。在单卡V100上,每秒可以处理5张图像,这个速度在two-stage的算法中来看并不快,但是效果是非常好。

三、SSD中的多尺度处理

image

SSD以不同stride的feature map作为检测层分别检测不同尺度的目标,用户可以根据自己的任务的目标尺度制定方案。该方式尺度处理简单有效,但存在一些缺陷:

  • 一般使用低层检测小目标,但低层感受野小,上下文信息缺乏,容易引入误检
  • 使用简单的单一检测层多尺度信息略显缺乏,很多任务目标尺度变化范围十分明显;
  • 高层虽然感受野较大,但毕竟经过了很多次降采样,大目标的语义信息是否已经丢失
  • 多层特征结构,是非连续的尺度表达,是非最优的结果

四、空洞卷积处理多尺度

传统的解决多尺度检测的算法,大都依赖于图像金字塔与特征金字塔。与上述算法不同,图森组对感受野这一因素进行了深入的分析,并利用了空洞卷积这一利器,构建了简单的三分支网络TridentNet,对于多尺度物体的检测有了明显的精度提升。

  • 控制实验证明了感受野大小与目标尺度呈现正相关;
  • 设计三个并行分支获取不同大小的感受野,以分别处理不同尺度的目标,感受野使用空洞卷积表征;每个分支采用Trident block构建,取代ResNet-res4中的多个原始的Block;
  • 训练类似于SNIP,三个分支分别采用不同尺度的目标训练。

、FPN中的多尺度处理及其改进

自从2016年FPN网络出来后,目前各大视觉任务的baseline基本都是以backbone-FPN。FPN以更为轻量的最近邻插值结合侧向连接实现了将高层的语义信息逐渐传播到低层的功能,使得尺度更为平滑,同时它可以看做是轻量级的decoder结构。FPN看起来很完美,但仍然有一些缺陷:

  • 在上采样时使用了比较粗糙的最近邻插值,使得高层的语义信息不一定能有效传播;
  • 由于经过多次下采样,最高层的感受野虽然很丰富,但可能已经丢失了小目标的语义信息,这样的传播是否还合适;
  • FPN的构建只使用了backbone的4个stage的输出,其输出的多尺度信息不一定足够;
  • FPN中虽然传播了强的语义信息到其他层,但对于不同尺度的表达能力仍然是不一样的,因为本身就提取了不同backbone的输出。

1. FPN & PANet

2.ThunderNet