【土堆】史上最全 YOLOv5 配置问题总结 AttributeError & RuntimeError & AssertionError

目录

前言

一、根据 requirements.txt 安装缺失的包

二、运行 detect.py 文件遇到的 6 个问题

1、AttributeError:Can't get attribute 'SPPF' on

2、AttributeError:‘Upsample’ object has no attribute ‘recompute_scale_facto’

3、RuntimeError: The size of tensor a (80) must match the size of tensor b (56) at non-singleton dimension 3

4、AssertionError: Image Not Found ...

5、成功运行 detect.py 文件,但是没有识别出来

6、RuntimeError: Couldn't load custom C+ ops.

三、运行 detect.py 文件成功识别图片 

最后说些话 


前言

写这个文章是为了记录我在看 B 站土堆的目标检测 YOLOv5 开源代码项目调试与讲解实战时,在配置 YOLOv5 的过程中遇到的一系列问题以及我所采取的解决方式,这些方式不一定适用于所有人,只希望能为大家提供一些解决思路。

一、根据 requirements.txt 安装缺失的包

首先,我跟随土堆的步伐,在 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 命令来安装,作者我呀~小白且懒,因为不想重装所以才这样瞎搞,也不知道这样有没有什么弊端,如果有的话请求指出!感谢! 

【土堆】史上最全 YOLOv5 配置问题总结 AttributeError & RuntimeError & AssertionError_第1张图片

这是我根据 requirements.txt 安装缺失包的具体过程,仅供无法使用 conda install 的小伙伴参考呀,不想误人子弟的:

  1.  PyYAML >= 5.3.1 :在 Anaconda Navigator ( anaconda3 ) 中的自定义虚拟环境 pytorch_gpu 安装
  2.  tqdm >= 4.41.0 :在 Anaconda Navigator ( anaconda3 ) 中的自定义虚拟环境 pytorch_gpu 安装
  3.  seaborn >= 0.11.0 :在 Anaconda Navigator ( anaconda3 ) 中的自定义虚拟环境 pytorch_gpu 安装
  4.  pandas :在 Anaconda Navigator ( anaconda3 ) 中的自定义虚拟环境 pytorch_gpu 安装
  5.  thop :在 PyCharm 的终端,直接运行 pip install thop 命令,注意要在虚拟环境 pytorch_gpu 中运行
  6.  pycocotools >= 2.0 :这个我参考了视频教程的评论区!我把方法搬运过来啦:先下载 pycococtools 的安装包,提取码为 i5d7 ,下载成功后,直接解压复制其中 pycocotools 两个文件夹到 conda 环境( … \ Lib \ site-packages )中

​​​​​​【土堆】史上最全 YOLOv5 配置问题总结 AttributeError & RuntimeError & AssertionError_第2张图片

【土堆】史上最全 YOLOv5 配置问题总结 AttributeError & RuntimeError & AssertionError_第3张图片【土堆】史上最全 YOLOv5 配置问题总结 AttributeError & RuntimeError & AssertionError_第4张图片

【土堆】史上最全 YOLOv5 配置问题总结 AttributeError & RuntimeError & AssertionError_第5张图片【土堆】史上最全 YOLOv5 配置问题总结 AttributeError & RuntimeError & AssertionError_第6张图片

【补充】除了通过 PyCharm 的自动弹窗安装缺失的包外,我们也可以在 PyCharm 的终端运行 pip install -r requirement.txt 命令来安装缺失的包,但如果开源代码的提供者没有写 requirement.txt 文件,我们就只能在运行 .py 文件时按照提示安装缺失的包了。

【土堆】史上最全 YOLOv5 配置问题总结 AttributeError & RuntimeError & AssertionError_第7张图片

二、运行 detect.py 文件遇到的 6 个问题

目前进行到这里都算是比较顺利的,但是!后面在运行 detect.py 文件时,我遭遇了一系列问题!公主王子们请往下看!因为我忘记截图,所以只能文字描述问题,还请见谅!

1、AttributeError:Can't get attribute 'SPPF' on

问题 1 :AttributeError: Can't get attribute 'SPPF' on

解决方式:这个我也是参考了视频教程的评论区,由于我们使用的 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’

问题 2 : AttributeError: ‘Upsample’ object has no attribute ‘recompute_scale_facto’

解决方式:这个我是查阅了很多 CSDN 的相关文章,根据运行窗口的错误提示进入 upsampling.py 文件,将 recompute_scale_factor 删除,记得将其前面的英文逗号也删除,否则会报错,具体操作如图所示,第一张图是搬运过来的~因为当初忘记截图啦~

【土堆】史上最全 YOLOv5 配置问题总结 AttributeError & RuntimeError & AssertionError_第8张图片

【补充】我的文件目录:- 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

问题 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 配置问题总结 AttributeError & RuntimeError & AssertionError_第9张图片

【补充】YOLOv5 的下载链接:https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt

4、AssertionError: Image Not Found ...

问题 4 :AssertionError: Image Not Found E:\迅雷下载\Git-yolov5\yolov5-5.0\data\images\bus.jpg

解决方式:这是因为测试图片中包含中文路径,把文件夹全部修改成英文即可。

【土堆】史上最全 YOLOv5 配置问题总结 AttributeError & RuntimeError & AssertionError_第10张图片

5、成功运行 detect.py 文件,但是没有识别出来

问题 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 命令安装成功的~

【土堆】史上最全 YOLOv5 配置问题总结 AttributeError & RuntimeError & AssertionError_第11张图片

6、RuntimeError: Couldn't load custom C+ ops.

问题 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

【土堆】史上最全 YOLOv5 配置问题总结 AttributeError & RuntimeError & AssertionError_第12张图片

【土堆】史上最全 YOLOv5 配置问题总结 AttributeError & RuntimeError & AssertionError_第13张图片

【土堆】史上最全 YOLOv5 配置问题总结 AttributeError & RuntimeError & AssertionError_第14张图片

【注意】在上两张图中,我们可以看到将 torchvision 降级成功后的错误提示,由于 torch 也随 torchvision 起降级了,必然会导致一些新问题,比如部分包可能和 torch 不再兼容,再比如我们用不了 gpu 训练了,但我目前没有更好的解决方式,希望未来可以填这个坑。 

三、运行 detect.py 文件成功识别图片 

最后,无论如何,现在我们的 YOLOv5 模型的 detect.py 文件终于可以正常运行了!

【土堆】史上最全 YOLOv5 配置问题总结 AttributeError & RuntimeError & AssertionError_第15张图片

最后说些话 

暂时更新到这里,这次 YOLOv5 的配置依旧存在不少隐患,希望未来可以为大家提供更好的解决方式,仅供大家参考! 

你可能感兴趣的:(深度学习の目标检测,YOLO,目标检测)