论文阅读:Scale-Aware Trident Networks for Object Detection

TridentNet

文章 | 作者解读
  由于目标检测任务中,每张图的目标的大小都是变化的,于是造成对于过于小或者过于大的物体都不好检测,这就是目标检测中的尺度变化问题,一个直接的解决办法是使用图像金字塔。在手工特征时代,直接就是将图像缩放成不同分辨率组成一个金字塔输入给模型,而深度学习时代,以FPN为代表的多尺度方法则是使用多分辨率的特征图来组成金字塔去近似图像金字塔的效果。另外,为了使图像尺度和物体尺度匹配,CVPR2018的SNIP提出scale normalization,就是在不同尺度的图像中选择合适大小的物体拿来训练,比如小/大物体的特征分别从大/小尺度的图像中提取。

论文阅读:Scale-Aware Trident Networks for Object Detection_第1张图片

不管是图像金字塔还是特征金字塔,思想都是要模型对不同大小的物体能有对应大小的感受野,但两种方法都有各自的缺点。图像金字塔的inference慢,而特征金字塔效果差一些,并且牺牲了不同尺度间的feature consistency。上图c就是本文的设计,利用dilated convolution实现不同的感受野,并且不同分之间除了感受野不一样,参数完全是共享的。

论文阅读:Scale-Aware Trident Networks for Object Detection_第2张图片

上表是文章中一个验证感受野大小对不同尺寸物体的检测效果的影响,发现增大感受野(增大dilated的系数)会使得大物体的检测效果更好,但却让小物体变差了,因此直接的想法就是用多个具有不同感受野的分支结合。至于dilated,只需要在backbone上对应的3x3卷积进行dilated即可,不需要改变权重。

但是仅仅添加分支还是会存在物体尺寸和感受野尺寸不匹配导致性能降低的情况,因此文章像SNIP一样,一个分支只负责训练一定大小范围内的物体,如下

l_i和u_i分别是第i个分支的尺寸下限和上限。需要注意的是TridentNet的三个范围分别是[0,90],[30,160],[90,∞],并不是完全没有交集的。对于一个ground truth,只会匹配到它对应的分支上的anchor。在inference的时候则是每个分支会先filter掉尺寸不合范围的检测结果,然后对所有分支的结果进行NMS。然而为了加速inference过程,还可以只使用一个分支来近似完整网络的效果,文章中使用的是中间尺寸分支,这样一来,TridentNet在inference时和标准faster r-cnn相比不会增加任何额外的时间。

总的来说,TridentNet一共有三个创新点:不同感受野的分支,scale-aware的训练方法,分支之间的权重共享。文章做了实验分别验证了这三个点的有效性,并且与DCN兼容。

论文阅读:Scale-Aware Trident Networks for Object Detection_第3张图片

当然文章也做了实验,比较了不同分支个数对性能的影响,发现3个分支比较合适。我比较关心的是文中的TridentBlock应该加在网络的什么地方,文章以ResNet-59的4个stage做了实验,结果如下

论文阅读:Scale-Aware Trident Networks for Object Detection_第4张图片

那么我的理解就是要加在高层吧。那么应该将多少卷积进行dilated呢,文章也做了实验

论文阅读:Scale-Aware Trident Networks for Object Detection_第5张图片

可以看到当超过10个block之后网络的性能就基本稳定了,也就是当分支之间的感受野差异足够大了,网络性能就稳定了。

你可能感兴趣的:(论文阅读:Scale-Aware Trident Networks for Object Detection)