Meet YOLO26: next-gen vision AI.

Link to this section在自定义数据上训练 YOLOv5#

📚 本指南介绍了如何使用 YOLOv5 模型来训练你自己的 自定义数据集 🚀。训练自定义模型是将 计算机视觉 解决方案应用于特定现实世界任务(超出通用 目标检测 范畴)的基本步骤。

Link to this section开始之前#

首先,确保你已搭建好必要的环境。克隆 YOLOv5 仓库并从 requirements.txt 安装所需的依赖项。一个 Python>=3.8.0 环境和 PyTorch>=1.8 是必不可少的。如果本地找不到模型和数据集,它们会自动从最新的 YOLOv5 发布版本 中下载。

git clone https://github.com/ultralytics/yolov5 # Clone the repository
cd yolov5
pip install -r requirements.txt # Install dependencies

Link to this section在自定义数据上进行训练#

Ultralytics 主动学习循环图

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

  1. 收集并整理图像:收集与你特定任务相关的图像。高质量、多样化的数据至关重要。请参阅我们关于 数据收集与标注 的指南。
  2. 标注对象:准确标注你图像中感兴趣的对象。
  3. 训练模型:使用标注好的数据 训练 你的 YOLOv5 模型。通过预训练权重利用 迁移学习
  4. 部署与预测:利用训练好的模型对新的、未见过的数据进行 推理
  5. 收集边缘案例:识别模型表现不佳的场景(边缘案例),并将类似数据添加到你的数据集中以提高鲁棒性。重复此循环。

Ultralytics Platform 为整个 机器学习运维 (MLOps) 周期提供了一个简化的零代码解决方案,包括数据集管理、模型训练和部署。

许可

Ultralytics 提供两种许可选项,以适应不同的使用场景:

  • AGPL-3.0 许可证:这种 经 OSI 批准 的开源许可证非常适合热衷于开放协作和知识共享的学生、研究人员和爱好者。它要求衍生作品必须在相同的许可证下共享。有关详细信息,请参阅 LICENSE 文件。
  • 企业许可证:针对开发和生产用途,此许可证支持将 Ultralytics 软件和 AI 模型无缝集成到商业产品和服务中,包括内部工具、自动化工作流和生产部署,从而绕过 AGPL-3.0 的开源要求。如需开始使用,请通过 Ultralytics Licensing 联系我们。

Ultralytics Licensing 页面上进一步探索我们的许可选项。

开始训练之前,数据集的准备工作至关重要。

Link to this section创建数据集#

YOLOv5 模型需要标注数据来学习对象类的视觉特征。正确组织你的数据集是关键。

Link to this section1.1 创建 dataset.yaml#

数据集配置文件(例如 coco128.yaml)概述了数据集的结构、类名以及图像目录的路径。COCO128 作为一个小型示例数据集,包含了庞大的 COCO 数据集中的前 128 张图像。它有助于快速测试训练流程并诊断潜在问题,例如 过拟合

dataset.yaml 文件结构包括:

  • path:包含数据集的根目录。
  • train, val, test:从 path 到包含图像或列出训练、验证和测试集图像路径的文本文件的目录的相对路径。
  • names:将类索引(从 0 开始)映射到其对应类名的字典。

当你从 YOLOv5 仓库根目录启动训练时,你可以将 path 设置为绝对目录(例如 /home/user/datasets/coco128)或相对路径(如 ../datasets/coco128)。

以下是 coco128.yaml 的结构(在 GitHub 上查看):

# Dataset root directory relative to the yolov5 directory
path: 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

Link to this section1.2 利用模型进行自动化标注#

手动标注是常见的方法,但非常耗时。基础模型可以实现标注的自动化或半自动化,并加速数据集的创建。可以帮助生成标签的模型示例:

  • Google Gemini:像 Gemini 这样的大型多模态模型拥有强大的图像理解能力。可以通过提示词让它们识别并定位图像中的对象,生成可以转换为 YOLO 格式标签的边界框或描述。请在提供的教程笔记本中探索其潜力。
  • SAM2 (Segment Anything Model 2):专注于分割的基础模型,如 SAM2,可以高精度地识别和描绘对象。虽然主要用于分割,但得到的掩码通常可以转换为适用于目标检测任务的边界框标注。
  • YOLOWorld:此模型提供开放词汇检测能力。你可以提供你感兴趣对象的文本描述,YOLOWorld 可以在 无需 针对这些特定类别进行训练的情况下在图像中定位它们。这可以用作生成初始标签的起点,然后进行精炼。

使用这些模型可以提供“预标注”步骤,减少所需的手动工作。然而,审查和精炼自动生成的标签以确保准确性和一致性至关重要,因为质量直接影响你训练的 YOLOv5 模型的性能。生成(并可能精炼)标签后,请确保它们遵循 YOLO 格式:每个图像对应一个 *.txt 文件,每行表示一个对象,格式为 class_index x_center y_center width height(归一化坐标,索引从 0 开始)。如果图像中没有感兴趣的对象,则不需要对应的 *.txt 文件。

YOLO 格式 *.txt 文件的规范非常精确:

  • 每个对象一行 边界框
  • 每一行必须包含:class_index x_center y_center width height
  • 坐标必须 归一化 到 0 到 1 之间。为此,请将 x_centerwidth 的像素值除以图像的总宽度,并将 y_centerheight 除以图像的总高度。
  • 类索引从 0 开始计数(即第一类由 0 表示,第二类由 1 表示,依此类推)。

Example image with two persons and a tie annotated

上图对应的标签文件,包含两个“person”对象(类索引 0)和一个“tie”对象(类索引 27),看起来会是这样:

YOLO format label file content example

Link to this section1.3 组织目录#

Structure your datasets directory as illustrated below. By default, YOLOv5 anticipates the dataset directory (e.g., /coco128) to reside within a /datasets folder located adjacent to the /yolov5 repository directory.

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 recommended dataset directory structure

Link to this section选择模型#

选择一个 预训练模型 来启动训练过程。从预训练权重开始可以显著加速学习并比从头开始训练提高性能。YOLOv5 提供各种模型大小,每种都在速度和准确性之间进行权衡。例如,YOLOv5s 是倒数第二小且最快的模型,适用于资源受限的环境。请查阅 README 表格 以获取所有可用 模型 的详细比较。

Comparison chart of YOLOv5 models showing size, speed, and accuracy

Link to this section训练#

Begin the model training using the train.py script. Essential arguments include:

  • --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 分别将数据集图像缓存到 RAM 或本地磁盘中。这将极大地加速训练,特别是在数据集 I/O(输入/输出)操作成为瓶颈时。请注意,这需要大量的 RAM 或磁盘空间。

本地数据存储

💡 始终使用本地存储的数据集进行训练。从网络驱动器(如 Google Drive)或远程存储访问数据可能会显著减慢速度并阻碍训练性能。将数据集复制到本地 SSD 通常是最佳实践。

所有训练输出,包括权重和日志,都保存在 runs/train/ 目录中。每个训练会话都会创建一个新的子目录(例如 runs/train/exp, runs/train/exp2 等)。如需互动式的亲身体验,请浏览我们官方教程笔记本中的训练部分: Open In Colab Open In Kaggle

Link to this section可视化#

YOLOv5 与各种工具无缝集成,用于可视化训练进度、评估结果以及实时监控性能。

Link to this sectionComet 日志记录与可视化#

Comet 已完全集成,用于全面的实验追踪。实时可视化指标、保存超参数、管理数据集和模型检查点,并使用互动式 Comet Custom Panels 分析模型预测。

入门非常简单:

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 进行实时演示: Open In Colab

Comet UI showing YOLOv5 training metrics and visualizations

Link to this sectionClearML 日志记录与自动化#

ClearML 集成实现了详细的实验追踪、数据集版本管理,甚至远程执行训练运行。通过以下简单步骤激活 ClearML:

  • 安装包:pip install clearml
  • 初始化 ClearML:运行一次 clearml-init 以连接到你的 ClearML 服务器(无论是自托管还是 free tier)。

ClearML 会自动捕获实验详情、模型上传、对比、未提交的代码更改和已安装的包,确保完全的可复现性。你可以轻松在远程代理上安排训练任务,并使用 ClearML Data 管理数据集版本。探索 ClearML 集成指南 以获取全面细节。

ClearML experiment management UI for YOLOv5

Link to this section本地日志记录#

训练结果会自动使用 TensorBoard 进行记录,并作为 CSV 文件保存在特定实验目录(例如 runs/train/exp)中。记录的数据包括:

  • 训练和验证损失以及性能指标。
  • 显示应用增强(如马赛克增强)的示例图像。
  • 用于视觉检查的真实标签与模型预测。
  • 关键评估指标,例如 Precision-Recall (PR) 曲线。
  • 用于详细类级性能分析的 混淆矩阵
YOLOv5 local logging results with charts and mosaics

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

YOLOv5 results.png training metrics plot

Link to this section后续步骤#

训练成功完成后,性能最佳的模型检查点 (best.pt) 将被保存,随时可供部署或进一步精炼。潜在的后续步骤包括:

  • Run inference on new images or videos using the trained model via the CLI or Python.
  • 执行 验证 以评估模型在不同数据分割(例如保留的测试集)上的 准确性 和泛化能力。
  • 导出 模型到各种部署格式,如 ONNXTensorFlow SavedModelTensorRT,以便在多样化平台上进行优化推理。
  • 采用 超参数调优 技术,以潜在地获取额外的性能提升。
  • 通过遵循我们的 最佳训练结果技巧 并根据性能分析迭代地添加更多多样且具挑战性的数据,继续改进你的模型。

Link to this section支持的环境#

Ultralytics 提供配备必要依赖项(如 CUDA, cuDNN, PythonPyTorch)的即用型环境,助你轻松上手。

Link to this section项目状态#

YOLOv5 持续集成状态徽章

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

Link to this section常见问题解答#

Link to this section我该如何在自定义数据集上训练 YOLOv5?#

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

  1. 准备你的数据集:收集图像并进行标注。确保标注符合所需的 YOLO 格式。将图像和标签整理到 train/val/(以及可选的 test/)目录中。考虑使用 Google GeminiSAM2YOLOWorld 等模型来辅助或自动化标注过程(参见第 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)、图像尺寸、批次大小和轮次 (epoch) 数量。
    python train.py --img 640 --batch 16 --epochs 100 --data path/to/your/dataset.yaml --weights yolov5s.pt

Link to this section为什么我应该使用 Ultralytics Platform 来训练我的 YOLO 模型?#

Ultralytics Platform 是一个全面的平台,旨在简化整个 YOLO 模型开发生命周期,通常无需编写任何代码。主要优势包括:

  • 简化训练:使用预配置的环境和直观的用户界面轻松训练模型。
  • 集成数据管理:在平台内高效上传、版本控制和管理你的数据集。
  • 实时监控:使用 Comet 或 TensorBoard 等集成工具跟踪训练进度并可视化性能指标。
  • 协作功能:通过共享资源、项目管理工具和轻松的模型共享促进团队合作。
  • 无代码部署:将训练好的模型直接部署到各种目标设备。

如需实践指南,请查看我们的博客文章:如何使用 Ultralytics Platform 训练你的自定义模型

Link to this section我该如何将已标注的数据转换为 YOLOv5 格式?#

无论你是手动标注还是使用自动化工具(如第 1.2 节中提到的那些),最终的标签必须采用 YOLOv5 所需的特定 YOLO 格式

  • Create one .txt file for each image. The filename should match the image filename (e.g., image1.jpg corresponds to image1.txt). Place these files in a labels/ directory parallel to your images/ directory (e.g., ../datasets/mydataset/labels/train/).
  • .txt 文件中的每一行代表一个对象标注,并遵循以下格式:class_index center_x center_y width height
  • 坐标(center_xcenter_ywidthheight)必须相对于图像尺寸进行归一化处理(值在 0.0 到 1.0 之间)。
  • 类别索引是从零开始的(第一个类别为 0,第二个为 1,依此类推)。

许多手动标注工具提供直接导出为 YOLO 格式的功能。如果使用自动化模型,你需要脚本或流程将它们的输出(例如边界框坐标、分割掩码)转换为这种特定的归一化文本格式。确保你的最终数据集结构遵循指南中提供的示例。有关更多详细信息,请参阅我们的 数据收集与标注指南

Link to this section在商业应用中使用 YOLOv5 有哪些许可选项?#

Ultralytics 提供针对不同需求量身定制的灵活许可方案:

  • AGPL-3.0 许可证:此开源许可证适用于学术研究、个人项目以及可接受开源合规性的情况。它要求修改版本和衍生作品也必须在 AGPL-3.0 下开源。请查看 AGPL-3.0 许可证详情
  • 企业许可证:专为将 YOLOv5 集成到专有产品或服务中的企业设计的商业许可证。此许可证消除了 AGPL-3.0 的开源义务,允许闭源分发。请访问我们的 许可页面 以获取更多详细信息或申请 企业许可证

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

评论