YoloV8-目标检测-训练自己的数据集
更新时间:
一、开发环境
推荐 Windows 10 以上
Nvidia 显卡(可选)
AnaConda 最新版本即可
Python 3.9 (PyTorch 当前只支持 3.7-3.9)
YoloV8 最新版本即可
PyTorch 2.0.0(CUDA11.8)官方安装要求
标记软件 labelimg 最新版本即可
YoloV8 更新得不慢,官方文档也在持续更新,很多地方比如参数需要结合实际情况调整,这些地方直接查看官方文档即可。
1.1 安装 AnaConda
使用 Anaconda 创建个干净专用的环境,避免和其他内容相互影响。
安装过程中,个人建议勾选 Add to Path,要么后面还要自己添加环境变量,虽然它提示不建议勾选。
- 创建虚拟环境
可以使用图形界面或者终端创建新环境,后面其他的命令还是得用终端,所以从这里就调好终端为好。
1 |
|
提示:如果命令行前面没有(base),或者无法激活 conda 环境,说明 conda 没有和终端关联,
运行 conda init powershell
这里的 powershell 要替换成当前用的终端类型。
后面的内容都保持终端在名为 yolo 环境下操作。
1.2 安装 yolo
设置清华源pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
改写文件 C:/Users/用户名/.condarc
1 |
|
继续在终端里运行,v8 的安装也进行了简化,一行命令即可。pip install ultralytics
查看当前可更新的包pip list --outdated
更新单个包pip install --upgrade xxx
1.3 开启 GPU
要求
- N 卡,官网检查显卡是否支持 CUDA 链接,提示 Your GPU Compute Capability 就是支持。
- 使用终端查看两个 CUDA 版本,一个是驱动的 CUDA,一个是运行时 CUDA,驱动 CUDA 版本就是运行时支持的最高版本。
- 查看驱动 CUDA:
nvidia-smi
- 查看运行时 CUDA:
nvcc -V
- 查看驱动 CUDA:
- 如果显卡规格比较高,但驱动 CUDA 版本比较低,更新显卡驱动或者单独安装指定 CUDA 版本的驱动
安装命令
根据实际情况,在官方文档勾选选项生成命令,比如这样:conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
- 注意选择的 CUDA 版本要和自己的运行时版本一致
- 如果官网没有自己的版本,去以前的版本里找找:install previous versions of PyTorch
- 现在的版本不需要像以前还需要单独安装一些内容,这一条命令就可以。
验证安装
1 |
|
1.4 测试
yolo predict model=yolov8n.pt source="https://ultralytics.com/images/bus.jpg"
如果图片下载超时,创建一个工作目录,用浏览器下载到本地后再运行。yolo predict model=yolov8n.pt source="./bus.jpg" device=0
预览:添加参数 show=True
(大写)或者 show
如果是图片会一闪而过,此时可以添加 save=True
或者 save
yolo predict model=yolov8n.pt source="./bus.jpg" device=0 show save
更多参数
二、训练自己的数据集
2.1 准备待标记训练的图片
略略略
2.2 标记
1. 安装并打开标记软件
有两个标记程序,labelme 和 labelimg,各有优劣
- labelme 自动保存,多种标记形状,需要将数据转换成 yolo 格式
- labelimg 自动保存,方形标记,可以直接保存成 yolo 格式
安装 labelme pip install labelme
打开程序 labelme
安装 labelimg pip install labelimg
打开程序 labelimg
由于 labelimg 支持直接导出 yolo 格式,所以个人用这个标记,要么还得用程序转一下。
2. 基础设置
- 打开自动保存:View-AutoSave
- 保存类型选择 yolo
- 更改保存目录到 train/labels
3. 标记技巧
- 每张图都有的标记,复制文件作为模板,批量改名
- w 是创建矩形标记,a 是上一个,d 是下一个,手正好放在 wasd 键位上
- 批量生成整张标记的文件,根据文件名批量生成同名 txt 到 labels 文件夹,其中 f.write 后面第一个数字是类别,后面数字的意思是整张图片。
1 |
|
4. 导出
打开 train/labels/classes,复制到 data.yaml 的#Classes names:[ 这里 ],需要加英文的双引号和逗号,表示字符串数组,而且要在一行,否则会被认为是另外一种 keyvalue 的格式(一行是一个分类 0:player)当然两种写法都行,看自己情况。
2.3 准备训练资源
1. 数据集目录结构
yolo 支持多种组织形式,以下只是其中一种。
- 下方的结构
- 复制 train 文件夹并命名为 val 和 test,也就是 3 个文件夹除了名字不同,其他可以都一样,也可以有针对性地设置
- 用程序将所有文件写到 txt 文本里,再修改 data.yaml 里为文件路径
1 |
|
2. 修改文件内参数
以下俩文件都是改自 github
源文件 coco128.yaml,这 3 个路径都是相对 datasets 的路径,也可以设置根目录 path。
1 |
|
源文件 yolov8n.yaml,只修改 nc 后面的数字为 分类的个数,也就是上面文件 names 里的元素个数
1 |
|
更大一点的模型
1 |
|
2.4 开始训练
可以用 cli 或者 python 两种方式,用 cli 更方便些。yolo task=detect mode=train model=v8n.yaml data=data.yaml epochs=100 device=0
主要入参说明:
task:任务类型。
mode: 训练、验证还是预测。
model: 模型配置文件,可选 yolov8n.yaml、yolov8s.yaml 等,源文件从 github 上下载即可,根据实际情况改写参数。
data: 要生成的数据集配置文件,根据实际情况改写。
epochs:训练迭代次数,影响训练效果和时间。
batch:每批图像数(自动批处理时-1),影响训练效果和时间。
官方完整参数
精简训练命令
先将 epochs 调小,测试一下流程是否可以yolo detect train model=v8s.yaml data=data.yaml epochs=2
没问题后,100 以上yolo detect train model=v8s.yaml data=data.yaml epochs=100
batch 默认是 16
三、目标检测
简单检测
yolo detect predict model="./datasets/runs/detect/train/weights/best.pt" source="./a17.jpg" show save
source 里可以是各种内容,比如视频流等,完整参数看文档
后面就都是应用层面的内容了。
请吃小笼包

