目录
二、关于 AttributeError: module 'distutils' has no attribute 'version'
四、关于 OMP: Error #15: Initializing libiomp5md.dll, but found ...
五、关于 RuntimeError: CUDA out of memory.
前言
这篇文章记录了我在运行 YOLOv5 的 train.py 文件时遇到的一系列问题以及相应的解决方式,如果有小伙伴看过我的前几篇文章,应该知道我之前为了能够成功运行 YOLOv5 的 detect.py 文件,将 torch 和 torchvision 降级了,版本如下图所示,不仅导致 torch 和部分包的版本不兼容,而且还不能进行 GPU 训练了!所以在这篇文章中,我将 torch 和 torchvision 等包重装了,现在不仅能成功运行 train.py 文件,而且又可以进行 GPU 训练啦~我的解决方式可能并非适用于所有人,希望能够为大家提供一些解决思路!
【补充】为了让大家提前知道我重新装包的版本,我先在这里贴张装包成功后的图~大家可以根据自己电脑安装合适的版本!因为我电脑的 CUDA 只支持 11.6 以前的版本,所以我选择的是 PyTorch 官网提供的 CUDA 为 11.1 的 pip install 语句(后面细讲)。
一、关于 torch 的版本问题
因为后面学习的视频教程中需要用到 GPU 训练,所以我打算重装 torch ,具体操作如下:
【操作1】在命令行窗口输入 nvidia-smi 命令查看电脑是否支持 CUDA 以及 CUDA 的版本,我电脑支持的 CUDA 版本为 11.6 以前。
【操作2】根据是否支持 CUDA 以及 CUDA 的版本,在 PyTorch 官网复制对应的安装语句:
pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html
在进行这步操作的时候,我因为懒惰只重装了 torch ,结果就导致 torchaudio 的版本与 torch 不匹配,报错如下:
于是我又将 torchvision 和 torchaudio 都重装了 torch 的对应版本,建议大家直接运行官网提供的安装语句,这样它们仨整整齐齐的!
【操作3】在 PyCharm 的 Python Console 中 import torch ,若无报错则说明 PyTorch 安装成功,然后再输入 torch.cuda.is_available() 命令查看输出,若为 True 则说明电脑有可供 PyTorch 调用的 GPU 。
二、关于 AttributeError: module 'distutils' has no attribute 'version'
在确保 torch ,torchvision 和 torchaudio 都重装成功后,我再次运行了 YOLOv5 的 train.by 文件,却出现了 AttributeError 报错,如下图所示,这是因为 setuptools 包版本过高,需要降低其版本,具体操作我参考了知乎的这篇文章:
【补充】为了让公主王子们能够免去看这篇文章的时间,我将文章推荐运行的命令贴在下面啦~ pip 和 conda 二者取其一即可!
pip install setuptools==58.0.4
conda install setuptools==58.0.4
安装 setuptools-58.0.4 后,我们再次运行 train.py 文件,这时可以看到 AttributeError 报错已经解决了,并且运行显示 YOLOv5 使用了我们重装后的 torch 版本 torch 1.9.1+cu111 。
【补充】wandb 是用于机器学习的开发工具,大家可以自行去【wandb官网】了解哟~(建议使用 Google 浏览器打开)
三、关于 unzip 失败的问题
解决了 AttributeError 报错问题后,我们再再再次运行 train.py 文件,coco128 数据集将自动进行下载,然后项目文件的根目录中就会出现 coco128.zip 压缩包,接着就出现了 unzip 失败的报错问题,具体如下图所示。
关于这个问题,我参考了视频教程的评论区,只需将 coco128.zip 解压到 coco128 文件夹,再将其放在项目文件夹的同一目录下即可。
四、关于 OMP: Error #15: Initializing libiomp5md.dll, but found ...
报错~问题~无穷尽也!关于这个问题,我也参考了视频教程的评论区,在 train.py 文件中补充以下代码即可:
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'
五、关于 RuntimeError: CUDA out of memory.
这应该是我运行 train.py 文件遇到的最后一个问题啦!大家要先打开自己的任务管理器,在性能页面查看自己的 GPU 信息,如下图所示,我电脑中有 NVIDIA 的只有 GPU1,因此我在 train.py 文件中补充了以下代码:
import os
os.environ['CUDA_VISIBLE_DEVICES'] = "1"
六、运行 YOLOv5 的 train.py 文件
解决上面所有问题后,我们的 train.py 文件就可以成功地跑起来啦~
补充:运行 detect.py 发现图片无法识别
文章进行到这里,你以为已经结束了吗!并没有噢!在尝试运行 train.py 文件的过程中,我出于某种好奇心理,又去运行了 detect.py 文件,结果发现!输出的图片又没有标注框啦!图片居然又无法识别/(ㄒoㄒ)/~~于是我又去翻了视频教程的评论区,发现可以用这个方式解决:将 cudnn.benchmark = True 这一行剪切到 if webcam: 的上一行。具体如下图所示:
最后说些话
其实作者最近在整理《目标检测 YOLOv5 开源项目入门实战》的第二篇文章,但是在跟着土堆的视频教程学习的过程中,总是难免会遇到一些配置问题或者其他问题,所以进度就会比较缓慢,但是通过这次问题解决的经历,我明白了该重装时就重装!不要因为担心重装会带来更多问题而逃避重装,有时候重装合适的版本会让你少走很多弯路!最后希望王子公主们学习顺利!工作顺利!