yolov5运行报错问题汇总

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

问题一

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

解决方案

1.引入SPPF的类
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里面即可

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方法修改一下,改成如下这样

 def forward(self, input: Tensor) -> Tensor:
     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中已删除

建议直接删除重新装一个

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就没有问题

希望本文对你们的问题有所帮助(oi)
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值