0%

YOLOv8 训练自己的数据

YOLOv8YOLO 的最新(20240206)版本,由Ultralytics 提供。YOLOv8 支持全方位的视觉 AI
任务,包括检测分割姿态估计跟踪分类。这种多功能性使用户能够在各种应用和领域中利用YOLOv8的功能。

本文将介绍如何快速训练自己的 YOLOv8 模型。

仓库地址: https://github.com/kekxv/YOLOv8Tutorial

YOLO:简史

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学约瑟夫-雷德蒙(Joseph Redmon)
阿里-法哈迪(Ali Farhadi)开发。YOLO2015 年推出,因其高速度和高精确度而迅速受到欢迎。

  • 2016 年发布的YOLOv2 通过纳入批量归一化锚框维度集群改进了原始模型。
  • 2018 年推出的YOLOv3 使用更高效的骨干网络多锚和空间金字塔池进一步增强了模型的性能。
  • YOLOv42020 年发布,引入了 Mosaic 数据增强、新的无锚检测头和新的损失函数等创新技术。
  • YOLOv5进一步提高了模型的性能,并增加了超参数优化、集成实验跟踪和自动导出为常用导出格式等新功能。
  • YOLOv62022 年由美团开源,目前已用于该公司的许多自主配送机器人。
  • YOLOv7增加了额外的任务,如 COCO 关键点数据集的姿势估计。
  • YOLOv8YOLO 的最新(20240206)版本,由Ultralytics 提供。YOLOv8 支持全方位的视觉 AI
    任务,包括检测分割姿态估计跟踪分类。这种多功能性使用户能够在各种应用和领域中利用YOLOv8的功能。

更多的资料可以查看:https://docs.ultralytics.com/zh/

关于 Makefile

Makefile 一般用于c的编译辅助,但是它不只是可以用于编译,它的目标规则特性,可以让用来做一些其他的事情:

  • make clean 清理缓存
  • make clean-all 清理所有缓存,包括训练数据
  • make install-dev 安装依赖
  • make train 开始训练
  • make test 测试 image/test 文件夹的识别结果
  • make val 验证
  • make onnx 导出 onnx 模型,其他的 ncnn以及mnn可以通过onnx模型转换
  • make env 创建虚拟环境
  • make labelImg 启动分类标注工具

可以查看 Makefile文件以及官方文档,手动使用 cli 进行训练等操作

开始准备

样本收集

需要准备训练样本,这个根据情况进行收集,前期做验证,可以考虑通过搜索引擎进行搜集,注意来源数据是否涉及版权以及个人隐私问题,请不要公开发布涉及版权以及个人隐私问题。

本项目提供的证件样本,均通过搜索引擎从公开网站所获取。(如果提供的样张涉及到版权或者隐私问题,请发issue,将会进行处理。)

将收集到的训练样本,放到 datasets/images/train,想要做测试的样本,放到datasets/images/test里面。

开始标注

可以根据自己的实际情况进行标注,当前项目可以考虑使用labelImg 工具进行标注。执行以下命令,将会启动labelImg标注工具。

1
make labelImg

labelImg 快捷键:

A 上一张

D 下一张

W 画框

建议打开自动保存

开始训练

标注完成之后,就可以开始训练了:

1
2
3
4
# 训练 epochs 10 
# make train-10
# 训练
make train

如果出现Dataset 'config.yaml' images not found ⚠️, missing path则可能路径识别错误,请将config.yamlpath
改为datasets目录的绝对路径。
增加动态修改为当前位置的配置,应该不会再出现这个问题。

训练的结果大概是:

1
2
3
4
5
6
7
8
9
196 epochs completed in 2.217 hours.
Optimizer stripped from runs/detect/train/weights/last.pt, 6.3MB
Optimizer stripped from runs/detect/train/weights/best.pt, 6.3MB
.....
Validating runs/detect/train/weights/best.pt...
Speed: 1.0ms preprocess, 132.0ms inference, 0.0ms loss, 0.4ms postprocess per image
Results saved to runs/detect/train
💡 Learn more at https://docs.ultralytics.com/modes/train
#yolo task=detect mode=train weight_decay=0.001 box=4.5 model=yolov8x.pt data=config.yaml batch=-1 imgsz=640 epochs=10

如果没有出现报错,则表示训练完成。

测试模型

测试模型效果,可以将图片放到 datasets/images/test ,然后执行:

1
make test

测试的结果将会保存在目录runs/detect/predict(序号),根据输出的日志查看。

如果效果可以,则可以考试正式的数据训练😁。

导出为 ONNX

默认的模型格式为.pt,如果是服务器进行识别,则可以考虑直接使用,如果是想要边缘计算或者不想使用.pt
的模型,可以考虑导出为onnx模型,只需要执行:

1
make onnx

则可以直接导出为onnx格式模型。

额外说明

支持系统

目前只在 Linux以及macOS测试,windows可以考虑使用 wsl 进行训练。后续增加windows支持。 windows 建议使用wsl,或者 powershell 进行操作。

windows系统注意

需要手动安装 python3makecmake(用于onnx,如果不需要可以不装)。

训练卡住问题

如果开始训练出现卡住的问题,可能是无法访问https://ultralytics.com
,可以检查一下网络环境,或者尝试将front/Arial.ttf字体加入到系统。再进行训练

关于 labelImg

labelImg 需要使用 python3.9 的版本,其他版本会有bug,无法保存

关于安装:

1
make install-dev

激活虚拟环境

1
. env/bin/activate

退出虚拟环境

1
deactivate

训练:

1
yolo task=detect mode=train model=yolov8n.pt data=config.yaml batch=-1 imgsz=640 epochs=100

相关文档

yolov8 文档
https://docs.ultralytics.com/zh/quickstart/

在线转换模型类型:
https://convertmodel.com