Paper Reading:TridentNet
论文:Scale-Aware Trident Networks for Object Detection
发表时间:2019
发表作者:(University of Chinese Academy of Sciences)Yuntao Chen, (TuSimple)Naiyan Wang
发表刊物/会议:ICCV
论文链接:论文链接
论文代码:代码链接
TridentNet
这篇文章主要要解决的问题便是目标检测中最为棘手的scale variation问题。使用了非常简单干净的办法在标准的COCO benchmark上,使用ResNet101单模型可以得到MAP 48.4的结果,远远超越了目前公开的单模型最优结果。
多尺度问题
先简单回顾一下现有处理多尺度问题的两大类方法。第一大类,也是从非Deep时代,乃至CV初期就被就被广泛使用的方法叫做image pyramid。在image pyramid中,我们直接对图像进行不同尺度的缩放,然后将这些图像直接输入到detector中去进行检测。虽然这样的方法十分简单,但其效果仍然是最佳,也后续启发了SNIP这一系列的工作。单论性能而言,multi-scale training/testing仍然是一个不可缺少的组件。然而其缺点也是很明显的,测试时间大幅度提高,对于实际使用并不友好。另外一大类方法,也是Deep方法所独有的,也就是feature pyramid。最具代表性的工作便是经典的FPN了。这一类方法的思想是直接在feature层面上来近似image pyramid。非Deep时代在检测中便有经典的channel feature这样的方法,这个想法在CNN中其实更加直接,因为本身CNN的feature便是分层次的。从开始的MS-CNN直接在不同downsample层上检测大小不同的物体,再到后续TDM和FPN加入了新的top down分支补充底层的语义信息不足,都是延续类似的想法。然而实际上,这样的近似虽然有效,但是仍然性能和image pyramid有较大差距。
总结如下:
- 图像金字塔,传统的检测算法
- 特征金字塔,FPN
- 本文的三叉戟网络,分为3个分支,所有的参数都一样,唯一的区别就是膨胀卷积的膨胀率不一样。
膨胀卷积Dilated convolution(空洞卷积Atrous convolution)
假设膨胀率为ds,使用的卷积核大小为\(3*3\),则使用膨胀卷积的感受野大小为\(3+2*2*(ds-1)\),
例如,假设
1、ds=1,表示不进行膨胀,感受野大小为\(3*3\)
2、ds=2,表示进行膨胀,感受野大小为\(7*7\)
3、ds=4,表示进行膨胀,感受野大小为\(15*15\)
实验验证,随着感受野的增大,小目标的检测准确性也开始下降,但是大目标的检测准确性开始上升。
网络结构
TridentNet 模块主要包括3个完全一样的分支,唯一不同的只是膨胀卷积的膨胀率。从上到下,膨胀率分别为1,2,3,分别检测小,中,大的目标。三个分支共享权值。
每个分支的详细结构如下,
在训练过程中,对每一个分支都进行优化。因此,需要对目标的ground truth进行大小测试,
假设,w,h为ground truth的宽,高。Li,ui表示实验中定义的最小的面积和最大的面积。在coco实验中分别为\(32*32\)和\(96*96\)。
基于此公式实现小的目标走第一个分支,中等目标走第二个分支,大的目标走第三个分支。而不是所有目标都走所有分支。这样就可以进行有针对性的训练。
在测试阶段,只使用中间的那个分支进行推断,然后对结果进行NMS,输出最终的结果。
当然这样做会有一些精度的损失,但是好处就是不会引入额外的参数,不会增加额外的计算量。
实验结果
Multi-branch ,Weight-sharing, Scale-aware有效性证明:
TridentNet 每个分支中unit个数的实验:
TridentNet 各分支检测结果的评估:
TridentNet 中间分支在coco测试的结果:
coco数据集结果:
总结:
TridentNet 是一种尺度敏感的检测框架,并且训练过程也得进行尺度敏感的训练。检测准确性很高,并且不会有额外的参数,额外的计算量。是对ASPP结构的一种升华。
参考:
TridentNet