在自定义数据上训练YOLOv5
本指南介绍如何使用 YOLOv5模型🚀 训练您自己的自定义数据集。训练自定义模型是为通用对象检测之外的特定现实世界应用定制计算机视觉解决方案的基本步骤。
开始之前
首先,确保您已建立必要的环境。克隆YOLOv5 版本库,并从 requirements.txt
.A Python.8.0 环境 PyTorch.8 是必不可少的。模型和数据集会自动从最新的YOLOv5下载。 释放 如果本地找不到它们。
git clone https://github.com/ultralytics/yolov5 # Clone the repository
cd yolov5
pip install -r requirements.txt # Install dependencies
自定义数据训练
开发自定义对象检测模型是一个迭代过程:
- 收集和整理图片:收集与特定任务相关的图片。高质量、多样化的数据至关重要。请参阅我们的数据收集和注释指南。
- 标注对象:准确标注图像中感兴趣的对象。
- 训练模型:使用标注数据训练 YOLOv5 模型。从预先训练的权重开始,充分利用迁移学习。
- 部署与预测:利用训练有素的模型对未见过的新数据进行推理。
- 收集边缘案例:找出模型表现不佳的情况(边缘案例),并将类似数据添加到数据集中,以提高稳健性。重复循环。
Ultralytics HUB为整个机器学习运营(MLOps)周期提供了简化的无代码解决方案,包括数据集管理、模型训练和部署。
许可
Ultralytics 提供两种许可选项,以适应不同的使用情况:
- AGPL-3.0 许可:这种经 OSI 批准的开源许可证非常适合学生、研究人员和热衷于开放协作和知识共享的爱好者。它要求衍生作品在相同许可证下共享。详情请查看LICENSE文件。
- 企业许可证:该许可证专为商业应用而设计,允许将Ultralytics 软件和人工智能模型无缝集成到商业产品和服务中,而无需遵守AGPL-3.0开源规定。如果您的项目需要商业部署,请申请企业许可证。
在Ultralytics 许可页面上进一步了解我们的许可选项。
在开始训练之前,数据集的准备工作至关重要。
1.创建数据集
YOLOv5 模型需要标注数据来学习对象类别的视觉特征。正确组织数据集是关键。
1.1 创建 dataset.yaml
数据集配置文件(如 coco128.yaml
)概述了数据集的结构、类名和图像目录路径。 COCO128 作为一个小型示例数据集,它由大量图像中的前 128 幅图像组成。 COCO 数据集。它有助于快速测试训练管道和诊断潜在问题,例如 过拟合.
"(《世界人权宣言》) dataset.yaml
文件结构包括
path
:包含数据集的根目录。train
,val
,test
:从path
到包含图像的目录或列出训练集、验证集和测试集图像路径的文本文件。names
:类索引(从 0 开始)与相应类名的字典映射。
以下是 coco128.yaml
(在 GitHub 上查看):
# Dataset root directory relative to the yolov5 directory
path: ../datasets/coco128
# Train/val/test sets: specify directories, *.txt files, or lists
train: images/train2017 # 128 images for training
val: images/train2017 # 128 images for validation
test: # Optional path to test images
# Classes (example using 80 COCO classes)
names:
0: person
1: bicycle
2: car
# ... (remaining COCO classes)
77: teddy bear
78: hair drier
79: toothbrush
1.2 利用模型进行自动标记
使用工具进行人工标注是一种常见的方法,但这一过程可能非常耗时。基础模型的最新进展为注释过程的自动化或半自动化提供了可能,从而大大加快了数据集的创建速度。以下是几个可协助生成标签的模型示例:
- Google 双子座:像 Gemini 这样的大型多模态模型拥有强大的图像理解能力。它们可以识别和定位图像中的对象,生成边界框或描述,并将其转换为YOLO 格式的标签。请在所提供的笔记本教程中探索其潜力。
- SAM2 (分段 Anything Model 2):以分割为重点的基础模型,如SAM2,可以高精度地识别和划分对象。虽然主要用于分割,但所得到的遮罩通常可以转换成边界框注释,适用于对象检测任务。
- YOLOWorld:该模型提供开放式词汇检测功能。您可以提供您感兴趣的对象的文本描述,YOLOWorld 可以在图像中找到它们,而无需事先对这些特定类别进行培训。这可以作为生成初始标签的起点,然后再对其进行完善。
使用这些模型可以提供一个 "预标签 "步骤,减少所需的人工操作。但是,审查和改进自动生成的标签以确保准确性和一致性至关重要,因为标签的质量会直接影响训练有素的YOLOv5 模型的性能。生成(并可能改进)标签后,请确保它们符合 YOLO 格式一个 *.txt
文件,每行代表一个对象,如 class_index x_center y_center width height
(归一化坐标,零索引类)。如果图像中没有感兴趣的对象,则没有相应的 *.txt
文件。
YOLO 模式 *.txt
文件规格精确:
- 每个对象边界框一行。
- 每一行必须包含
class_index x_center y_center width height
. - 坐标必须是 正化 的像素值划分为 0 和 1 之间的范围。
x_center
和width
除以图像的总宽度,再除以y_center
和height
图像的总高度。 - 类索引为零索引(即第一个类由
0
第二个是1
等等)。
与上图相对应的标签文件,包含两个 "人 "对象(类索引 0
)和一个 "领带 "对象(类索引 27
),看起来会是这样:
1.3 整理目录
构建您的 数据集 目录,如下图所示。默认情况下,YOLOv5 会将数据集目录(例如、 /coco128
("..."),使其位于 /datasets
位于 毗邻 的 /yolov5
存储库目录。
YOLOv5 会自动定位每幅图像的标签,将最后一个 /images/
在图像路径中使用 /labels/
.例如
../datasets/coco128/images/im0.jpg # Path to the image file
../datasets/coco128/labels/im0.txt # Path to the corresponding label file
推荐的目录结构为
/datasets/
└── coco128/ # Dataset root
├── images/
│ ├── train2017/ # Training images
│ │ ├── 000000000009.jpg
│ │ └── ...
│ └── val2017/ # Validation images (optional if using same set for train/val)
│ └── ...
└── labels/
├── train2017/ # Training labels
│ ├── 000000000009.txt
│ └── ...
└── val2017/ # Validation labels (optional if using same set for train/val)
└── ...
2.选择型号
选择一个预训练模型来启动训练过程。与从头开始训练相比,从预先训练的权重开始可以大大加快学习速度并提高性能。YOLOv5 提供不同大小的模型,每种模型都能在速度和准确性之间取得不同的平衡。例如,YOLOv5s是第二小、最快的模型,适用于资源有限的环境。有关所有可用模型的详细比较,请参阅README 表格。
3.火车
开始 模型培训 使用 train.py
脚本。基本论据包括
--img
:定义输入 图像大小 例如--img 640
).尺寸越大,精度越高,但需要的GPU 内存也越多。--batch
:确定 批量大小 例如--batch 16
).选择GPU 可以处理的最大尺寸。--epochs
:指定训练的总次数 纪元 例如--epochs 100
).一个历元代表对整个训练数据集的一次完整检测。--data
:通往您的dataset.yaml
文件(例如--data coco128.yaml
).--weights
:初始权重文件的路径。使用预训练的权重(例如--weights yolov5s.pt
),这样收敛速度更快,效果更好。要从头开始训练(不建议这样做,除非你有非常大的数据集和特殊需求),请使用--weights '' --cfg yolov5s.yaml
.
如果本地找不到预训练的权重,则会自动从最新的YOLOv5 版本中下载。
# Example: Train YOLOv5s on the COCO128 dataset for 3 epochs
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt
优化训练速度
就业 --cache ram
或 --cache disk
中缓存数据集图像 内存 或本地磁盘。这大大加快了训练速度,尤其是当数据集 I/O(输入/输出)操作成为瓶颈时。需要注意的是,这需要大量的内存或磁盘空间。
本地数据存储
💡 始终使用本地存储的数据集进行训练。从网络驱动器(如Google Drive)或远程存储访问数据可能会大大降低速度,影响训练性能。将数据集复制到本地固态硬盘通常是最佳做法。
所有训练输出,包括权重和日志,都保存在 runs/train/
目录。每个培训课程都会创建一个新的子目录(例如、 runs/train/exp
, runs/train/exp2
等)。要获得互动式的实践经验,请浏览我们官方教程笔记本中的培训部分:
4.可视化
YOLOv5 可与各种工具无缝集成,用于可视化培训进度、评估结果和实时监控绩效。
Comet 日志和可视化 🌟 新
Comet完全集成了全面的实验跟踪功能。实时可视化指标、保存超参数、管理数据集和模型检查点,并使用交互式Comet 自定义面板分析模型预测。
入门简单明了:
pip install comet_ml # 1. Install Comet library
export COMET_API_KEY=YOUR_API_KEY_HERE # 2. Set your Comet API key (create a free account at Comet.ml)
python train.py --img 640 --epochs 3 --data coco128.yaml --weights yolov5s.pt # 3. Train your model - Comet automatically logs everything!
深入了解我们的 Comet 集成指南.了解有关Comet 功能的更多信息,请访问其官方网站 文献资料.试用Comet Colab Notebook 进行现场演示:
ClearML 日志和自动化 🌟 新
ClearML集成可实现详细的实验跟踪、数据集版本管理,甚至远程执行训练运行。只需简单几步即可激活ClearML :
- 安装软件包:
pip install clearml
- 初始化ClearML:运行
clearml-init
一次,连接到您的ClearML 服务器(无论是自托管服务器还是 免费层).
ClearML 自动捕捉实验细节、模型上传、比较、未提交的代码更改和已安装的软件包,从而确保完全的可重复性。您可以在远程代理上轻松安排训练任务,并使用ClearML 数据管理数据集版本。了解ClearML 集成指南的全面详情。
本地记录
使用 张量板 并保存为 CSV 特定实验目录下的文件(例如 runs/train/exp
).记录的数据包括
"(《世界人权宣言》) results.csv
文件在每个纪元后更新,并绘制成 results.png
一旦培训结束。您还可以绘制任何 results.csv
文件:
from utils.plots import plot_results
# Plot results from a specific training run directory
plot_results("runs/train/exp/results.csv") # This will generate 'results.png' in the same directory
5.下一步工作
训练成功完成后,表现最好的模型检查点 (best.pt
)已保存,可随时部署或进一步完善。下一步可能采取的措施包括
- 使用训练有素的模型,通过 CLI或 Python.
- 进行验证,以评估模型在不同数据拆分(如保留的测试集)上的准确性和概括能力。
- 将模型导出为各种部署格式,如 ONNX, TensorFlow SavedModel或 TensorRT在不同平台上进行优化推理。
- 采用超参数调整技术,可能会挤出更多的性能增益。
- 根据我们的 "获得最佳培训效果的技巧 "继续改进您的模型,并根据性能分析迭代添加更多样化和更具挑战性的数据。
支持的环境
Ultralytics 提供的即用型环境配备了以下基本依赖项 CUDA、cuDNNPython和 PyTorch,以便顺利启动。
- 免费GPU 笔记本:
- 云平台:
- Google 云计算 GCP 快速入门指南
- 亚马逊 AWS:AWS 快速入门指南
- Microsoft Azure:AzureML 快速入门指南
- 本地设置:
- Docker: Docker 快速入门指南
- Docker: Docker 快速入门指南
项目现状
此徽章表示所有YOLOv5 GitHub 行动 持续集成 (CI)测试均已成功通过。这些严格的 CI 测试涵盖了 macOS、Windows 和 Ubuntu 操作系统的核心功能,包括训练、验证、推理、导出和基准。测试每 24 小时自动执行一次,并在每次代码提交时执行,以确保始终如一的稳定性和最佳性能。
常见问题
常见问题
如何在自定义数据集上训练YOLOv5 ?
在自定义数据集上训练YOLOv5 涉及几个关键步骤:
- 准备数据集:收集图像并添加注释。确保注释符合要求 YOLO 格式.将图像和标签整理成
train/
和val/
(并可选择test/
)目录。考虑使用以下模型 Google 双子座, SAM2或 YOLOWorld 以协助或自动完成贴标过程(见第 1.2 节)。 - 设置环境:克隆YOLOv5 软件源并使用以下命令安装依赖项
pip install -r requirements.txt
. - 创建数据集配置:定义数据集路径、类数和类名。
dataset.yaml
锉刀 - 开始培训:执行
train.py
脚本,提供指向dataset.yaml
,所需的预训练权重(如yolov5s.pt
)、图像大小、批次大小和历时次数。
为什么要使用Ultralytics HUB 来训练我的YOLO 模型?
Ultralytics HUB是一个综合性平台,旨在简化整个YOLO 模型开发生命周期,通常无需编写任何代码。主要优势包括
- 简化培训:使用预配置环境和直观的用户界面,轻松训练模型。
- 综合数据管理:在平台内高效上传、控制版本和管理数据集。
- 实时监控:使用以下集成工具跟踪培训进度并可视化性能指标 Comet或 TensorBoard
- 协作功能:通过共享资源、项目管理工具和便捷的模型共享,促进团队合作。
- 无代码部署:将训练有素的模型直接部署到各种目标上。
如需实际操作,请查看我们的博文:如何使用Ultralytics HUB 训练自定义模型。
如何将注释数据转换为YOLOv5 格式?
无论您是手动注释还是使用自动化工具(如第 1.2 节中提到的工具),最终标签都必须符合YOLOv5 所要求的特定YOLO 格式:
- 创建一个
.txt
文件。文件名应与图像文件名一致(如image1.jpg
相当于image1.txt
).将这些文件放入labels/
目录并行images/
目录(例如../datasets/mydataset/labels/train/
). - 中的每一行
.txt
文件代表一个对象注释,格式为class_index center_x center_y width height
. - 坐标 (
center_x
,center_y
,width
,height
) 必须是 正化 (值介于 0.0 和 1.0 之间)。 - 等级指数为 零基 (第一班是
0
第二个是1
等)。
许多手动标注工具可直接导出为YOLO 格式。如果使用自动模型,则需要脚本或流程将其输出(如边界框坐标、分割掩码)转换为这种特定的规范化文本格式。确保您的最终数据集结构符合指南中提供的示例。更多详情,请参阅我们的《数据采集和注释指南》。
在商业应用中使用YOLOv5 有哪些许可选项?
Ultralytics 可根据不同需求提供灵活的许可:
- AGPL-3.0 许可:该开源许可证适用于学术研究、个人项目以及可接受开源合规性的情况。它规定修改和衍生作品也必须在AGPL-3.0 下开源。查看AGPL-3.0 许可详情。
- 企业许可证:商业许可证,专为将YOLOv5 集成到专有产品或服务中的企业设计。该许可证取消了AGPL-3.0开源义务,允许闭源发布。请访问我们的许可证页面,了解更多详情或申请企业许可证。
选择最符合项目要求和分发模式的许可证。