CBNetV2论文阅读

CBNetV2论文解读

论文地址:CBNetV2:A Composite Backbone Network Architecture for Object Detection

什么是CBNetV2?

CBNetV2使用开源的预训练好的主干网络组成高性能的检测器。

这篇论文的主要贡献在于:

1.提出了更一般、更高效的网络CBNetV2。

2.提出了Dense Higher-Level Composition (DHLC)风格的连接方式和Assistant Supervision(辅助监督)模块,能够更高效的使用预训练权重。

3.Dual-Swin-L在COCO数据集上单模型单尺度的表现超过了Swin-L

CBNetV2的结构

在这里插入图片描述

图1

CBNetV2的主干网络分为两个部分:Assisting Backbones 和 Lead Backbone。这里我将其称为辅助主干和主导主干。主导主干仅包含一个主干网络,辅助主干由多个主干网络组成。

如上图所示,辅助主干的每一个stage的输出流入到其继承主干(即连接在其后的下一个主干网络)的低层级作为输入。最后主导主干的特征将被“喂”进Neck和Detection Head用于回归和分类预测。与简单的更深或者更宽的网络相比,CBNetV2整合了多个主干网络的高层级和低层级特征,并且将感受野扩展到更高效的目标检测。值得注意的是,每一个主干网络都由已知的开源预训练权重进行初始化。

在这里插入图片描述

图2

CBNetV2由K个相同的主干网络构成,其中K ≥ 2 \geq2 2,当K=2时,我们称其为Dual-Backbone(DB),K=3时称其为Triple-Backbone(TB)。

如图1所示,两个类型的主干:Lead Backbone B k B_k Bk 和 Assistant Backbone B 1 、 B 2 、 . . . . B k − 1 B_1、B_2、....B_{k-1} B1B2....Bk1。每个主干网络包含L个stage(通常L=5)。并且每个stage包含若干个卷积层能够输出相同大小的特征图以便输入。第 l − t h l-th lthstage具有非线性转换 F l F^l Fl()。

l l l层的输出:
x l = F l ( x l − 1 ) , l ≥ 2 x^l=F^l(x^{l-1}),l\geq2 xl=Fl(xl1),l2
不同的是我们采用辅助主干来提高主导主干的表达能力,因此,等式为:
x k l = F k l ( x k l − 1 + g l − 1 ( x k − 1 ) ) , l ≥ 2 , k = 2 , 3 , . . . , K x^l_k=F^l_k(x^{l-1}_k+g^{l-1}(x_{k-1})),l\geq2,k=2,3,...,K xkl=Fkl(xkl1+gl1(xk1)),l2,k=2,3,...,K
g l − 1 ( ) g^{l-1}() gl1()代表连接方式, x k − 1 x_{k-1} xk1代表着辅助主干 B k − 1 B_{k-1} Bk1的输出,经过连接转换的 x k − 1 x_{k-1} xk1和第K个主干的第l-1层stage的输出共同作为第l层stage的输入,通过非线性转换 F k l F^l_k Fkl得到第K个主干的第l层stage的输出 x k l x^l_k xkl

值得注意的是每个主干网络的第一个stage是权重共享的。

对于检测任务,仅仅主导主干的输出特征会输入到neck和head,辅助主干的输出输入到它的继承主干(即它的下一个主干)。值得注意的是辅助主干 B 1 、 B 2 、 . . . 、 B k − 1 B_1、B_2、...、B_{k-1} B1B2...Bk1能够用于不同的主干结构(比如:ResNet、ResNeXt、Res2Net和Swin Transformer,并且它们能够从预训练权重中进行初始化)

Possible Composite Styles

对于主干网络之间的连接方式,提出了以下五种风格:
在这里插入图片描述

style1.Same Level Composition(SLC)

这是最简单最直接的连接方式,将每个stage的输出接到下一个主干的同层级的stage。比如将第k-1个主干的第二个stage的输出接到第k个主干的第二个stage后面一起作为第三个stage的输入。
g l ( x ) = w ( x l ) , l ≥ 2 g^l(x)=w(x^l),l\geq2 gl(x)=w(xl),l2
其中 w w w代表一个1x1的卷积层和一个BN层。

style2.Adjacent Higer-Level Composition(AHLC)

这个灵感来自于FPN。top-down方式上丧失一些空间上的信息,但是具有更强的语义信息,高层级特征能够增强bottom-up中的低层级特征。即将第k-1个主干的第l+1个stage的输出接到第k个主干的第l个stage的后面一起作为第l+1个stage的输入。
g l ( x ) = U ( w ( x l + 1 ) ) , l ≥ 1 g^l(x)=U(w(x^{l+1})),l\geq1 gl(x)=U(w(xl+1)),l1
其中U()代表上采样操作。

style3.Adjacent Lower-Level Composition(ALLC)

与AHLC有点类似,ALLC是将低层信息“喂”到高层。即将第k-1个主干的第l个stage的输出接到第k个主干的第l+1个stage的后面一起作为第l+2个stage的输入。
g l ( x ) = D ( w ( x l − 1 ) ) , l ≥ 2 g^l(x)=D(w(x^{l-1})),l\geq2 gl(x)=D(w(xl1)),l2
其中D()代表了下采样操作。

style4.Dense Higher-Level Composition(DHLC)

在DenseNet中,每一层都与其随后的所有层相连来构建庞大的特征。
g l ( x ) = ∑ i = l + 1 L U ( w i ( x i ) ) , l ≥ 1 g^l(x)=\sum_{i=l+1}^{L}U(w_i(x^i)),l\geq1 gl(x)=i=l+1LU(wi(xi)),l1
正如图中所示,K=2时,我们将前一个主干的所有高层级特征组合在一起接到后面主干的低层级中。

style5.Full-connected Composition(FCC)

FCC是将前一个主干的所有层级特征组合在一起接到后面主干的每一个stage。与DHLC相比,在低层级中实现了连接。
g l ( x ) = ∑ i = 2 L I ( w i ( x i ) ) , l ≥ 1 g^l(x)=\sum_{i=2}^{L}I(w_i(x^i)),l\geq1 gl(x)=i=2LI(wi(xi)),l1
其中 I ( ) I() I()代表scale-resizing。 当 i ≥ l 时 , I ( ) = D ( ) , 当 i ≤ l 时 , I ( ) = U ( ) 当i\geq l时,I()=D(),当i\leq l时,I()=U() ilI()=D(),ilI()=U()

Assistent Supervision

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fjcWH32N-1635857983320)(C:\Users\Wangby\AppData\Roaming\Typora\typora-user-images\image-20211102185436776.png)]

可以看到两个主干网络都与neck相连,前面的主干(辅助主干)连接的是Detection Head1,后面的主干(主导主干)连接的是Detection Head 2 。Detection Head 2使用辅助主干作为输入,产生辅助监督。其中FPN和Detection Head共享相同的权重。

所以关于Loss的定义为:
L = L L e a d + ∑ i = 1 K − 1 ( λ i ⋅ L A s s i s t i ) L=L_{Lead}+\sum_{i=1}^{K-1}(\lambda_i\cdot L^i_{Assist}) L=LLead+i=1K1(λiLAssisti)
其中 L l e a d L_{lead} Llead是lead backbone的损失, L A s s i s t L_{Assist} LAssist是Assist backbone的损失, λ i \lambda_i λi是第i个辅助主干所占的权重。

Pruning Strategy for CBNetV2

为了减少模型的复杂度,提出了删减的策略,即在第2,3,…,K个backbone中删除不同数量的stage

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iCwXLqi0-1635857983322)(C:\Users\Wangby\AppData\Roaming\Typora\typora-user-images\image-20211102204631909.png)]

以DB为例,其中 s i s_i si代表中在Lead Backbone中stage的数量{ x 6 − i , x 7 − i , . . . , x 5 ∣ i = 0 , 1 , 2 , 3 , 4 x_{6-i},x_{7-i},...,x_5|i=0,1,2,3,4 x6i,x7i,...,x5i=0,1,2,3,4}。

Performance

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bIXsRnoW-1635857983323)(C:\Users\Wangby\AppData\Roaming\Typora\typora-user-images\image-20211102205328350.png)]
Dual-Res2Net101-DCN在COCO上数据集超越了先前所有的anchor-base和anchor-free方法,创造了新的记录。
[外链图片转存中...(img-LBwVUD3h-1635857983323)]

在检测和实例分割任务上,Dual-Swin-L在训练较少的epoch的情况下超越了先前所有的anchor-base和anchor-free方法,创造了新的记录。

### 关于CBNetV2源码解析 #### CBNetV2简介 CBNetV2是一种改进的目标检测框架,旨在通过多分支网络结构提升模型性能。该框架基于Cascade Backbone Network (CBNet),进一步优化了特征融合机制和计算效率。 #### 主要模块分析 ##### 1. 多分支骨干网设计 CBNetV2采用了多个并行的主干网络(Backbone),通常为ResNet或其变体。每个分支负责提取不同尺度下的空间特征图。这种设计不仅增强了模型的感受野,还提高了对复杂场景的理解能力[^1]。 ```python class MultiBranchBackbone(nn.Module): def __init__(self, backbone_type='resnet50'): super(MultiBranchBackbone, self).__init__() self.branches = nn.ModuleList([ build_backbone(backbone_type), build_backbone(backbone_type) ]) def forward(self, x): features = [] for branch in self.branches: feature = branch(x) features.append(feature) return torch.cat(features, dim=1) ``` ##### 2. 特征金字塔网络(FPN)增强版 为了更好地处理跨尺度物体检测问题,CBNetV2引入了一种强化型FPN结构。此版本的FPN除了常规路径外,还包括自下而上的横向连接以及额外的上采样操作,从而实现更精细的语义信息传递。 ```python def enhanced_fpn(top_down_features, bottom_up_features): lateral_convs = [nn.Conv2d(256, 256, kernel_size=1)] * len(bottom_up_features) fpn_outputs = [] # Top-down pathway with lateral connections prev_feature = None for i in range(len(top_down_features)-1, -1, -1): top_down_input = F.interpolate(prev_feature, scale_factor=2, mode="nearest") if prev_feature is not None else top_down_features[i] lateral_conv_output = lateral_convs[i](bottom_up_features[i]) combined_feature = top_down_input + lateral_conv_output fpn_outputs.insert(0, conv_3x3(combined_feature)) prev_feature = combined_feature return tuple(fpn_outputs) ``` ##### 3. 高效训练策略 针对大规模数据集训练过程中可能出现的记忆瓶颈,CBNetV2实现了渐进式学习方案。具体来说,在初期阶段仅激活部分分支进行预热;随着迭代次数增加逐渐加入更多分支直至全部参与更新过程。这种方法有效缓解了内存占用过高带来的挑战。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值