yolo组件之BottleneckCSP总结

1. 功能解释

        Bottleneck CSP(Cross Stage Partial)是一种常用于计算机视觉任务的卷积神经网络(CNN)中的瓶颈层类型。它是传统瓶颈层(如ResNet中常见的Bottleneck,关于Bottleneck介绍请参考文章yolo组件之Bottleneck层总结)的扩展。

        瓶颈层旨在减少网络的计算复杂性和内存需求,同时提高性能。它通过使用1x1卷积来减小输入特征图的空间维度,然后应用更复杂的操作(如3x3卷积)。通过减小空间维度,可以减少后续层所需的参数和计算量,同时保持网络的表示能力。

        在CSP的背景下,瓶颈层进一步增强,通过引入跨阶段部分连接。这些连接允许信息在网络的不同阶段或块之间流动,有助于改善信息传播和梯度流动。通过连接不同阶段,网络可以利用在不同尺度和抽象级别上学到的特征,从而提高性能。

        Bottleneck CSP层通常包括以下操作:

                1x1卷积:它减少输入通道的数量以节省内存和计算量。

                3x3卷积:它使用更大的感受野执行主要特征提取。

                跨阶段部分连接:这些连接将上一阶段/块的输出与当前阶段/块的输出合并。这允许信息在不同阶段之间流动,有助于保留低层次细节并改善梯度流动。

                激活函数:通常,会应用非线性激活函数(如ReLU)以引入非线性。

                批归一化:通常用于归一化激活并稳定训练过程。

                Dropout(可选):可以应用Dropout正则化来在训练过程中随机丢弃一些激活以防止过拟合。

2. 模型结构

        CSP瓶颈层结构在Bottleneck部分存在一个可修改的参数n,标识使用的Bottleneck结构个数!这一条也是我们的主分支,是对残差进行学习的主要结构,右侧分支nn.Conv2d实际上是shortcut分支实现不同stage的连接。

3. 代码实现

class BottleneckCSP(nn.Module):
    # ch_in, ch_out, number, shortcut, groups, expansion
    def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):  
        super(BottleneckCSP, self).__init__()
        c_ = int(c2 * e)  # hidden channels
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = nn.Conv2d(c1, c_, 1, 1, bias=False)
        self.cv3 = nn.Conv2d(c_, c_, 1, 1, bias=False)
        self.cv4 = Conv(2 * c_, c2, 1, 1)
        self.bn = nn.BatchNorm2d(2 * c_)  # applied to cat(cv2, cv3)
        self.act = nn.LeakyReLU(0.1, inplace=True)
        self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)])

    def forward(self, x):
        y1 = self.cv3(self.m(self.cv1(x)))
        y2 = self.cv2(x)
        return self.cv4(self.act(self.bn(torch.cat((y1, y2), dim=1))))

参数说明:

c1:BottleneckCSP 结构的输入通道维度;

c2:BottleneckCSP 结构的输出通道维度;

n:bottleneck 结构 结构的个数;

shortcut:是否给bottleneck 结构添加shortcut连接,添加后即为ResNet模块;

g:groups,通道分组的参数,输入通道数、输出通道数必须同时满足被groups整除;

e:expansion: bottleneck 结构中的瓶颈部分的通道膨胀率,使用0.5即为变为输入的1212;

torch.cat((y1, y2), dim=1):这里是指定在第1个维度上进行合并,即在channel维度上合并;

c_:BottleneckCSP 结构的中间层的通道数,由膨胀率e决定

4. 总结

        Bottleneck CSP是一种在卷积神经网络中常用的瓶颈层类型,它通过结合瓶颈结构和跨阶段部分连接的方式,提高了网络的性能和效率。它在图像分类、目标检测、语义分割等计算机视觉任务中得到广泛应用,并取得了良好的效果。

  • 21
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值