Scale-Aware Trident Networks for Object Detection
1.背景
尺度问题一直是目标检测领域比较核心的待解决的问题。目前,对于这个问题还没有比较彻底的解决思路,有两种比较好的方法来处理这一问题:
图像金字塔,即网络输入图像的多尺度,比如常见的multi-scale test的trick,这种方法需要耗费很大的计算量。
特征金字塔,即融合不同深度的feature map来获得多尺度特征,比如FPN,这种方法速度更快,但是性能不好,按照论文的说法,是因为它牺牲了不同尺度的特征一致性(即不同scale的feature经过不同深度不同参数的变换,反应出来的特征会更全面和表达能力更强)。
抛除这些结构上的因素,具体到DNN的设计上,影响DNN对尺度处理能力的因素主要有两点:
1、较深的层一般感受野越大,因此处理大目标的能力较强。
2、过多的下采样层会损伤网络对小目标的检测能力
这篇文章探究了另一个可能的关键因素对目标检测的影响,即感受野的大小问题。提出了Trident Network的结构来处理尺度变化,并达到权重共享、scale-aware training和快速inference方法等,进行了大量的对比实验,内容比较充实。
2.方法
TridentNet在原始的backbone上做了三点变化:
1.构造了不同receptive field的parallel multi-branch,
2.对于trident block中每一个branch的weight是share的。
3.对于每个branch,训练和测试都只负责一定尺度范围内的样本,也就是所谓的scale-aware。
2.1空洞卷积
空洞卷积是一种对于普通卷积的改进做法,使卷积核取值的像素点之间产生间隙,使得在卷积时可以有更大的范围。
具体来讲,使用参数ds ,表示卷积核取值像素点间增加 ds-1个空像素。 ds=1时为标准的卷积。随着 ds的增大,空洞卷积拥有越来越大的感受野,但是参数量和普通卷积是一致的。
特别是3×3 的空洞卷积与内核大小3 + 2 (ds−1)的卷积有相同的感受野。假设当前的特征图的尺寸为是s,则总共可以增加的感受野为2 (ds−1)。有n个卷积层的感受野增加了2(ds−1)sn
可以看到,Dilation的rate越大,感受野越大,对目标越友好。目标大小的划分small (less than 32×32), medium (from32×32 to 96×96) and large(greater than 96×96) sizes。
2.2 Trident Network
TridentNet的想法很简单,在同样的网络结构下,并列使用不同 ds大小的空洞卷积,处理同样的输出,然后将不同感受野下的结果一同输出。以ResNet的residual block为例,一般是1x1,3x1,1x1连续三个卷积核,其中3x3的卷积将用上述方法改良,获得三个由不同rate的dilate卷积构成的并行分支,改良后的结构称之为trident blocks。
2.3 权值共享
(1)保持网络参数量不变。
(2)可以从不同尺寸的物体中提取产生较为统一的特征。
(3)网络的参数可以经过更多的训练,接收不同的尺寸和感受野。(鲁棒性或者防止过拟合)
3.训练及运算过程
在训练TridentNet时,还有一个问题是:要防止感受野和物体尺寸差别很大时,仍然训练更新了网络参数,这根据最开始的实验可以理解,差别较大时会带来性能的下降。
解决的方法称为scale-aware training。对每一条分支定义一个范围 [li,ni],对于物体的RoI区域,假设宽高分别为 w,h 。
则物体可以在分支 i下训练的条件为:这样可以增强网络的稳定性。
在网络进行预测时,对于所有分支的输出,使用NMS,去除多余的目标框,得到最终的预测结果。
另外,虽然多分支的网络没有额外的参数量,但经过每个分支都是一次单独计算,预测会很慢。一种放弃部分性能的做法是,在预测时只使用中间 ds=2 的分支,中间分支对于较小或较大的物体也有一定的适用性,保持了原有的计算速度,称为Fast Inference Approximation。(相当于只添加了空洞卷积)
4.实验
本文的baseline是ResNet作为主干网络的Faster R-CNN,使用3个分支的trident block进行消融实验:
使用多分支,scale-aware后性能都有提升。
有个问题是为什么权重不共享的情况,性能会变差,独立的参数应该能提取到不同尺寸下更好的特征才对。
对于分支数的实验:
这里的实验不使用scale-aware train,以使得每个分支尽可能发挥作用。
分支数为3的情况性能已经较好。
对于Trident block的使用层次,前文有说通常在输出的位置使用,这里用实验尝试在ResNet的不同stage上使用block,探究感受野的影响情况:
conv2,conv3,conv4分别下采样4、8、16倍。
这里让我觉得TridentNet还存在高层网络小物体特征不足的问题,只考虑小物体,不同层次下最合适的分支依旧是普通卷积( ds=1),并没有获得更细致的特征。
堆叠使用Trident block的实验:
结果说明可以通过堆叠trident block来提高效果,但是太多会导致性能下降。
用所有的数据分别训练每个分支,探究每个分支发挥的作用:
结果显示,branch-1主要对于小物体有提升,branch-2,3则分别提升在中物体和大物体上的效果。
这里的branch-2对于小物体、大物体结果也还可以,这也是Fast Inference Approximation产生的原因。
不同模型的比较:
TridentNet为ResNet-101主干网络和Fast R-CNN,为文中的主要方法。
TridentNet为添加了多尺度训练、soft-NMS、可形变卷积,large-batch BN的做法。
总体来说,TridentNet是一种很简单的做法,而且有很广泛的适用性,可以以零件的方式放入普通的网络中,提高检测性能。
转载
https://zhuanlan.zhihu.com/p/56468485
https://zhuanlan.zhihu.com/p/113194981