一步一步详解如何在CPU上训练YOLO v7模型(实战并分享注意事项)
我正在参加「掘金·启航计划」
开发所处环境:
- python版本3.8
- Inter或者AMD的CPU
对于一些朋友写代码用的笔记本,可能和我一样,显卡不支持cuda或者没有独立显卡,但是想用cpu简单训练一下,看看效果,借掘金社区活动的机会,这里我给大家分享一下自己的踩坑记录。
这里我训练了YOLOv7的人脸检测模型,运行良好,在文末我会提供模型给大家测试使用。
一、创建虚拟环境
使用conda就可以了,我这里选择miniconda,因为更干净。
1.下载miniconda
下载地址:Miniconda — conda documentation把安装位置改为D盘,其他都默认。
安装后只有终端,没有其他的软件,非常的干净。
2.pycharm新建项目
在pycharm中使用conda即可,快捷方便。(以往是在命令号中)
二、下载源码
下载地址:
WongKinYiu/yolov7: Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors (github.com)
不要忘记下载pt权重
文件,下好之后放在根目录下面。下载YOLOv7这个model就可以了。
三、安装依赖
安装依赖要分为两步,第一步是torch的安装,第二步是其他依赖库的安装。
1.安装torch
下载官网地址:PyTorch
2.下载其他依赖
使用YOLOv7提供的requirement.txt文件下载其他内容。
pip install -r requirements.txt
四、准备数据集
YOLOv7的数据集格式是这样的,images里面是jpg文件,labels里面是txt文件。
我这里准备了149张训练集,22张测试集。数据量比较小,但是效果最后还凑合。
注意:val是必须的,如果没有val的话,就不能正常训练。
我这里是使用Make Sense进行标注,大家可以参考,也可用其他标注工具。
五、训练过程(包含踩坑)
1.新建yaml文件
face.yaml文件内容如下:
train: ./data/face/images/train # 149 images
val: ./data/face/images/val # 22 images
# number of classes
nc: 1
names: ["face"]
2.修改权重的yaml文件
我们使用的yolov7.pt权重,所以修改yolov7.yaml
只修改我框出的内容即可。
3.修改train.py文件
因为我们使用cpu训练,跑的慢,而且我们这里主要是为了验证,
所以我们就修改epochs=20
|batch-size=1
device修改为cpu,workers可以改也可以不改,根据自己的cpu线程数来。
4.运行train.py文件
可能会报一个关于wandb的错误,这是记录日志的,如果你不需要可以向我一样卸载它。
开始训练
训练一分多,出现报错
5.解决报错
这里我们只要安装报错去修改就可以了。把loss.py文件对应的代码由cuda修改为cpu。
再次训练就可以成功训练了。
六、总结
- run文件夹是运行产生的,可以删掉。
- yolov7.pt模型还是大了些,推导起来只有1.3fps,可以选用更轻量的模型,可以在YOLOv7的github主页下的tag标签,有更轻量的模型,并没有像YOLOv5一样放在显目的地方。
- epochs选择20还是太小了,选择100的效果会显著很多,CPU训练大概0.7S一张图片,大家可以估算一下训练时间。
- cpu训练只是为了验证一下,建议还是使用GPU来训练,时间就是金钱。