当前位置:   article > 正文

yolov5运行报错问题汇总_yolov5 common.py报错

yolov5 common.py报错

很多小伙伴在做ultralytics大神的开源项目的时候遇到过一些运行报错的问题,我汇总了一下常见的几个问题,仅供大家参考解决~

问题一

AttributeError: Can‘t get attribute ‘SPPF‘ on <module ‘models.common‘ from ‘H:\yolov5-5.0\models\

解决方案

1.引入SPPF的类
  1. class SPPF(nn.Module):
  2. # Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher
  3. def __init__(self, c1, c2, k=5): # equivalent to SPP(k=(5, 9, 13))
  4. super().__init__()
  5. c_ = c1 // 2 # hidden channels
  6. self.cv1 = Conv(c1, c_, 1, 1)
  7. self.cv2 = Conv(c_ * 4, c2, 1, 1)
  8. self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2)
  9. def forward(self, x):
  10. x = self.cv1(x)
  11. with warnings.catch_warnings():
  12. warnings.simplefilter('ignore') # suppress torch 1.9.0 max_pool2d() warning
  13. y1 = self.m(x)
  14. y2 = self.m(y1)
  15. return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1))

将以上代码复制进你们的common.py里面即可

2.因为引入SPPF类,所以还需要引入一下warnings的包
 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方法修改一下,改成如下这样

  1. def forward(self, input: Tensor) -> Tensor:
  2. return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners)

1.一开始是这个状态

这是发现在,154行有我们刚才提到的关键信息

然后把第154行还有153行最后的逗号","删掉,再保存一下子

也可以像我一样把它给注释掉

2.最后修改成下图这样的效果就可以了

问题三

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中已删除

建议直接删除重新装一个

  1. pip uninstall numpy
  2. 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就没有问题

希望本文对你们的问题有所帮助(oi)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/797361
推荐阅读
相关标签
  

闽ICP备14008679号