关于yolov5 backbone 的问题,如何解决?

问题遇到的现象和发生背景

在把YOLOv5backbone换成res2net时出现问题

问题相关代码,请勿粘贴截图

class Bottle2neck(nn.Module):
expansion = 4

def __init__(self, inplanes, planes, stride=1, downsample=None, baseWidth=26, scale = 4, stype='normal'):
    """ Constructor
    Args:
        inplanes: input channel dimensionality
        planes: output channel dimensionality
        stride: conv stride. Replaces pooling layer.
        downsample: None when stride = 1
        baseWidth: basic width of conv3x3
        scale: number of scale.
        type: 'normal': normal set. 'stage': first block of a new stage.
    """
    super(Bottle2neck, self).__init__()

    width = int(math.floor(planes * (baseWidth/64.0)))
    self.conv1 = nn.Conv2d(inplanes, width*scale, kernel_size=1, bias=False)
    self.bn1 = nn.BatchNorm2d(width*scale)
    
    if scale == 1:
      self.nums = 1
    else:
      self.nums = scale -1
    if stype == 'stage':
        self.pool = nn.AvgPool2d(kernel_size=3, stride = stride, padding=1)
    convs = []
    bns = []
    for i in range(self.nums):
      convs.append(nn.Conv2d(width, width, kernel_size=3, stride = stride, padding=1, bias=False))
      bns.append(nn.BatchNorm2d(width))
    self.convs = nn.ModuleList(convs)
    self.bns = nn.ModuleList(bns)

    self.conv3 = nn.Conv2d(width*scale, planes * self.expansion, kernel_size=1, bias=False)
    self.bn3 = nn.BatchNorm2d(planes * self.expansion)

    self.relu = nn.ReLU(inplace=True)
    self.downsample = downsample
    self.stype = stype
    self.scale = scale
    self.width  = width

def forward(self, x):
    residual = x

    out = self.conv1(x)
    out = self.bn1(out)
    out = self.relu(out)

    spx = torch.split(out, self.width, 1)
    for i in range(self.nums):
      if i==0 or self.stype=='stage':
        sp = spx[i]
      else:
        sp = sp + spx[i]
      sp = self.convs[i](sp)
      sp = self.relu(self.bns[i](sp))
      if i==0:
        out = sp
      else:
        out = torch.cat((out, sp), 1)
    if self.scale != 1 and self.stype=='normal':
      out = torch.cat((out, spx[self.nums]),1)
    elif self.scale != 1 and self.stype=='stage':
      out = torch.cat((out, self.pool(spx[self.nums])),1)

    out = self.conv3(out)
    out = self.bn3(out)

    if self.downsample is not None:
        residual = self.downsample(x)

    out += residual
    out = self.relu(out)

    return out
运行结果及报错内容

img

我的解答思路和尝试过的方法

这是我的backbone配置文件
backbone:

[from, number, module, args]

[[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2
[-1, 3, res2, [128]], # 1-P2/4
[-1, 4, res2, [256]],
[-1, 6, res2, [512]],
[-1, 3, res2, [1024]],
[-1, 1, SPPF, [1024, 5]], #5
]

我想要达到的结果

求指点

报错截全,哪句代码报的这个错误?
你这个我只能说设置问题导致的维度不匹配,另外就是depth_multiple和width_multiple参数多少?yolo会根据这个值来缩放网络,你自己添加的网络要么固定值,要么改动代码跟着这两个参数变换