论文名称:CBNet: A Novel Composite Backbone Network Architecture for Object Detection
论文作者:Yudong Liu, Yongtao Wang, Siwei Wang, TingTing Liang, Qijie Zhao, Zhi Tang, Haibin Ling
发行时间:Submitted on 9 Sep 2019
论文地址:https://arxiv.org/abs/1909.03625
代码开源:https://github.com/PKUbahuangliuhe/CBNet
本文提出一种新型的特征融合算法: CBNet, 采用骨干网络融合, 有效提高了对象检测和实例分割的精确度.
相比于Mask RCNN采用单一的ResNet作为Backbone, 作者提出采用多Backbone特征融合的CBNet, 即采用现有的多个同类型的Backbone进行跨骨干网络的特征传播得到语义更丰富的feature.
如上图所示, 从 B a c k b o n e 1 \rm Backbone~1 Backbone 1开始, 提取到的特征经过一定的处理后回传到下一个骨干网络的 B a c k b o n e 2 \rm Backbone~2 Backbone 2的前一层处, 不断迭代, 然后使用最后一个骨干网络 B a c k b o n e K \rm Backbone~K Backbone K的各层特征结合FPN进行对象检测和实例分割, K \rm K K是使用的backbone数量.
作者提出了如下四种相邻骨干网络特征的连接方法: AHLC(临近高层连接)、SLC(同层连接)、ALLC(临近低层连接)、DHLC(密集高层连接).
~\\~
~\\~
经过对比实验, 得出这些连接方法中 AHLC 性能最好:
故笔者只讲述 AHLC 的实现方法, 想了解其他方法的请自行阅读原论文
假设CBNet一共有 K K K 个Backbone, 每个Backbone由 L L L 个stage组成(如Resnet50就由5个stage组成), 每个stage由多个有这相同大小的feature map的卷积层组成. 记第 k k k 个Backbone的第 l l l 个stage的非线性转换为 F k l ( ⋅ ) F_k^l(\cdot) Fkl(⋅)
则在第 k k k 个Backbone的第 l l l 的stage的输出 x k l x_k^l xkl 为:
x k l = F k l ( x k l − 1 + g ( x k − 1 l ) ) , l ≥ 2 x_k^l=F_k^l(x_k^{l-1}+g(x_{k-1}^l)),~l \geq 2 xkl=Fkl(xkl−1+g(xk−1l)), l≥2
其中, x k l − 1 x_k^{l-1} xkl−1 是第 k k k 个Backbone的第 l − 1 l-1 l−1 个stage的输出, x k − 1 l x_{k-1}^{l} xk−1l 是第 k − 1 k-1 k−1 个Backbone的第 l l l 个stage的输出, g ( ⋅ ) g(\cdot) g(⋅) 表示一种复合连接, 实际上是由一个 1 × 1 1\times 1 1×1的卷积层和一个BN层和一个上采样层所组成.
作者在实验中发现, 并不是选取的Backbone数量越多越好, 在 K K K超过3个后, 性能的提升并不明显.
~\\~
~\\~
故 K K K最多取到 3 3 3, 当然, 融合的骨干网络越多, 速度越慢, 故需在精度和时间上有所取舍.
对于比赛, 通常采用 2 2 2个骨干网络进行融合, 这样在时间和精度上都较优.
对于研究, 可以考虑采用更多的骨干网络进行融合(如 3 3 3个), 优先精度.
当然, 连接方式都是采用 AHLC.