Ultralytics中的RT-DETR模块的RepC3 bug

在跑U版本的RT-DETR,我修改了RepC3的e的默然参数,e 不等于1的时候,程序就会报错,在检查代码的时候,发现官方的代码有问题。

原来的代码:

python 复制代码
class RepC3(nn.Module):
    """Rep C3."""

    def __init__(self, c1, c2, n=3, e=1.0):
        """Initialize CSP Bottleneck with a single convolution using input channels, output channels, and number."""
        super().__init__()
        c_ = int(c2 * e)  # hidden channels
        self.cv1 = Conv(c1, c2, 1, 1)
        self.cv2 = Conv(c1, c2, 1, 1)
        self.m = nn.Sequential(*[RepConv(c_, c_) for _ in range(n)])
        self.cv3 = Conv(c_, c2, 1, 1) if c_ != c2 else nn.Identity()

    def forward(self, x):
        """Forward pass of RT-DETR neck layer."""
        return self.cv3(self.m(self.cv1(x)) + self.cv2(x))

在当前的代码实现中,self.cv1self.cv2的输出通道数应为隐藏层通道数c_而非最终输出通道数c2,否则会导致维度不匹配的问题。

问题分析:

  1. 维度不匹配: 当扩展系数 e ≠ 1 时,c_ = c2 * e 会改变通道数。若 self.cv1 的输出通道为 c2,而后续模块 self.m 中的 RepConv 层要求输入通道为 c_,将引发维度错误。

  2. 设计逻辑: RepC3 的结构预期是先将输入通道通过 cv1/cv2 调整到隐藏层 c_,经过处理后再通过 cv3 调整到目标输出 c2

修正后的代码:

python 复制代码
class RepC3(nn.Module):
    """Rep C3."""

    def __init__(self, c1, c2, n=3, e=1.0):
        super().__init__()
        c_ = int(c2 * e)  # 隐藏通道数
        self.cv1 = Conv(c1, c_, 1, 1)  # 修正为c_
        self.cv2 = Conv(c1, c_, 1, 1)  # 修正为c_
        self.m = nn.Sequential(*[RepConv(c_, c_) for _ in range(n)])
        self.cv3 = Conv(c_, c2, 1, 1) if c_ != c2 else nn.Identity()

    def forward(self, x):
        return self.cv3(self.m(self.cv1(x)) + self.cv2(x))

修改说明:

  • self.cv1self.cv2 的输出通道从 c2 改为 c_,确保与后续 RepConv 层的输入通道一致。

  • self.cv3 负责将隐藏通道 c_ 映射到目标输出通道 c2,保证最终输出尺寸正确。

此修正确保了在任意扩展系数 e 下,网络层的维度计算均正确,避免了潜在的错误。已将bug报告给了官方。

相关推荐
开-悟41 分钟前
嵌入式编程-使用AI查找BUG的启发
c语言·人工智能·嵌入式硬件·bug
一入JAVA毁终身1 小时前
Data的时区格式BUG
bug
一入JAVA毁终身1 天前
处理Lombok的一个小BUG
java·开发语言·bug
SeaTunnel1 天前
SeaTunnel 社区月报(5-6 月):全新功能上线、Bug 大扫除、Merge 之星是谁?
大数据·开源·bug·数据集成·seatunnel
紫璨月1 天前
nginx反向代理的bug
运维·nginx·bug
从后端到QT1 天前
SRS流媒体服务器之本地测试rtc推流bug
bug·实时音视频
Java知识库12 天前
MySQL RC隔离级别惊现间隙锁:是bug吗?
数据库·mysql·bug
安卓机器12 天前
rom定制系列------红米note11 5G版 MTK芯片强解bl锁修复bug 官方系统 面具root批量线刷版
5g·bug
剽悍一小兔12 天前
一个小BUG引发的对Mybatis-Plus的模糊查询的思考
bug·mybatis
Gazer_S14 天前
【前端隐蔽 Bug 深度剖析:SVG 组件复用中的 ID 冲突陷阱】
前端·bug