模块整理!YOLOv9中的“Silence”、“RepNCSPELAN4”、“ADown”、“CBLinear”创新模块汇总!


 专栏地址:目前售价售价69.9,改进点70+

专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,助力高效涨点!!!


本文对YOLOv9中出现的新模块进行整理


1.  Silence模块

        模块介绍:Silence是YOLOv9中便于辅助分支调用输入到网络中的原始img的模块,模块自身不进行运算,输出与输入无变化,模块代码:

class Silence(nn.Module):
    def __init__(self):
        super(Silence, self).__init__()
    def forward(self, x):    
        return x

2.  RepNCSPELAN4模块

        RepNCSPELAN4是YOLOv9中的特征提取-融合模块,类似前几代YOLO中的C3、C2f等模块。作者通过结合两种神经网络架构,即带有梯度路径规划的 CSPNet 和 ELAN,考虑轻量化推理速度准确性设计出的一种广义高效层聚合网络(GELAN),作者使用带有 CSPNet 块的 GELAN 替换了 ELAN,并 RepConv作为计算块。RepNCSPELAN4可拆分为RepN-CSP-ELAN4 ,代码及模块图如下:

class RepNCSPELAN4(nn.Module):
    # csp-elan
    def __init__(self, c1, c2, c3, c4, c5=1):  # ch_in, ch_out, number, shortcut, groups, expansion
        super().__init__()
        self.c = c3//2
        self.cv1 = Conv(c1, c3, 1, 1)
        self.cv2 = nn.Sequential(RepNCSP(c3//2, c4, c5), Conv(c4, c4, 3, 1))
        self.cv3 = nn.Sequential(RepNCSP(c4, c4, c5), Conv(c4, c4, 3, 1))
        self.cv4 = Conv(c3+(2*c4), c2, 1, 1)

    def forward(self, x):
        y = list(self.cv1(x).chunk(2, 1))
        y.extend((m(y[-1])) for m in [self.cv2, self.cv3])
        return self.cv4(torch.cat(y, 1))

    def forward_split(self, x):
        y = list(self.cv1(x).split((self.c, self.c), 1))
        y.extend(m(y[-1]) for m in [self.cv2, self.cv3])
        return self.cv4(torch.cat(y, 1))


3.  ADown模块

        ADown是YOLOv9中的下采样模块,模块中使用卷积、平均池化、最大池化完成下采样操作,代码及结构图如下:

class ADown(nn.Module):
    def __init__(self, c1, c2):  # ch_in, ch_out, shortcut, kernels, groups, expand
        super().__init__()
        self.c = c2 // 2
        self.cv1 = Conv(c1 // 2, self.c, 3, 2, 1)
        self.cv2 = Conv(c1 // 2, self.c, 1, 1, 0)

    def forward(self, x):
        x = torch.nn.functional.avg_pool2d(x, 2, 1, 0, False, True)
        x1,x2 = x.chunk(2, 1)
        x1 = self.cv1(x1)
        x2 = torch.nn.functional.max_pool2d(x2, 3, 2, 1)
        x2 = self.cv2(x2)
        return torch.cat((x1, x2), 1)


4.  CBLinear模块

        CBLinear是YOLOv9用于辅助分支的一个模块,包含一个卷积模块,将经过一次卷积后得到的张量拆分成包含为1-N个元素的元组,模块代码和结构如下:

class CBLinear(nn.Module):
    def __init__(self, c1, c2s, k=1, s=1, p=None, g=1):  # ch_in, ch_outs, kernel, stride, padding, groups
        super(CBLinear, self).__init__()
        self.c2s = c2s
        self.conv = nn.Conv2d(c1, sum(c2s), k, s, autopad(k, p), groups=g, bias=True)

    def forward(self, x):
        outs = self.conv(x).split(self.c2s, dim=1)
        return outs


包含模块、卷积、检测头、损失等改进,目前已有70+!

⭐入手价$ 69.9,打造全站最具性价比的YOLOv9改进项目!⭐

联系QQ: 2668825911 ,欢迎交流!

 

### 关于 RepNCSPELAN4 的解析 RepNCSPELAN4 是一种基于卷积神经网络 (CNN) 的架构设计,其核心组件包括 `Conv` 和 `ReoNCSP` 模块[^1]。具体来说: #### ReoNCSP 结构 ReoNCSP 是 RepNCSPELAN4 中的关键部分之一,它的结构类似于 C3 和 C2f 模块。该模块由多个 `RepNBottleneck` 子模块构成,而这些子模块的数量则取决于模型的宽度因子。 ##### RepNBottleneck 组件 `RepNBottleneck` 是一个带有残差连接的基础模块,其实现代码如下所示[^2]: ```python class RepNBottleneck(nn.Module): def __init__(self, c1, c2, shortcut=True, g=1, k=(3, 3), e=0.5): super().__init__() c_ = int(c2 * e) # 隐藏层通道数计算 self.cv1 = RepConvN(c1, c_, k[0], 1) # 第一层卷积 self.cv2 = Conv(c_, c2, k[1], 1, g=g) # 第二层卷积 self.add = shortcut and c1 == c2 # 判断是否启用残差连接 def forward(self, x): return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x)) ``` 在此实现中,`cv1` 使用的是自定义的 `RepConvN` 卷积模块,而 `cv2` 则采用标准的 `Conv` 层来处理特征映射。 #### 下采样机制 除了上述的核心模块外,在 YOLOv9 架构的设计理念下还引入了一种名为 `ADown` 的特殊下采样方法[^3]。以下是对应的代码片段及其功能描述: ```python class ADown(nn.Module): def __init__(self, c1, c2): super().__init__() self.c = c2 // 2 self.cv1 = Conv(c1 // 2, self.c, 3, 2, 1) # 卷积操作用于降维并步幅为2 self.cv2 = Conv(c1 // 2, self.c, 1, 1, 0) # 点卷积保持维度不变 def forward(self, x): x = torch.nn.functional.avg_pool2d(x, 2, 1, 0, False, True) # 平均池化降低空间分辨率 x1, x2 = x.chunk(2, 1) # 将输入张量沿通道轴分割成两份 x1 = self.cv1(x1) # 对第一部分应用卷积进一步提取特征 x2 = torch.nn.functional.max_pool2d(x2, 3, 2, 1) # 最大池化增强鲁棒性 x2 = self.cv2(x2) # 调整第二部分尺寸匹配后续拼接需求 return torch.cat((x1, x2), 1) # 合并两个分支的结果作为最终输出 ``` 通过结合不同类型的池化技术以及特定配置下的卷积运算,`ADown` 实现了高效的空间尺度缩减同时保留丰富的语义信息。 综上所述,RepNCSPELAN4 不仅继承了传统 CNN 设计的优点,还在某些细节处进行了创新优化以适应更复杂场景的应用需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值