【yolo系列:运行报错TypeError: __init__() takes from 3 to 4 positional arguments but 6 were given,最全】

Traceback (most recent call last):
  File "C:\Users\ljx\Desktop\yolov7-main - 副本\yolov7-main\train.py", line 622, in <module>
    train(hyp, opt, device, tb_writer)
  File "C:\Users\ljx\Desktop\yolov7-main - 副本\yolov7-main\train.py", line 95, in train
    model = Model(opt.cfg, ch=3, nc=nc, anchors=hyp.get('anchors')).to(device)  # create
  File "C:\Users\ljx\Desktop\yolov7-main - 副本\yolov7-main\models\yolo.py", line 528, in __init__
    self.model, self.save = parse_model(deepcopy(self.yaml), ch=[ch])  # model, savelist
  File "C:\Users\ljx\Desktop\yolov7-main - 副本\yolov7-main\models\yolo.py", line 835, in parse_model
    m_ = nn.Sequential(*[m(*args) for _ in range(n)]) if n > 1 else m(*args)  # module
TypeError: __init__() takes from 3 to 4 positional arguments but 6 were given

在这里插入图片描述

首先解释我们的报错和解决方法

报错原因:
这个错误提示表明在初始化一个类的实例时,传递的参数数量与构造函数的定义不匹配。通常情况下,构造函数的第一个参数是 self,表示类的实例本身,后面可以定义其他参数。

错误消息中提到 init() 函数需要3到4个位置参数,但是给出了6个参数。这可能是因为在初始化类的实例时传递了多余的参数。

但是在yolo系列里面可能是因为配置文件错误。
我这个错误是在yolov7改进网络的时候设置配置文件错误。
下面是报错的代码,

   [-1, 1, MP, []],
   [-1, 1, Conv, [128, 1, 1]],
   [-3, 1, CA, [128,1,1]],
   [-1, 1, Conv, [128, 3, 2]],

修改后:

  [-1, 1, MP, []],
   [-1, 1, Conv, [128, 1, 1]],
   [-3, 1, CA, [128]],
   [-1, 1, Conv, [128, 3, 2]],

解释原因

 -3:表示 DropBlock 模块的参数,用于控制每个区块(block)要丢弃的元素的比例。通常,这是一个负数,因为我们希望丢弃一定比例的元素。

 1:这表示 DropBlock 的 block_size 参数,指定每个丢弃块的大小。block_size 定义了一个正方形块的边长。在这里,指定为 1,表示每个像素都是一个块。

 CA:这表示 DropBlock 的数据增强策略(crop or alias)。Crop 是默认策略,它是基于像素的策略。Alias 是基于特征图上的区块的策略。

 [128]:这是 DropBlock 的特征图大小参数。对于 Alias 策略,特征图大小是一个整数。在这里,128 是特征图的大小。

因此,[-3, 1, CA, [128]] 表示使用 DropBlock 模块,设置每个区块丢弃比例为负数,丢弃块大小为 1x1,使用 Crop 数据增强策略,特征图大小为 128。所以应该是 [-3, 1, CA, [128]]。

这是一个示范例子,也就是说,你在排除其他错误的前提下来找这个错误的原因,可以仔细看看你的配置文件的新网络,是加了哪一行,哪一个模块,导致出现这样的错误,同理,不光是CA,别的模块也有可能出现这个错误,一般都是后面的不对,不应该是1,1在后面导致的传参错误。

比如下个提问里面
在这里插入图片描述

在这底下有答案
在这里插入图片描述
这个se不应该是【1024,4】,而应该是【-1,1,se,【1024】】

以下给出别的一些可能有用的文章。
调用基类的__init__ 函数时不需要传self
集成父类super的init参数不需要self
在flask的web项目中出现如下错误
wtforms的验证功能函数
ChamferDist类的__call__函数

猜你喜欢

转载自blog.csdn.net/weixin_47869094/article/details/132385442
今日推荐