转载: https://zhuanlan.zhihu.com/p/54334986git
http://haha-strong.com/2019/07/25/20190725-TridentNet/github
开源代码:https://github.com/TuSimple/simpledet/tree/master/models/tridentnet算法
Facebook detectron2 官方收录:https://github.com/facebookresearch/detectron2/tree/master/projects/TridentNet网络
算法思路
将网路backbone最后一个改为三个不一样卷积率的卷积层并联,实现对不一样尺度特征的提取。
以下图所示:框架
motivation
对于一个backbone net而言有几个因素会影响他们的性能,下采样率、网络深度以及感觉野。前面两个因素已经有人研究过了,对于目标检测中的感觉野的影响尚未人专门对此进行研究。本文经过对网的最后一个backbone中的卷积层改变卷积的空洞率以实现输出特征的感觉野的调整。实验证实,不一样的感觉野对不一样尺度目标的检测有着不一样的影响,大的感觉野对尺度较大的目标检测性能较好,小的感觉野对小目标的检测性能较好。ide
作法
做者提出的网络框架以下图所示:性能
如上图所示,做者在特征提取的最后一层增长了一个多分支的卷积层,用来提取不一样尺度的特征信息。为了减小网络参数量这几个网络共享参数,便于网络的优化,在这里做者经过实验验证当采用三个不一样卷积空洞率时网络的性能最佳。实验结果以下图所示:学习
Figure 3: A trident block constructed from a bottleneck residual block.测试
同时,做者也经过实验证实将TridentNet添加在最后一层对网络的性能提高是最佳的:优化
facebook/detectron2中TridentNet快速版本就是将ResNet50中的res4中某个卷积替换为TridentConv便可,而且这里TridentConv中不一样空洞率的卷积最后是经过concat后输出,也就是能够无缝替换到ResNet结构中:
Scale-aware training Scheme
最后一个设计则是借鉴SNIP,为了不receptive field和scale不匹配的状况,TridentNet对于每个branch只训练必定范围内尺度样本,避免极端scale的物体对于性能的影响,根据ground truth box的宽w和高h,对每一个分支branch i 选择proposal 的ROI的最大最小尺度为:li和ui。
性能
上图所示,是该算法与现有算法的性能比较。这些算法都采用相同的网络backbone,ResNet-101.
与采用多层特征融合的SSD算法相比,本算法性能提高10个点左右。
与Fastr-RCNN相比,本算法较之有8个点的性能提高。
同时,多分支不一样空洞率和可行变卷积的联合使用能够将网络的性能比提高6个点左右。代表不一样感觉野的应用有助于算法对不一样目标的检测。
总结一下
TridentNet在原始的backbone上作了三点变化:第一点是构造了不一样receptive field的parallel multi-branch,第二点是对于trident block中每个branch的weight是share的。第三点是对于每一个branch,训练和测试都只负责必定尺度范围内的样本,也就是所谓的scale-aware。这三点在任何一个深度学习框架中都是很是容易实现的。