跳至内容

在自定义数据上训练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

自定义数据训练

Ultralytics 主动学习循环图显示了数据收集、标记、培训、部署和边缘案例收集过程

开发自定义对象检测模型是一个迭代过程:

  1. 收集和整理图片:收集与特定任务相关的图片。高质量、多样化的数据至关重要。请参阅我们的数据收集和注释指南。
  2. 标注对象:准确标注图像中感兴趣的对象。
  3. 训练模型:使用标注数据训练 YOLOv5 模型。从预先训练的权重开始,充分利用迁移学习
  4. 部署与预测:利用训练有素的模型对未见过的新数据进行推理
  5. 收集边缘案例:找出模型表现不佳的情况(边缘案例),并将类似数据添加到数据集中,以提高稳健性。重复循环。

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_centerwidth 除以图像的总宽度,再除以 y_centerheight 图像的总高度。
  • 类索引为零索引(即第一个类由 0第二个是 1等等)。

有两个人和一条领带注释的图像示例

与上图相对应的标签文件,包含两个 "人 "对象(类索引 0)和一个 "领带 "对象(类索引 27),看起来会是这样:

注释图像的YOLO 格式标签文件内容示例

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)
            └── ...

建议的YOLOv5 数据集目录结构图

2.选择型号

选择一个预训练模型来启动训练过程。与从头开始训练相比,从预先训练的权重开始可以大大加快学习速度并提高性能。YOLOv5 提供不同大小的模型,每种模型都能在速度和准确性之间取得不同的平衡。例如,YOLOv5s是第二小、最快的模型,适用于资源有限的环境。有关所有可用模型的详细比较,请参阅README 表格

显示尺寸、速度和精度的YOLOv5 型号对比图

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等)。要获得互动式的实践经验,请浏览我们官方教程笔记本中的培训部分: 在 Colab 中打开 在 Kaggle 中打开

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 进行现场演示: 在 Colab 中打开

Comet UI 显示YOLOv5 培训指标和可视化效果

ClearML 日志和自动化 🌟 新

ClearML集成可实现详细的实验跟踪、数据集版本管理,甚至远程执行训练运行。只需简单几步即可激活ClearML :

  • 安装软件包: pip install clearml
  • 初始化ClearML:运行 clearml-init 一次,连接到您的ClearML 服务器(无论是自托管服务器还是 免费层).

ClearML 自动捕捉实验细节、模型上传、比较、未提交的代码更改和已安装的软件包,从而确保完全的可重复性。您可以在远程代理上轻松安排训练任务,并使用ClearML 数据管理数据集版本。了解ClearML 集成指南的全面详情。

ClearML 实验管理用户界面显示YOLOv5 培训运行的图表和日志

本地记录

使用 张量板 并保存为 CSV 特定实验目录下的文件(例如 runs/train/exp).记录的数据包括

  • 培训和验证损失及性能指标。
  • 显示应用增强技术(如马赛克)的图像样本。
  • 地面实况标签与模型预测一起进行目测。
  • 关键评估指标,如精确率-召回 (PR)曲线。
  • 混淆矩阵用于详细的分类性能分析。

本地日志记录结果示例,包括YOLOv5 培训的图表和图像镶嵌图

"(《世界人权宣言》) 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

results.png 示例图显示了 mAP、精确度、召回率和损失率等训练指标的历时值

5.下一步工作

训练成功完成后,表现最好的模型检查点 (best.pt)已保存,可随时部署或进一步完善。下一步可能采取的措施包括

支持的环境

Ultralytics 提供的即用型环境配备了以下基本依赖项 CUDAcuDNNPythonPyTorch,以便顺利启动。

项目现状

YOLOv5 持续集成状态徽章

此徽章表示所有YOLOv5 GitHub 行动 持续集成 (CI)测试均已成功通过。这些严格的 CI 测试涵盖了 macOS、Windows 和 Ubuntu 操作系统的核心功能,包括训练验证推理导出基准。测试每 24 小时自动执行一次,并在每次代码提交时执行,以确保始终如一的稳定性和最佳性能。

常见问题

常见问题

如何在自定义数据集上训练YOLOv5 ?

在自定义数据集上训练YOLOv5 涉及几个关键步骤:

  1. 准备数据集:收集图像并添加注释。确保注释符合要求 YOLO 格式.将图像和标签整理成 train/val/ (并可选择 test/)目录。考虑使用以下模型 Google 双子座, SAM2YOLOWorld 以协助或自动完成贴标过程(见第 1.2 节)。
  2. 设置环境:克隆YOLOv5 软件源并使用以下命令安装依赖项 pip install -r requirements.txt.
    git clone https://github.com/ultralytics/yolov5
    cd yolov5
    pip install -r requirements.txt
    
  3. 创建数据集配置:定义数据集路径、类数和类名。 dataset.yaml 锉刀
  4. 开始培训:执行 train.py 脚本,提供指向 dataset.yaml,所需的预训练权重(如 yolov5s.pt)、图像大小、批次大小和历时次数。
    python train.py --img 640 --batch 16 --epochs 100 --data path/to/your/dataset.yaml --weights 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开源义务,允许闭源发布。请访问我们的许可证页面,了解更多详情或申请企业许可证

选择最符合项目要求和分发模式的许可证。

📅创建于 1 年前 ✏️已更新 11 天前

评论