赞
踩
目录
1、AttributeError:Can't get attribute 'SPPF' on
2、AttributeError:‘Upsample’ object has no attribute ‘recompute_scale_facto’
4、AssertionError: Image Not Found ...
6、RuntimeError: Couldn't load custom C+ ops.
写这个文章是为了记录我在看 B 站土堆的目标检测 YOLOv5 开源代码项目调试与讲解实战时,在配置 YOLOv5 的过程中遇到的一系列问题以及我所采取的解决方式,这些方式不一定适用于所有人,只希望能为大家提供一些解决思路。
首先,我跟随土堆的步伐,在 GitHub 网站的 ultralytics / yolov5 中下载了 YOLOv5 的 5.0 版本(但实际上到最后我用的是 6.0 版本)。
然后,在 PyCharm 中打开这个项目,先根据 requirements.txt 安装缺失的包,需要提前说明的是,由于我的 conda 版本比较旧,不能正常使用 conda install 命令来安装包,所以我一般会借助 Anaconda Navigator ( anaconda3 ) 或者 pip install 命令来安装包,而且我个人觉得 Anaconda Navigator ( anaconda3 ) 挺好用的,有时候 Anaconda Navigator (anaconda3) 部分包没有提供,我才会用 pip install 命令来安装,作者我呀~小白且懒,因为不想重装所以才这样瞎搞,也不知道这样有没有什么弊端,如果有的话请求指出!感谢!
这是我根据 requirements.txt 安装缺失包的具体过程,仅供无法使用 conda install 的小伙伴参考呀,不想误人子弟的:
【补充】除了通过 PyCharm 的自动弹窗安装缺失的包外,我们也可以在 PyCharm 的终端运行 pip install -r requirement.txt 命令来安装缺失的包,但如果开源代码的提供者没有写 requirement.txt 文件,我们就只能在运行 .py 文件时按照提示安装缺失的包了。
目前进行到这里都算是比较顺利的,但是!后面在运行 detect.py 文件时,我遭遇了一系列问题!公主王子们请往下看!因为我忘记截图,所以只能文字描述问题,还请见谅!
问题 1 :AttributeError: Can't get attribute 'SPPF' on <module 'models.common' from 'E:\\YOLOv5\\yolov5-6.0\\models\\common.py'>
解决方式:这个我也是参考了视频教程的评论区,由于我们使用的 YOLOv5 是 Tags 5 版本的,models 文件夹下的 common.py 文件中没有 SPPF 类,需要去 Tags 6 版本的相同文件中把 SPPF 类拷过来,注意还要导入 warnings 包,否则会报错,代码我贴下面啦~
- import warnings
-
- 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))
问题 2 : AttributeError: ‘Upsample’ object has no attribute ‘recompute_scale_facto’
解决方式:这个我是查阅了很多 CSDN 的相关文章,根据运行窗口的错误提示进入 upsampling.py 文件,将 recompute_scale_factor 删除,记得将其前面的英文逗号也删除,否则会报错,具体操作如图所示,第一张图是搬运过来的~因为当初忘记截图啦~
【补充】我的文件目录:- D:\Anaconda3\envs\pytorch_gpu\lib\site-packages\torch\nn\modules\upsampling.py
问题 3 :RuntimeError: The size of tensor a (80) must match the size of tensor b (56) at non-singleton dimension 3
解决方式:因为在运行 detect.py 文件时,默认下载的是最新版本的 .pt 模型,而我们目前使用的是 5.0 版本,所以需要去 GitHub 上的对应版本里下载 yolov5s.pt 文件,然后将它直接拖到项目文件夹里,替换代码运行时自动下载的 yolov5s.pt 文件,附上下载链接啦~
【补充】YOLOv5 的下载链接:https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt
问题 4 :AssertionError: Image Not Found E:\迅雷下载\Git-yolov5\yolov5-5.0\data\images\bus.jpg
解决方式:这是因为测试图片中包含中文路径,把文件夹全部修改成英文即可。
问题 5 :成功运行 detect.py 文件,但是没有识别出来!!如上图所示,只有 Done!!
解决方式:关于这个问题,我尝试了很多方法!包括但不限于将 cudnn.benchmark = True 剪切到 if webcam 的上一行,后来发现是因为我没解决 pytorch 和 torchvision 版本不兼容的问题,但这都是后话了~为了解决这个问题,我转战最新的 YOLOv5 7.0 版本了!需要在 5.0 的基础上安装 gitpython 包,前面说过我的 conda 版本太旧导致我无法正常使用 conda install 命令,而且 Anaconda Navigator 没有提供这个包!尝试升级 conda 但失败了,最后还是用 pip install gitpython 命令安装成功的~
问题 6 :RuntimeError: Couldn't load custom C+ ops. This can happen if your Pytorch and torchvision versions are incompatible ...
解决方式:这是最让我痛不欲生的问题!!为了这个问题我先后尝试了 YOLOv5 6.0 版本和 YOLOv5 7.0 版本,都躲避不了!!归根结底,还是因为我的 pytorch 和 torchvision 版本不兼容,既然逃无可逃,那就只能解决它了!! 我在 Pycharm 的终端运行:
pip install torchvision==0.10.1
【注意】在上两张图中,我们可以看到将 torchvision 降级成功后的错误提示,由于 torch 也随 torchvision 起降级了,必然会导致一些新问题,比如部分包可能和 torch 不再兼容,再比如我们用不了 gpu 训练了,但我目前没有更好的解决方式,希望未来可以填这个坑。
最后,无论如何,现在我们的 YOLOv5 模型的 detect.py 文件终于可以正常运行了!
暂时更新到这里,这次 YOLOv5 的配置依旧存在不少隐患,希望未来可以为大家提供更好的解决方式,仅供大家参考!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。