论文:Scale-Aware Trident Networks for Object Detection
Github:https://github.com/TuSimple/simpledet/tree/master/models/tridentnet
图森的工作
论文提出了TridentNet ,基于ResNet-101 的基础骨架网络在coco数据集上达到了单模型48.4的准确性,刷新了coco记录。
论文贡献:
- 首次提出感受野(receptive field)对目标检测任务中不同scale大小物体的影响,并进行相关实验验证
- 提出了适应于多尺度的目标检测框架TridentNet
- 使用参数共享的方法,提出了训练时3个branch,测试时只使用其中一个branch,这样保证推断时不会有额外参数和计算量的增加
- 使用ResNet-101的backbone在coco数据集上达到48.4的map
处理多尺度问题的方法:
- 图像金字塔,传统的检测算法
- 特征金字塔,FPN
- 本文的三叉戟网络,分为3个分支,所有的参数都一样,唯一的区别就是膨胀卷积的膨胀率不一样。
膨胀卷积Dilated convolution(空洞卷积Atrous convolution):
假设膨胀率为ds,使用的卷积核大小为3*3,则使用膨胀卷积的感受野大小为3+2*2*(ds-1),
例如,假设
- ds=1,表示不进行膨胀,感受野大小为3*3
- ds=2,表示进行膨胀,感受野大小为7*7
- ds=4,表示进行膨胀,感受野大小为15*15
实验验证,随着感受野的增大,小目标的检测准确性也开始下降,但是大目标的检测准确性开始上升。
TridentNet 网络结构:
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 模块分支个数的实验:
TridentNet 模块在Resnet不同block中的实验:
TridentNet 每个分支中unit个数的实验:
TridentNet 各分支检测结果的评估:
TridentNet 中间分支在coco测试的结果:
coco数据集结果:
总结:
TridentNet 是一种尺度敏感的检测框架,并且训练过程也得进行尺度敏感的训练。检测准确性很高,并且不会有额外的参数,额外的计算量。是对ASPP结构的一种升华。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:目标检测网络之三叉戟TridentNet - Python技术站