Scale-Aware Trident Networks for Object Detection 论文笔记
前言
为了解决目标检测中的尺度变换问题,目前人们已经提出了如下方法:

- (a):图像金字塔,虽然对目标的表征能力很强,但由于每种尺度的图像都要经过一个CNN,因此效率很低;
- (b):特征金字塔,虽然能够生成多尺度特征,计算消耗相对于图像金字塔来说更少,但由于不同尺度的目标被分配到不同层级的特征图上,导致参数不一致;
- (c):就是本文提出的三叉戟网络(Trident Network)。
图像金字塔和特征金字塔的共同特点是,模型对于不同尺度的目标应该有不同的感受野。基于此,本文提出Trident Network,首先利用trident block (上图c中的黄色部分,有三个分支)生成不同尺度的特征图,trident block使用的是空洞卷积(dilated convolution),这样可以使不同的分支拥有相同的网络结构,并且共享相同的参数,而同时每个分支的感受野是不同的。为了避免有过大或过小的目标参与到训练中,还提出了scale-aware训练策略 ,确保分配给每个分支的目标的尺度大小与该分支的感受野大小是相匹配的。由于整个多分支网络的权重是共享的,因此在inference时可以将整个Trident Network近似成为只有一个主要分支的网络 ,这样做使得inference不会引入额外的参数和计算消耗。
本文的主要贡献为:
- 研究了在目标检测中,感受野对不同尺度大小的目标的影响;
- 提出Trident Network以解决尺度变化问题,它生成的不同尺度的特征图的表征能力都是相同的;
- 提出TridentNet Fast,通过trident-block中权重共享的设计,在inference时只保留一个主要分支;
- 使用ResNet-101作为backbone,在COCO数据上达到48.4的mAP。
对感受野的研究
为了研究感受野对检测不同大小目标的影响,本文将backbone中的一些卷积层替换为空洞卷积,使用不同的dilation rate来控制感受野的大小。
在空洞卷积中有一个超参数dilation rate d_s,表示在filter之间插入d_s-1个0,这样做可以扩大kernel的大小,同时不会带来额外的参数和计算消耗。如下图所示,(a)是一个3 \times 3的kernel,它的d_s就是1;(b)是一个3 \times 3的空洞卷积,d_s为2,也就是在图(a)的相邻filter之间插入2-1=1个0,那么它的感受野就相当于kernel大小为3+2(d_s-1)的普通卷积的感受野,也就是7。也就是说,使用空洞卷积的感受野大小为3+2*2(d_s-1)。

本文使用Faster R-CNN进行实验,分别使用ResNet-50和ResNet-101作为backbone,使用3 \times 3的空洞卷积,d_s=1,2,3,实验结果如下表,AP_s,AP_m,AP_l分别表示检测小,中,大目标时的性能。可以看到当感受野增大(更大的d_s)时,检测小目标的性能会降低,而检测大目标的性能会提升。

根据实验结果可以得到两个结论:
- 感受野确实会影响检测不同大小目标时的性能,最合适的感受野与目标的大小是紧密相关的。
- 虽然ResNet-101在理论上已经有很大的感受野,可以覆盖较大的目标,但当增大d_s时,检测大目标的性能依然能够提升。这表示有效感受野是比理论感受野要小的 。 有效感受野增大时,网络在检测大目标时表现出良好的性能,但检测小目标的性能却会下降。
Trident Network

上图是Trident Network的整体结构,它以单个尺度的图像作为输入,然后通过平行分支生成不同尺度的特征图,这些分支共享参数,只有dilation rate不同。
1. 网络结构
TridentNet是通过将backbone中的卷积块替换为trident block构成的,一个trident block由多个平行分支组成,每个分支与原始卷积块的结构是相同的,只是加入了dilation rate。以ResNet为例,一个残差块中有3个卷积,卷积核大小分别为1\times 1,3\times 3和1\times 1,那么在trident block中,平行分支的结构和这个残差块的结构是相同的,只是在3\times 3的卷积处加入了不同的dilation rate,如下图所示:

堆叠多个trident block能够更有效地控制不同分支的感受野大小。在本文中,作者将backbone中最后一个stage的卷积块替换为trident block,因为越靠后总步长就越大,那么得到的不同分支感受野的差异也就越大。
由于不同的分支共享同样的结构,因此可以直接实现权重共享。本文在所有分支以及各自对应的RPN和R-CNN head之间共享权重,不同的只有每个分支的dilation rate。权重共享能够带来以下好处:
- 减少了参数的数量,使得TridentNet与原始检测器相比不需要引入额外的参数;
- 使得不同尺度的目标在经过网络时,网络对它们的表征能力都是相同的;
- 同样的参数不同尺度的目标在不同感受野下的训练。
2. scale-aware训练策略
为了解决训练时每个分支的误匹配问题(小目标进入dilation rate较大的分支中),本文还提出scale-aware训练策略,以提升每个分支对目标尺度的敏感性,避免在不合适的分支上训练目标。具体来说就是,为每个分支i设置有效范围[l_i,u_i],在训练时,每个分支只选择尺度大小落入有效范围内的proposal和gt。
如果一个RoI的宽和高分别为w和h,对于分支i来说,当它满足以下条件时才是有效的:

基于此公式就可以实现小目标进入第一个分支,中等目标进入第二个分支,大目标进入第三个分支,从而进行有针对性地训练。这里作者借鉴了SNIP的思想。
3. TridentNet Fast
在inference时,每个分支都会产生检测结果,并且要过滤掉有效范围之外的bbox,然后使用NMS或者soft-NMS处理所有的检测结果,以获得最终结果。由于TridentNet有三个分支,每个分支上都要进行检测,因此inference的速度是很慢的。
为此,本文提出TridentNet Fast,在Inference时只使用中间那个分支,因为它的有效范围覆盖了大目标和小目标。这样的话,TridentNet Fast与标准的Faster R-CNN相比就不会引入额外的时间消耗。而这样做与原始TridentNet相比,只会带来一点点的性能下降,这可能是由于权重共享策略,使得多分支训练等价于网络内部的尺度扩增。
实验结果
在COCO数据集上的结果:

结论
本文探讨了感受野对于检测不同大小目标的影响,并由此提出Trident Network,主要思想就是不同大小的目标由不同的感受野网络来训练,提升检测性能。
