CBR模块、CBL模块、CBM和CBS模块(yolo)

一、 CBR模块

卷积层(Conv)+ 批归一化层(BN)+ 激活函数层(ReLU或其他激活函数)

  • 特点:通过ReLU函数引入非线性,使得模型能够学习到复杂的映射关系。

二、CBL模块

Conv(卷积层)+ Bn(批归一化层)+ Leaky_relu(激活函数)

  • Leaky_relu(激活函数):引入非线性因素,使得网络能够学习到复杂的模式。Leaky_relu激活函数允许小梯度值的通过,避免了ReLU激活函数在输入小于0时梯度为0的问题,从而提高了网络的训练效果。

  • Leaky_relu在ReLU的基础上进行了改进,允许小的负梯度通过,从而解决了ReLU在输入为负值时导致的神经元死亡问题

三、CBM模块

Conv(卷积)+ BN(批归一化)+ Mish激活函数

  • Mish激活函数:一种非线性激活函数,用于引入非线性因素,增强网络的表达能力。Mish激活函数的公式为f(x)=x⋅tanh(log(1+ex)),它相比其他激活函数(如ReLU、Leaky ReLU等)在保持梯度稳定性的同时,能够更好地捕捉输入数据的微小变化。

四、CBS模块

Conv(卷积层)+ BN(批归一化层)+SiLU激活函数

SiLU(激活函数)

  • 功能:引入非线性因素,使模型能够学习更复杂的映射关系。

  • 公式:SiLU激活函数的公式为silu(x)=x⋅sigmoid(x),它是swish激活函数的一个变体,具有平滑、非单调的特性,有助于缓解梯度消失问题。

对比:

各种激活函数图像

pytorch实现CBM模块和MiSH模块示例: 

import torch  
import torch.nn as nn  
import torch.nn.functional as F  
  
# 定义Mish激活函数  
class Mish(nn.Module):  
    def __init__(self):  
        super(Mish, self).__init__()  
  
    def forward(self, x):  
        return x * torch.tanh(F.softplus(x))  
  
# 定义CBM模块  
class CBM(nn.Module):  
    def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0):  
        super(CBM, self).__init__()  
        self.conv = nn.Conv2d(in_channels, out_channels, kernel_size, stride, padding, bias=False)  
        self.bn = nn.BatchNorm2d(out_channels)  
        self.mish = Mish()  
  
    def forward(self, x):  
        x = self.conv(x)  
        x = self.bn(x)  
        x = self.mish(x)  
        return x  
  
# 示例使用  
if __name__ == "__main__":  
    # 假设输入张量的形状为 [batch_size, in_channels, height, width]  
    # 这里我们使用随机数据来模拟输入  
    batch_size, in_channels, height, width = 1, 3, 224, 224  
    x = torch.randn(batch_size, in_channels, height, width)  
  
    # 创建一个CBM模块实例,参数根据实际情况调整  
    cbm = CBM(in_channels=in_channels, out_channels=64, kernel_size=3, stride=1, padding=1)  
  
    # 通过CBM模块  
    output = cbm(x)  
  
    # 打印输出张量的形状  
    print(output.shape)  # 输出应为 [batch_size, 64, height, width],其中height和width可能因padding和stride而改变
    ### 可变形卷积在YOLOv8 CBS中的实现 为了将标准卷积替换为可变形卷积,在YOLOv8的CBS(Convolutional Block Attention Module)结构中,主要涉及修改网络层定义以及调整相应的参数配置。具体方法如下: #### 修改网络架构文件 在网络定义部分引入`DeformConv2d`模块替代原有的普通二维卷积操作。对于基于PyTorch框架下的实现方式可以参照官方文档说明[^2]。 ```python from torchvision.ops import DeformConv2d class CustomCBAModule(nn.Module): def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=1): super(CustomCBAModule, self).__init__() # 使用可变形卷积代替传统卷积 self.deform_conv = DeformConv2d(in_channels=in_channels, out_channels=out_channels, kernel_size=(kernel_size,kernel_size), stride=stride, padding=padding) def forward(self, x): offset = ... # 计算偏移量的方法取决于具体的实现细节 output = self.deform_conv(x, offset) return output ``` 此代码片段展示了如何创建一个新的自定义CBAModule类来集成可变形卷积功能。需要注意的是,实际应用时还需要考虑offset计算逻辑的设计,这通常依赖于额外的学习机制或预设规则。 #### 调整超参数设置 当替换了核心组件之后,可能需要重新评估并优化一些影响性能的关键因素,比如学习率、批量大小等。此外,由于加入了新的复杂度较高的运算单元——即DCN(deformable convolution),因此建议适当增加迭代次数以确保充分收敛[^1]。
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值