前言
很遗憾的是我的笔记本上没有 NV 的独显,所以不得不在 Windows 的台式机上配置相关环境,但过程并没有太大区别,可以作为参考。
我准备把一块老的机械硬盘,拿去做 Linux 的系统盘!
Window 下的数据集信息配置
在 YOLO入门 2 标注数据集并训练检测 中写过关于数据集的配置方法。
其中需要对数据集信息配置 (.yaml),由于 Window 和 Linux 的路径写法不同,需要进行重新配置:
path: D:\YOLO\DataSet\UA-DETRAC\SampleTesttrain: - Train\MVI_20011val: - Val\MVI_20062test: - Test\MVI_39311
nc: 1names: ['car']
环境测试
如果对环境不清楚的可以运行以下代码进行测试:
# 导入 torch 库import torch# 查看版本print(torch.__version__)# 查看 GPU 是否可用print(torch.cuda.is_available())# 查看 GPU 设备数量print(torch.cuda.device_count())
如果 PyTorch 配置正确,并且支持 CUDA:
1.10.1+cu113True1
如果环境配置错误或不支持 CUDA:
1.10.1+cpuFalse0
配置 CUDA 环境
从 NVIDIA 获取软件的安装包和安装脚本:
不多说明,Nvidia 给的教程很详细,但需要注意,有部分老显卡,例如 XM150 是不支持最新的驱动,需要安装老版本,最好是从最新的驱动一个个试过去。
配置 Pytorch-CUDA
如果是通过如下指令安装的 Pytorch,只能用 CPU 计算:
pip3 install pytorch
输入如下指令,安装 Pytorch 的 CUDA 版本:
pip3 install torch==1.10.1+cu113 torchvision==0.11.2+cu113 torchaudio===0.10.1+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html
安装指令和安装的 CUDA 版本有关,Pytorch 官网会根据系统、CUDA版本等自动生成安装指令。
关于 CUDA 的版本,不要看安装的版本号,例如我获得的 CUDA 安装包的版本是 11.5.1,但 torch 官网根本没有这个版本号,需要看大版本号或者直接安装和 torch 对应的 CUDA 。
最终测试
如果配置没有没有错误,输入如下执行,使用 CUDA 加速:
python3 train.py --weights yolov5s.pt --epoch 100 --data DataSet\UA-DETRAC\SampleTest\SampleTest.yaml --img 320 --nosave --device 0
- device DEVICE : cuda device, i.e. 0 or 0,1,2,3 or cpu
如果只有1个 GPU,将 device 参数从 cpu 修改为 0 即可。
报错合集
UserWarning: Distutils was imported before Setuptools.
D:\Python\lib\site-packages\setuptools\distutils_patch.py:25: UserWarning: Distutils was imported before Setuptools. This usage is discouraged and may exhibit undesirable behaviors or errors. Please use Setuptools’ objects directly or at least import Setuptools first. warnings.warn(
这个错误是比较常见的包导入顺序导致的错误,YOLOv5 中 Distuils 比 Setuptools 先导入了。
解决方法是在所有文件中加入 import Setuptools ,但这样过于繁琐,所以参考了网友给的意见1,安装 49.2 以下版本的 setuptools:
But that code must run before importing django in every manage.py file, so it is not easy to disable in my test suite. Another workaround is to install “setuptools<49.2”.
pip3 install "setuptools<49.2"
[WinError 1455] 页面文件太小,无法完成操作
参考 Star星屹程序设计2 给出的方案:
方法1:修改虚拟内存
控制面板 >> 所有控制面板项 >> 系统 >> 高级系统设置 >> 高级 >> 性能 >> 高级 >> 更改 >> 自定义大小,修改初始大小和最大值。
只要比当前盘符的剩余空间小就行,如果空间足够可以直接将大小调整为 100GB 都可以。
修改完成并保存后,重启电脑,开始训练。
方法2:修改模型参数
修改 YOLOv5 模型的参数,需要修改的文件在 yolov5-master\utils\datasets.py,需要修改参数 num_workers 为 0 。
如果 num_worker 设为0,意味着每一轮迭代时,dataloader 不再有自主加载数据到RAM这一步骤(因为没有worker了),而是在RAM中找batch,找不到时再加载相应的batch。缺点当然是速度更慢。3
修改这个参数只是会减慢训练性能,并不影响最终模型的性能。
方法3:减小 Batch-Size
如果设置过虚拟内存并修改过参数,到这就是训练集单张非常庞大或 Batch-Size 过大,建议是直接修改 yolo 训练时的 batch-size 参数(YOLOv5 默认是16):
python train.py --batch-size 8