前言
目标检测作为深度学习浪潮中的一颗明珠,现阶段依然吸引着大量优秀学者的目光。自计算机图像处理出现以来,多尺度问题一直是一个比较棘手的难题,特别是将计算机处理与人脑进行比较。现在神经网络的出现又重新燃起了解决该问题的希望。
本编文章将梳理目标检测网络中对多尺度问题的处理方法,忽略细枝末节,一探多尺度对目标检测的重要影响。
古老的Anchor
由于Anchor机制的存在,目标检测始终无法与主流CNN框架进行统一,但2019年许多Anchor-Free检测方法的涌出,开始让我们不禁思考Anchor发展方向究竟在哪里。
Anchor的概念最早出现在2016年的Faster R-CNN中,其创造性地提出了RPN网络以解决Selective Search速度慢,精度低的问题,其中Anchor的引入就是为了解决RPN网络无法处理多尺度的问题。
在RPN网络最后提取的特征图上每个点默认设置9个Anchor,3种尺度,3种长宽比,以达到覆盖整张图上不同尺度大小的目标,如图1所示。

Anchor在多尺度上取得了巨大成功,后来的人们借着Anchor的东风一路前行,所向披靡。
回过头来,Anchor之所以成功,与其只需要在一张图处理一次即可完成对不同尺度的目标进行检测离不开关系。但是多尺度目标除了尺寸上存在差异外,更深层次的语义信息同样不一样。因此FPN站在了舞台。
多变的FPN
SSD是第一个在不同特征层检测不同尺度大小的网络,其基本假设为小尺度的目标在具有较简单的语义信息,因此适合在浅层特征层中对其进行检测,而大尺度的目标具有更复杂的语义信息,因此适合在深层特征层中进行检测,如图2(c)所示。目前用的较多的FPN是由何凯明在2017年提出来的,其用于检测的浅层特征层融合了临近的深层特征,如图2(d)所示。

FPN有个特点需要说明,即在同一个FPN特征层中,由于需要检测的尺度是固定的,同一个FPN层中的Anchor尺度往往是相同的。
FPN将多尺度检测问题提升到了一个不同的高度,从Anchor时代的单纯尺度大小提升到了包含语义信息的多层检测。当然,更好的融合方式往往意味着更高的mAP,FPN的变种也被后来的研究学者玩出花来了,包括但不限于PANet,NAS-FPN,M2Det,BiFPN,DetectoRS。部分结构如图3所示

Anchor-Free
2019年,Anchor-Free的方法让本已岑寂的目标检测方法重新火了起来。大量不需要Anchor的目标检测模型被提了出来,包括FCOS,FAST,CenterNet等。这些模型具有更简单的结构,同时mAP可与Anchor-Base的方法相媲美。
其实,从FPN自提出以来,Anchor的大部分作用就已经被取代了。ATSS实验表明,在每个特征层上不管选择一个Anchor还是9个,mAP几乎没差异,如图4所示。

既然如此,立下汗马功劳的Anchor的意义又究竟在哪里呢?
Sample | 样本-采样
从Selective Search到Anchor,从图像金字塔到FPN,都是为了在整幅图像上解决尺度不一致的问题,但最终还是归结到图像中的目标(整样本与负样本)的尺度上来,并且从整幅图像上进行多尺度处理显然不如直接考虑所有目标的尺度不一致更合理。
SNIPER在训练时对GT对应的目标进行截取得到不同尺度的chips,然后用RPN生成负样本,将正负样本resize到统一尺度大小进行训练,实现了样本层面的多尺度训练。该方法的缺点也很明显,网络改动较大,训练速度慢,只适用于Two-Stage的检测方法。
既然在输入图像上采样困难,有没有什么办法将采样融合到网络的特征层呢?
是不是有种似曾相识的感觉,没错,RPN正是用CNN网络替代Selective Search,FPN也用CNN网络替代图像金字塔,都是利用神经网络强大的表达能力将输入端繁杂的处理整合到端对端网络中。
于是,ATSS提出了一种在FPN不同层中对Anchor采样,采取的方法是基于统计分布的方法,如图5所示。

总结
解决目标检测中的多尺度问题,从最初的Anchor,到现在的FPN,Anchor-Based与Anchor-Free之间也因为处理尺度问题而变得统一。因此,有无Anchor对检测来说变得没那么重要,其中的关键在于Sample,即对不同尺度的样本进行合理表达。