论文地址:https://arxiv.org/pdf/1901.01892.pdf
代码地址:https://github.com/TuSimple/simpledet/tree/master/models/tridentnet
论文提出了TridentNet,基于ResNet-101的骨干网络在COCO数据集上达到了单模型48.4的准确率,刷新了COCO新记录。
Contributions
- 首次提出了感受野对目标检测任务中不同scale大小物体的影响,并进行了相关验证;
- 提出了适应于多尺度的目标检测框架TridentNet;
- 使用参数共享的方法,提出了训练时3个分支,测试时只用其中1个分支,保证推理时不会有额外的参数和计算量的增加;
- 使用ResNet-101的骨干网络,在COCO数据集上达到了48.2的mAP。
处理多尺度问题的方法
- 使用图像金字塔方法,传统的检测算法,在每个scale上独立地进行特征提取和目标检测。
- 特征金字塔方法,利用CNN中不同层的特征来解决多尺度问题,比较节约算力。
- 本文的Trident Net,分为3个分支,所有的参数都一样,唯一的区别就是膨胀卷积和膨胀率不同。
Dilated Convolution(Atrous Convolution)
图 1. (a)对应的1-dilated Conv,和普通卷积操作一样。(b)对应的2-dilated Conv,实际的卷积核大小还是,但是dilation 为1,也就是对于一个的图像patch,只有9个红色的点和的卷积核发生卷积操作,其余的点略过。也可以理解为卷积核的大小是,但是只有图中9个点的权重不是0,其余都是0。可以看到虽然卷积核大小只有,但是这个卷积的感受野已经增加到了(如果考虑到这个2-dilated Conv 的前一层是一个1-dilated Conv的话,那么每个红色点就是1-dilated 的卷积输出,所以感受野是,所以1-dilated Conv 和 2-dilated Conv 合起来就能达到的Conv)。©图是4-dilated Conv,同理更在1-dilated 和 2-dilated Conv后面,能达到的感受野。对比传统的卷积操作,3层的卷积加起来,stride 为1的话,只能达到的感受野,也就是和层数成线性关系,而dilated conv的感受野是指数级地增长。
假设膨胀率为,使用的卷积核大小是,则使用膨胀卷积的感受野大小为。
例如,假设
- ,表示不进行膨胀,感受野大小为;
- ,表示进行膨胀,感受野大小为;
- ,表示进行膨胀,感受野大小为;
实验证明,随着感受野的增大, 小目标的检测准确率也开始下降,但是大目标的检测准确率开始上升。
TridentNet的网络结构:
TridentNet模块主要有3个完全一样的分支,唯一不同的是膨胀卷积和膨胀率。从上到下,膨胀率分别是1,2,3,分别检测小、中、大的物体。三个分支共享权值。
每个分支的详细结构如下:
在训练过程中,对每一个分支都进行优化。因此,需要对目标物体的ground truth进行大小测试,
假设,为ground truth的宽和高。分别表示定义的最小面积和最大面积。在COCO实验中,分别为和。
基于此公式实现的小目标走第一个分支,中等目标进入第二个分支,大目标进入第三个分支。而不是所有的目标都走所有的分支,这样就可以针对性地进行训练。
在测试阶段,只使用中间的那个分支进行推断,然后对结果进行NMS,输出最终的结果。
当然这样做会损失一些精度,但是好处是不会引入额外的参数,不会增加额外的计算量。
实验结果
Multi-branch ,Weight-sharing, Scale-aware有效性证明:
TridentNet模块分支个数的实验:
TridentNet 每个分支中模块的数量:
TridentNet各分支检测结果的评估:
TridentNet中间分支在COCO测试的结果:
COCO数据集结果:
Conclusion
TridentNet 是一种scale-aware的检测框架,并且训练过程也得进行scale-aware的训练。检测准确性很高,不会有额外的参数或计算量。