赞
踩
很多小伙伴在做ultralytics大神的开源项目的时候遇到过一些运行报错的问题,我汇总了一下常见的几个问题,仅供大家参考解决~
AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘H:\yolov5-5.0\models\
- class SPPF(nn.Module):
- # Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher
- def __init__(self, c1, c2, k=5): # equivalent to SPP(k=(5, 9, 13))
- super().__init__()
- c_ = c1 // 2 # hidden channels
- self.cv1 = Conv(c1, c_, 1, 1)
- self.cv2 = Conv(c_ * 4, c2, 1, 1)
- self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2)
-
- def forward(self, x):
- x = self.cv1(x)
- with warnings.catch_warnings():
- warnings.simplefilter('ignore') # suppress torch 1.9.0 max_pool2d() warning
- y1 = self.m(x)
- y2 = self.m(y1)
- return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1))
将以上代码复制进你们的common.py里面即可
import warnings
'运行
同上,将以上代码复制进你们的common.py里面即可
最后是这个效果就可以
AttributeError: ‘Upsample‘ object has no attribute ‘recompute_scale_factor‘
将报错文件
“D:\Anaconda3\envs\yolov5-6.0\lib\site-packages\torch\nn\modules\upsampling.py”
【具体路径请查看报错信息】大体类似里边的forward方法修改一下,改成如下这样
- def forward(self, input: Tensor) -> Tensor:
- return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners)
这是发现在,154行有我们刚才提到的关键信息
然后把第154行还有153行最后的逗号","删掉,再保存一下子
也可以像我一样把它给注释掉
RuntimeError: The size of tensor a (80) must match the size of tensor b (56) at non-singleton dimension 3
去github上下载yolov5s.pt的文件,替换掉原来项目中的yolov5s.pt
网址:https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt
下载之后替换yolov5文件中的yolov5s.pt
AttributeError: module 'numpy' has no attribute 'int'
yolo官方给的是大于等于1.18.5,当你执行pip install -r requirements.txt命令时,他默认安装为1.24,但是再numpy版本更新时numpy.int在NumPy 1.20中已弃用,在NumPy 1.24中已删除
建议直接删除重新装一个
- pip uninstall numpy
- pip install numpy==1.22
RuntimeError: result type Float can't be cast to the desired output type __int64
这个错误表明在某个操作中尝试将浮点数类型的结果强制转换(cast)为整数类型 __int64
,但是由于数据范围或其他原因,无法成功执行此操作。在大多数情况下,这种错误发生在数值类型之间的类型转换不兼容时。
1.首先在utils文件夹里找到loss.py文件
2.在文件里crtl+f 搜索gain,然后在该行代码后面加上.long()
将loss.py中
gain = torch.ones(7, device=targets.device)
改为
gain = torch.ones(7, device=targets.device).long()
因为新版本的torch无法自动执行此转换(比如我装的是pytorch11.3),旧版本torch就没有问题
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。