paper:CBNet: A Novel Composite Backbone Network Architecture for Object Detection
official implementation:GitHub - VDIGPKU/CBNet_caffe: Composite Backbone Network (AAAI20)
背景
一般来说,在基于CNN的目标检测模型中,用于提取检测对象基本特征的骨干网络通常是为图像分类任务设计的,并在ImageNet数据集上进行预训练。如果一个骨干网能够提取出更多的表示特征,那么检测模型相应地也会表现得更好。换句话说,一个更强大的backbone可以带来更好的检测性能。
但通过设计一个新的更强大的骨干网络并在ImageNet上预训练来获得更好的检测性能,代价很大。并且由于几乎所有现有的骨干网络最初都是针对分类任务设计的,直接使用它们提取基本特征进行目标检测可能只能得到次优的性能。
本文的创新点
本文提出了一种新的方法,通过聚合多个相同的backbone来构建一个更强大的针对目标检测的骨干网络,称为复合骨干网络(Composite Backbone Network, CBNet),显著提高了各种检测模型的性能。
方法介绍
Architecture of CBNet
CBNet的结构由 \(K(K\ge2)\) 个相同backbone组成。为了简便起见,K=2的情况称为Dual-Backbone(DB),K=3的情况称为Triple-Backbone(TB)。
如图1所示,CBNet包含两种backbone,Lead Backbone \(B_{K}\) 和Assistant Backbones \(B_1,B_2,...,B_{K-1}\)。每个backbone包含 \(L\) 个stage(通常L=5),每个stage包含若干个卷积层。backbone的第 \(l\) 个stage实现一个非线性变换 \(F^{l}(\cdot)\)。
在传统的只有一个backbone的网络中,第 \(l\) 个stage以前一个 \(l-1\) stage的输出(记为 \(x^{l-1}\))作为输入,可以表示为
而在CBNet中,我们利用Assistant Backbones \(B_1,B_2,...,B_{K-1}\) 来增强Lead Backbone \(B_{K}\) 的特征,通过迭代的以前一个backbone的输出作为下一个backbone输入的一部分的方式。具体而言,backbone \(B_{K}\) 的第 \(l\) 个stage的输入是 \(B_{K}\) 前一个 \(l-1\) stage的输出(记为 \(x^{l-1}\))和并行的前一个backbone \(B_{K-1}\) 的下一个stage的输出(记为 \(x^{l}_{K-1}\))的融合,表示如下
其中 \(g(\cdot)\) 表示复合连接,包括一个1x1卷积和BN层用来减少通道以及一个上采样操作。这种连接将前一个backbone中相邻的更高一层stage的特征输入到下一个backbone中,因此称为Adjacent Higher-Level Composition(AHLC)。
对于目标检测任务,只有Lead Backbone的 \(x^{l}_{K}(l=2,3,...,L)\) 输入到RPN或检测head中。而Assistant Backbone每个stage的输出只输入到相邻下一个backbone中。此外,CBNet中的骨干可以采用各种骨干结构,并可以直接用单个backbone的预训练模型进行初始化。
Other possible composite styles
Same Level Composition(SLC)一种直观简单的连接是直接融合同一个stage的特征,表示如下
图3b展示了K=2时的SLC的结构。
Adjacent Lower-Level Composition(ALLC)与AHLC相反,另一种直观的连接方式是将前一个骨干相邻低一级stage的输出特征输入到下一个backbone中,表示如下
注意这里论文中的式子有问题,应该是 \(x^{l}_{k}=F^l_k(x^{l-1}_{k}+g(x^{l-2}_{k-1})),l\ge2\)
图3c展示了K=2时的ALLC的结构。
Dense Higher-Level Composition(DHLC)在DenseNet中,每一层到连接到后续所有层从而在一个stage中构建dense connection。受此启发,我们在CBNet中也可以使用密集连接,表示如下
如图3d所示,当K=2时,我们聚合Assistance backbones中所有higher-level的特征,并添加到Lead Backbone中前一个stage的输出中。
实验结果
如表2所示,其中Single表示原始的单个backbone结构,DB表示K=2的CBNet,TB表示K=3的CBNet。可以看到,CBNet显著提高了baseline的精度,无论是在目标检测任务的 \(AP_{bbox}\) 还是在实例分割的 \(AP_{mask}\) 指标上。
Comparisions of different composite styles
表4展示了不同连接方式的性能。首先是SLC,效果比原始的单骨干还差,作者认为这可能是因为SLC结构会带来严重的参数冗余。因为CBNet中两个骨干同一stage提取的特征是相似的,因此SLC不能比使用单一主干学习更多的语义信息。也就是说,网络参数没有得到充分的利用,但给训练带来了很大的困难,导致结果更糟。
而ALLC的效果就更差了,作者推断,如果我们直接将之前主干的较低级(即较浅)特征添加到后续主干的较高层(即较深)特征中,后者的语义信息将受到很大的损害。相反,如果我们将前主干的深层次特征添加到后主干的浅层特征中,后者的语义信息可以得到很大的增强。
最后是ADLC,虽然相比原始单骨干效果得到了提升,但与AHLC相比,它使用了更多的复合连接,却并没有得到比AHLC更好的性能。作者推断,复合主干网络的成功主要在于相邻阶段之间的复合连接,而其他复合连接由于距离太远,并没有丰富太多的特征。
表3展示了CBNet和其它SOTA检测模型的对比
本文提出的CBNet的主要缺点是它会降低推理速度,因为它使用了更多骨干网络来提取特征,从而增加了计算复杂度。如表6所示, DB将FPN的AP提高了1.6%,但检测速度从8.1fps降低到了5.5fps。为了缓解这个问题,作者提出了一个CBNet的加速版本,如图5所示,删除了辅助骨干的两个前期的stage。如表6所示,加速版本显著提高了速度(5.5fps到6.9fps)同时又不会严重影响精度(AP从41.0到40.8)。