目标检测之感受野-dilated conv -----TridentNet

论文: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
 

处理多尺度问题的方法:

目标检测之感受野-dilated conv -----TridentNet_第1张图片

图像金字塔,传统的检测算法
特征金字塔,FPN
本文的三叉戟网络,分为3个分支,所有的参数都一样,唯一的区别就是膨胀卷积的膨胀率不一样。
 

膨胀卷积Dilated convolution(空洞卷积Atrous convolution):

目标检测之感受野-dilated conv -----TridentNet_第2张图片

假设膨胀率为ds,使用的卷积核大小为3*3,则使用膨胀卷积的感受野大小为3+2*2*(ds-1),

例如,假设

ds=1,表示不进行膨胀,感受野大小为3*3
ds=2,表示进行膨胀,感受野大小为7*7
ds=4,表示进行膨胀,感受野大小为15*15
实验验证,随着感受野的增大,小目标的检测准确性也开始下降,但是大目标的检测准确性开始上升。

目标检测之感受野-dilated conv -----TridentNet_第3张图片

TridentNet 网络结构:

目标检测之感受野-dilated conv -----TridentNet_第4张图片

TridentNet 模块主要包括3个完全一样的分支,唯一不同的只是膨胀卷积的膨胀率。从上到下,膨胀率分别为1,2,3,分别检测小,中,大的目标。三个分支共享权值。

每个分支的详细结构如下,

目标检测之感受野-dilated conv -----TridentNet_第5张图片

在训练过程中,对每一个分支都进行优化。因此,需要对目标的ground truth进行大小测试,

假设,w,h为ground truth的宽,高。Li,ui表示实验中定义的最小的面积和最大的面积。在coco实验中分别为32*32和96*96。

基于此公式实现小的目标走第一个分支,中等目标走第二个分支,大的目标走第三个分支。而不是所有目标都走所有分支。这样就可以进行有针对性的训练。

在测试阶段,只使用中间的那个分支进行推断,然后对结果进行NMS,输出最终的结果。

当然这样做会有一些精度的损失,但是好处就是不会引入额外的参数,不会增加额外的计算量。

 

实验结果:

Multi-branch ,Weight-sharing, Scale-aware有效性证明:

目标检测之感受野-dilated conv -----TridentNet_第6张图片

TridentNet 模块分支个数的实验:

目标检测之感受野-dilated conv -----TridentNet_第7张图片

TridentNet 模块在Resnet不同block中的实验:

目标检测之感受野-dilated conv -----TridentNet_第8张图片

TridentNet 每个分支中unit个数的实验:

目标检测之感受野-dilated conv -----TridentNet_第9张图片

TridentNet 各分支检测结果的评估:

目标检测之感受野-dilated conv -----TridentNet_第10张图片

TridentNet 中间分支在coco测试的结果:

目标检测之感受野-dilated conv -----TridentNet_第11张图片

coco数据集结果:

目标检测之感受野-dilated conv -----TridentNet_第12张图片

总结:

TridentNet 是一种尺度敏感的检测框架,并且训练过程也得进行尺度敏感的训练。检测准确性很高,并且不会有额外的参数,额外的计算量。是对ASPP结构的一种升华。

你可能感兴趣的:(Python学习,tensorflow,pytorch,目标检测)