这篇文章主要解决的问题是目标检测中最为棘手的 scale variation 问题。作者使用了非常简单而干净的办法在标准的COCO benchmark上,使用 ResNet 101单模型可以得到48.4的结果,远远超越了目前公开的单模型的最优结果。
首先简单回顾一下现有的两大类方法。第一大类,也是从非deep 时代,乃至CV初期就被广泛使用的方法叫做图像金字塔。在图像金字塔中,我们直接对图像进行不同尺度的缩放,然后将这些图像直接输入到检测器中进行检测。虽然这样的方法十分简单,但其效果仍然是最佳,也后续启发了SNIP这一系列的工作。单论性能而言,multi-scale training/testing仍然是一个不可缺少的组件。然而其缺点也是很明显的,测试时间大幅度提高,对于实际应用不友好。另一大类方法,也是deep方法独有的,也就是特征金字塔。最具代表性的工作就是经典的FPN了。这一类方法的思想是直接在特征层面上近似图像金字塔。非Deep时代在检测中便有经典的channel feature这样的方法,这个想法在CNN中其实更加直接,因为本身CNN的特征便是分层次的。从开始的MS-CNN直接在不同下采样层上检测大小不同的物体,再到后续TDM和FPN加入了新的 top-down分支,补充底层的语义信息不足,都是延续类似的想法。然而实际上,这样的近似虽然有效,但是仍然性能和图像金字塔有较大差距。
作者考虑对于一个检测器本身而言,主干网络有哪些因素会影响性能。总结下来,无外乎三点:网络深度(结构)、下采样率和感受野。对于前两者而言,其影响一般来说是比较明确的,即网络越深(或叫表示能力越强),结果会越好。下采样次数过多对于小物体有负面影响。但是没有工作去单独分离出感受野,保持其他变量不变,来验证它对检测器性能的影响。所以,我们做了一个验证性实验,分别使用ResNet50和ResNet101作为主干网络,改变最后一个阶段中每个卷积的 dilation rate。通过这样的方法,我们可以固定同样的网络结构、同样的参数量和同样的下采样率,只改变网络的感受野。惊奇地发现,不同尺度物体的检测性能和 dilation rate正相关。也就是说,更大的感受野对于大物体性能会更好,更小的感受野对于小物体更好。于是下面的问题就变成了,我们有没有办法将不同的感受野的优点结合在一起呢?
所以作者最开始的一个想法便是直接加入几支并行、但是 dilation rate 不同的分支,在文中这样的结构被称为 trident block。这样一个简单的想法已经可以带来可观的性能提升。作者进一步考虑这三个分支的区别应该仅仅在于感受野,它们要检测的物体类别、对特征做的变换应该都是一致的。所以自然而然地想到了,这几个分支可以共享权值。一方面减少了参数量以及潜在的过拟合问题,另一方面充分利用了每个样本,同样一套参数在不同的 dilation rate 下训练了不同尺度的样本。最后一个设计则是借鉴了SNIP,为了避免感受野和尺度不匹配的情况,作者对于每一个分支只训练一定范围内的样本,避免极端尺度的物体对于性能的影响。
总结一下,作者的TridentNet在原始的主干网络上做了三点改进:
- 构造了不同感受野的、并行的多分支结构。
- 对 trident block 中每一个分支的权值共享。
- 对于每个分支,训练和测试都只负责一定尺度范围内的样本,也就是所谓的 scale-aware。
这三点在任何一个深度学习框架中都可以很容易地实现。
在测试阶段,我们可以只保留一个分支来近似完整的 TridentNet 的结果,后面作者做了充分的对比实验来寻找这样单分支近似的最佳 setting,一般而言,这样的近似只会降低0.5到1点的mAP,但是和baseline比较起来,不会引入任何额外的参数和计算量。
作者在论文中做了非常详细的 ablation analysis,包括有几个分支性能最好;trident block应该加在网络的哪个阶段;trident block加多少个性能会饱和。下面主要介绍两个比较重要的 ablation。
第一个是作者提出的这三点,分别对性能有怎样的影响。作者分别使用了两个很强的结构 ResNet 101和ResNet 101-Deformable 作为主干网络。这里特别使用了 Deformable 的原因是,作者想要证明该方法和 deformable conv 这种去学习 adaptive 感受野的方法仍然相兼容。具体结果如下:
可以看到,在接近mAP 40的 baseline上,作者提出的每一部分都是有效的,这两个baseline上分别有2.7和1.9的提升。
另外一个值得一提的 ablation 是,对于作者上面提出的单分支近似,我们如何选择合适的 scale-aware 训练参数使得近似的效果最好。其实作者发现,如果采用单分支近似的话,那么所有样本在所有的分支都训练结果最好。这一点其实符合预期,因为最后只保留一个分支的话,那么参数最好在所有样本、所有尺度上充分训练。如果和上文40.6的baseline比较,可以发现单分支的结果比 full TridentNet只有0.6 mAP的下降。这也意味着我们在不增加任何计算量和参数的情况下,仍然获得了2.1 mAP的提升。这对于实际产品中使用的检测器而言无疑是一个福音。
作者还和经典的特征金字塔方法FPN做了比较。为了保证公平,作者严格遵循了Detectron中的实现方式,并使用两个全连接层作为检测器的head。可以看到在这样的setting下,FPN其实对于baseline 而言小物体有一定提升,然而大物体性能下降,综合下来并没有比baseline有提高,但是我们的方法仍然可以持续地提升2.2 mAP,就算使用单分支近似,仍然有1.2 mAP的提升。这充分说明了此方法的普适性。
最后作者将该方法和各论文中报告的最好结果相比较。但是其实很难保证绝对公平,因为每篇论文使用的 trick 都不尽相同。所以在这里报告了两个结果,一个是ResNet 101不加入任何trick直接使用 TridentNet的结果,一个是和大家一样加入了全部 trick (包括Sync BN, multi-scale training/testing, deformable Conv, Soft-NMS)的结果。在这样的两个setting下,分别取得了在COCO test-dev集上42.7和48.4的结果。这应该分别是这样两个setting下目前最佳的结果。单分支近似也取得了42.2和47.6的mAP,不过这可是比baseline不增加任何计算量和参数的情况下得到的。