Advertisement

【论文笔记】:Scale-Aware Trident Networks for Object Detection(TridentNet)

阅读量:

&Title:

Scale-Aware Trident Networks for Object Detection

&Summary

检测任务中存在目标尺寸多样化 的问题,为了解决这一问题,作者采用的做法如下:

  • 为了使模型对不同尺寸目标的“表达能力”近似,作者借鉴了SNIP的特征提取网络,采用了“scale-aware”的并行结构;
  • 为了加快模型的推理速度,作者采用了dilated convolution得到不同感受野的特征图,从而实现检测不同尺度目标的目的,取代了SNIP中的特征金字塔生成不同尺度目标的做法。(可以认为这一点是最大的创新)

文章通过提出TridentNet ,来生成具有统一表征能力的特定尺度特征图 ,以此解决目标检测中尺度多变问题 。其中,作者建立了一个并行多分支结构它们共享参数,但感受野不同

&Research Objective

解决目标检测中尺度多变问题。

&Problem Statement

尺度问题一直是目标检测领域比较核心的待解决的问题 。目前,对于这个问题还没有比较彻底的解决思路,有两种比较好的方法来处理这一问题:

  • 图像金字塔,即网络输入图像的多尺度 ,比如常见的multi-scale test的trick,这种方法需要耗费很大的计算量。
  • 特征金字塔,即融合不同深度的feature map 来获得多尺度特征 ,比如 FPN,这种方法速度更快,但是性能不好,按照论文的说法,是因为它牺牲了不同尺度的特征一致性(即不同scale的feature经过不同深度不同参数的变换,反应出来的特征会更全面和表达能力更强)

抛除这些结构上的因素,具体到DNN的设计上,影响DNN对尺度处理能力的因素 主要有两点:

  • 较深的层一般感受野越大,因此处理大目标的能力较强。
  • 过多的下采样层会损伤网络对小目标的检测能力

这篇文章探究了另一个可能的关键因素对目标检测的影响,即感受野的大小问题。

&Method(s)

感受野的探究

那么感受野和检测效果之间到底存在什么关系?

作者做了一个关于感受野和检测效果之间的联系的对比实验,实验结果如Table1所示。这个实验通过修改Faster RCNN算法 的特征提取网络中卷积层的dilation参数 控制感受野大小 (当dilation参数为1时等效于常规卷积层),不同的rate可以使网络获得不同的感受野。通过resnet 50和resnet 101进行探究实验,改变了conv4 stage 中residual blocks中的卷积为dilated convolution,得到了不同rate对不同尺度的performance:
在这里插入图片描述
结论 :可以看出不同尺度目标的最高AP值对应的dilation参数(也就是不同感受野)是不同的,而且存在明显的规律Dilation的rate越大,感受野越大,对大尺度的检测效果越好。 ),这说明针对目标尺度大小设计对应的感受野可以使检测模型的整体效果达到最佳

在此基础上,自然而然地有了一个想法,如果可以对不同尺度的目标、同时能有大小不同的感受野去反应它们的特征,不就可以取得很好的效果了吗?

TridentNet

既然要同时有不同的感受野,就要有多分支结构。作者提出的设想就是对某个特定的网络结构来说,只改变kernel不为1的卷积,为它们添加多个分支 ,每个分支采用不同的dilation rate 。以ResNet的residual block为例,一般是1x1,3x1,1x1连续三个卷积核,其中3x3的卷积 将用上述方法改良,获得三个由不同rate的dilate卷积构成的并行分支 ,改良后的结构称之为trident blocks。
在这里插入图片描述
TridentNet 结构主要包括3个完全一样的分支,唯一不同的只是膨胀卷积的膨胀率。如上图,从上到下膨胀率分别为1,2,3后文有关于膨胀率的解释和相关计算 ),分别检测小,中,大的目标且三个分支共享权值

TridentNet 结构的改进点归纳:

  • 将原本特征提取网络(backbone)的单支路卷积层 替换成3个支路且dilated参数不同的dilated卷积层 ,这就是论文中提到的多分枝(multi-branch)思想
  • 权重共享 (weight sharing among branches)
  • 指定尺度过滤训练 (scale-aware training scheme),是指不同dilated参数的3个支路分别检测不同尺度的目标。

每个分支的详细结构如下: 图源:目标检测网络之三叉戟TridentNet 博主:watersink
在这里插入图片描述
在训练过程中,对每一个分支都进行优化。因此,需要对目标的ground truth进行大小测试:
在这里插入图片描述
假设,w,h为ground truth的宽,高。Li,ui表示实验中定义的最小的面积和最大的面积。在coco实验中分别为3232和9696。

该公式可以实现小的目标走第一个分支,中等目标走第二个分支,大的目标走第三个分支。而不是所有目标都走所有分支。这样就可以进行有针对性的训练
测试阶段 ,只使用中间的那个分支进行推断,然后对结果进行NMS ,输出最终的结果。

该策略类似于SNIP的思路。核心就是,让感受野小的分支训练小尺度的目标,感受野大的分支训练大尺度的目标,就是将所有尺度的目标按照大小的不同分配到不同的分支上,各个分支各司其职。
具体实现来说,是给每个分支指定一个范围,若gt的大小超出该范围则对该分支来说属于非法的gt,不计入考虑。在RPN的anchor label assignment阶段,只选择valid的gt

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

&Evaluation

作者一个做了七个实验,

  1. 甩个文章链接:目标检测网络之三叉戟TridentNet ,里面有简要总结的七个实验的结果。
  2. 论文中实验比较丰富,比如分支数量的选择、在主网络的哪些部分添加trident block等,很有说服力,整体上来看解决方案非常干净、清爽,可以直接看论文的实验细节:Scale-Aware Trident Networks for Object Detection

&Conclusion

在本文中,作者提出了一种简单的物体检测方法Trident Network,用于构建具有相同表征能力的网络尺度特定的特征图。 为我们的多分支结构提出了一种规模感知训练方案,使每个分支具备相应尺度的专业能力。 主要分支的快速推理方法 使TridentNet在没有任何额外参数和计算的情况下实现了对基线方法的显着改进。
提出的TridentNet ,基于ResNet-101 的基础骨架网络在coco数据集上达到了单模型48.4的准确性, 刷新了coco记录。

&Notes

视野域

检测领域一直存在一个scale variation问题,大小物体对视野域的需要是不一样的,deformable cnn的作者daijifeng老师就提到一个说法:最好的视野域就是刚好“覆盖自己”,不要太大也不要太小 。前人有3种途径:

  • 利用RCNN去原图上扣proposal,强制使得所有物体的视野域就是自己 Revisiting RCNN
  • Deformable cnn,可变型卷积不同物体学习不同的视野域 论文中也有可视化的图 Deformable ConvNets v2
  • Image Pyramid SNIP系列 分三路RPN学习不同尺度的物体SNIP
  • Feature Pyramid FPN系列能部分解决尺度问题,为了兼容大小物体,导致大小物体特征 的“表达能力”都不是最强。

权值共享

权重共享的含义是三个分支的三个kernel使用相同的参数,区别只是rate不同。这样有如下好处

  • 减少了参数数量 ,Trident Network和原来的网络相比,不需要添加额外的参数。
  • 符合motivation ,也就是文章一开始提到的feature pyramids的不足,让不同尺度的目标在同一层经过一个统一的变换,增加特征表达能力。
  • 变换参数,也就是卷积参数 ,可以同时在不同感受野的分支上学习所有尺度的目标,样本数量增加,也减少了过拟合问题

scale-aware训练策略

该策略类似于SNIP的思路。核心就是,让感受野小的分支训练小尺度的目标,感受野大的分支训练大尺度的目标,就是将所有尺度的目标按照大小的不同分配到不同的分支上,各个分支各司其职。
具体实现来说,是给每个分支指定一个范围,若gt的大小超出该范围则对该分支来说属于非法的gt,不计入考虑。在RPN的anchor label assignment阶段,只选择valid的gt。因为和SNIP的思想 很类似这里不再多做介绍。


快速推理

简单来说,由于存在多分支,最后inference的时候,会像SNIP一样,每个分支预测出来的结果,只有大小没超出该分支合法范围的gt才作数。最后会统计所有分支的结果进行汇总。而作者提出的fast inference approximation 就是用rate为2 的分支(rate=2的为主要分支)近似替代三个分支,来加速预测。


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

dilated conv原始论文中的示意图:
在这里插入图片描述
(a)图对应3x3的1-dilated conv,和普通的卷积操作一样。
(b)图对应3x3的2-dilated conv,实际的卷积kernel size还是3x3,但是空洞为1,也就是对于一个7x7的图像patch,只有9个红色的点和3x3的kernel发生卷积操作,其余的点略过。也可以理解为kernel的size为7x7,但是只有图中的9个点的权重不为0,其余都为0。 可以看到虽然kernel size只有3x3,但是这个卷积的感受野已经增大到了7x7(如果考虑到这个2-dilated conv的前一层是一个1-dilated conv的话,那么每个红点就是1-dilated的卷积输出,所以感受野为3x3,所以1-dilated和2-dilated合起来就能达到7x7的conv)。
(c)图是4-dilated conv操作,同理跟在两个1-dilated和2-dilated conv的后面,能达到15x15的感受野。对比传统的conv操作,3层3x3的卷积加起来,stride为1的话,只能达到(kernel-1)*layer+1=7的感受野,也就是和层数layer成线性关系,而dilated conv的感受野是指数级的增长。
dilated的好处是不做pooling损失信息的情况下,加大了感受野,让每个卷积输出都包含较大范围的信息。
注:空洞卷积(dilated convolution)理解 。该文章是空洞卷积的详细理解,包括存在的问题。

感受野的计算:
假设膨胀率为ds,使用的卷积核大小为33,则使用膨胀卷积的感受野大小为3+22*(ds-1),例如,假设:
ds=1,表示不进行膨胀,感受野大小为33
ds=2,表示进行膨胀,感受野大小为7
7
ds=4,表示进行膨胀,感受野大小为15*15


参考

推荐文章

全部评论 (0)

还没有任何评论哟~