当前位置:   article > 正文

yolo组件之BottleneckCSP总结

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. 代码实现

  1. class BottleneckCSP(nn.Module):
  2. # ch_in, ch_out, number, shortcut, groups, expansion
  3. def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):
  4. super(BottleneckCSP, self).__init__()
  5. c_ = int(c2 * e) # hidden channels
  6. self.cv1 = Conv(c1, c_, 1, 1)
  7. self.cv2 = nn.Conv2d(c1, c_, 1, 1, bias=False)
  8. self.cv3 = nn.Conv2d(c_, c_, 1, 1, bias=False)
  9. self.cv4 = Conv(2 * c_, c2, 1, 1)
  10. self.bn = nn.BatchNorm2d(2 * c_) # applied to cat(cv2, cv3)
  11. self.act = nn.LeakyReLU(0.1, inplace=True)
  12. self.m = nn.Sequential(*[Bottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)])
  13. def forward(self, x):
  14. y1 = self.cv3(self.m(self.cv1(x)))
  15. y2 = self.cv2(x)
  16. 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是一种在卷积神经网络中常用的瓶颈层类型,它通过结合瓶颈结构和跨阶段部分连接的方式,提高了网络的性能和效率。它在图像分类、目标检测、语义分割等计算机视觉任务中得到广泛应用,并取得了良好的效果。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/475305
推荐阅读
相关标签
  

闽ICP备14008679号