yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

输入图片的尺寸对检测模型的性能影响相当明显,事实上,多尺度是提升精度最明显的技巧之一

在基础网络部分常常会生成比原图小数十倍的特征图,导致小物体的特征描述不容易被检测网络捕捉。

通过输入更大、更多尺寸的图片进行训练,能够在一定程度上提高检测模型对物体大小的鲁棒性,仅在测试阶段引入多尺度,也可享受大尺寸和多尺寸带来的增益。

  multi-scale training/testing最早见于“Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition”这篇文章,训练时,预先定义几个固定的尺度,每个epoch随机选择一个尺度进行训练。测试时,生成几个不同尺度的feature map,对每个Region Proposal,在不同的feature map上也有不同的尺度,我们选择最接近某一固定尺寸(即检测头部的输入尺寸)的Region Proposal作为后续的输入。在“Object Detection Networks on Convolutional Feature Maps”这篇文章中,选择单一尺度的方式被Maxout(element-wise max,逐元素取最大)取代:随机选两个相邻尺度,经过Pooling后使用Maxout进行合并,如下图所示。

yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

  近期的工作如FPN等已经尝试在不同尺度的特征图上进行检测,但多尺度训练/测试仍作为一种提升性能的有效技巧被应用在MS COCO等比赛中。

https://www.cnblogs.com/Terrypython/p/10642091.html


1 什么是多尺度

1.1 多尺度问题

所谓多尺度,实际上就是对信号的不同粒度的采样,通常在不同的尺度下我们可以观察到不同的特征,从而完成不同的任务。

yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

如上两个图是同样的一维信号在不同采样频率下的结果,这是一条精度曲线。通常来说粒度更小/更密集的采样可以看到更多的细节,粒度更大/更稀疏的采样可以看到整体的趋势,不过此处由于使用了不同的颜色,曲线本身也存在较大的波动,所以粒度更小的右图反而能更直观的看到各个曲线的整体性能比较结果。

yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

如上展示了3个尺度的图像,如果要完成的任务只是判断图中是否有前景,那么12×8的图像尺度就足够了。如果要完成的任务是识别图中的水果种类,那么64×48的尺度也能勉强完成。如果要完成的任务是后期合成该图像的景深,则需要更高分辨率的图像,比如640×480。

1.2 图像金字塔

很多时候多尺度的信号实际上已经包含了不同的特征,为了获取更加强大的特征表达,在传统图像处理算法中,有一个很重要的概念,即图像金字塔和高斯金字塔。

图像金字塔,即一组不同分辨率的图像,如下图,

yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

采样的方式可以是不重叠或者重叠的,如果是不重叠的,采样尺度因子为2,那就是每增加一层,行列分辨率为原来的1/2。

当然,为了满足采样定理,每一个采样层还需要配合平滑滤波器,因此更常用的就是高斯金字塔,每一层内用了不同的平滑参数,在经典的图像算子SIFT中被使用。

yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

不过这不是本文要聚焦的内容,请大家去自行了解尺度空间理论,接下来聚焦深度学习中的多尺度模型设计。

2 计算机视觉中的多尺度模型架构

卷积神经网络通过逐层抽象的方式来提取目标的特征,其中一个重要的概念就是感受野。如果感受野太小,则只能观察到局部的特征,如果感受野太大,则获取了过多的无效信息,因此研究人员一直都在设计各种各样的多尺度模型架构,主要是图像金字塔和特征金字塔两种方案,但是具体的网络结构可以分为以下几种:(1) 多尺度输入。(2) 多尺度特征融合。(3) 多尺度特征预测融合。(4) 以上方法的组合。

2.1 多尺度输入网络

顾名思义,就是使用多个尺度的图像输入(图像金字塔),然后将其结果进行融合,传统的人脸检测算法V-J框架就采用了这样的思路。

深度学习中模型以MTCNN[1]人脸检测算法为代表,其流程如下,在第一步检测PNet中就使用了多个分辨率的输入,各个分辨率的预测结果(检测框)一起作为RNet的输入。

yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

值得一提的是,多尺度模型集成的方案在提高分类任务模型性能方面是不可或缺的,许多的模型仅仅采用多个尺度的预测结果进行平均值融合,就能在ImageNet等任务中提升2%以上的性能。

2.2 多尺度特征融合网络

多尺度特征融合网络常见的有两种,第一种是并行多分支网络,第二种是串行的跳层连接结构都是在不同的感受野下进行特征提取

(1) 并行多分支结构

比如Inception网络中的Inception基本模块,包括有四个并行的分支结构,分别是1×1卷积,3×3卷积,5×5卷积,3×3最大池化,最后对四个通道进行组合。

yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

除了更高卷积核大小,还可以使用带孔卷积来控制感受野。在图像分割网络Deeplab V3[2]和目标检测网络trident networks[3]中都使用了这样的策略,网络结构如下图:

yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

还有一种比不同大小的卷积核和带孔卷积计算代价更低的控制感受野的方法,即直接使用不同大小的池化操作,被PSPNet[4]采用。

yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

值得注意的是,这样的多分支结构对于模型压缩也是有益处的,以Big-little Net[5]为代表,它采用不同的尺度对信息进行处理。

yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

对于分辨率大的分支,使用更少的卷积通道,对于分辨率小的分支,使用更多的卷积通道,这样的方案能够更加充分地使用通道信息。

(2) 串行多分支结构

串行的多尺度特征结构以FCN[6],U-Net为代表,需要通过跳层连接来实现特征组合,这样的结构在图像分割/目标检测任务中是非常常见的。

yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

从上面这些模型可以看出,并行的结构能够在同一层级获取不同感受野的特征,经过融合后传递到下一层,可以更加灵活地平衡计算量和模型能力。串行的结构将不同抽象层级的特征进行融合,对于边界敏感的图像分割任务是不可缺少的。

2.3 多尺度特征预测融合

即在不同的特征尺度进行预测,最后将结果进行融合,以目标检测中的SSD[7]为代表。

SSD在不同stride不同大小的特征图上进行预测。低层特征图stride较小,尺寸较大,感受野较小,期望能检测到小目标。高层特征图stride较大,尺寸较小,感受野较大,期望能检测到大目标。

yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

类似的思想还有SSH[8],从分辨率较大的特征图开始分为多个分支,然后各个分支单独预测不同尺度大小的目标。

yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

在多个特征通道进行预测的思想与多个输入的方案其实是异曲同工的,但是它的计算效率更高。

2.4 多尺度特征和预测融合

既然可以将不同尺度的特征进行融合,也可以在不同的尺度进行预测,为何不同时将这两种机制一起使用呢?这样的结构以目标检测中的FPN[9]为代表。

yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

即将高层的特征添加到相邻的低层组合成新的特征,每一层单独进行预测。当然,也可以反过来将低层的特征也添加到高层,比如PAN[10]。

yolov3--18--多尺度训练与测试--提升精度的tricks--多尝试积累经验才知道哪种生活是自己的最爱

当然,对于不同尺度的特征图的融合,还可以基于学习的融合方案。
链接:https://www.jianshu.com/p/57cfa4fdd423