Skip to content

自定义数据训练

📚 本指南解释了如何使用YOLOv5 🚀 训练您自己的自定义数据集

开始之前

克隆仓库并在Python>=3.8.0环境中安装requirements.txt,包括PyTorch>=1.8模型数据集会自动从最新的YOLOv5发布版本下载。

git clone https://github.com/ultralytics/yolov5  # 克隆
cd yolov5
pip install -r requirements.txt  # 安装

在自定义数据上训练

Ultralytics active learning

创建一个自定义模型来检测您的对象是一个迭代过程,包括收集和组织图像、标注您感兴趣的对象、训练模型、将其部署到实际环境中进行预测,然后使用该部署的模型收集边缘案例的示例以重复和改进。

许可

Ultralytics 提供两种许可选项:

更多详情请参见Ultralytics 许可

YOLOv5 模型必须在标注数据上进行训练,以便学习该数据中的对象类别。在开始训练之前,您有两种创建数据集的选项:

选项1:创建一个Roboflow数据集

1.1 收集图像

您的模型将通过示例进行学习。在训练中使用与实际环境中将看到的图像相似的图像至关重要。理想情况下,您将从与最终部署项目相同的配置(相机、角度、光照等)中收集各种图像。

如果这不可行,您可以从公共数据集开始训练初始模型,然后在推理过程中从实际环境中采样图像以迭代改进您的数据集和模型。

1.2 创建标签

一旦您收集了图像,您需要标注感兴趣的对象,以为您的模型创建学习的基础事实。

YOLOv5 accuracies

Roboflow Annotate 是一个简单的基于网络的工具,用于与团队管理和标注您的图像,并以YOLOv5的标注格式导出它们。

1.3 为YOLOv5准备数据集

无论您是否使用Roboflow标注图像,您都可以使用它将您的数据集转换为YOLO格式,创建YOLOv5 YAML配置文件,并将其托管以便导入到您的训练脚本中。

创建一个免费的Roboflow账户并将您的数据集上传到一个Public工作区,标注任何未标注的图像,然后生成并导出一个YOLOv5 Pytorch格式的数据集版本。

注意:YOLOv5在训练期间进行在线增强,因此我们不建议在Roboflow中为YOLOv5训练应用任何增强步骤。但我们建议应用以下预处理步骤:

推荐的预处理步骤

  • 自动方向 - 去除图像中的EXIF方向。
  • 调整大小(拉伸) - 调整到模型输入的方形尺寸(640x640是YOLOv5的默认值)。 生成一个版本将为您提供数据集的快照,因此您可以随时返回并将其与未来的模型训练运行进行比较,即使您之后添加了更多图像或更改了其配置。

Export in YOLOv5 Format

YOLOv5 Pytorch 格式导出,然后将代码片段复制到您的训练脚本或笔记本中以下载您的数据集。

Roboflow dataset download snippet

选项 2:创建手动数据集

2.1 创建 dataset.yaml

COCO128 是一个小型教程数据集示例,由 COCO train2017 中的前 128 张图像组成。这些相同的 128 张图像用于训练和验证,以验证我们的训练管道能够过拟合data/coco128.yaml 如下所示,是数据集配置文件,定义了 1) 数据集根目录 pathtrain / val / test 图像目录(或包含图像路径的 *.txt 文件)的相对路径,以及 2) 一个类 names 字典:

# 训练/验证/测试集,可以是 1) 目录: path/to/imgs, 2) 文件: path/to/imgs.txt, 或 3) 列表: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco128 # 数据集根目录
train: images/train2017 # 训练图像(相对于 'path') 128 张图像
val: images/train2017 # 验证图像(相对于 'path') 128 张图像
test: # 测试图像(可选)

# 类别(80 个 COCO 类别)
names:
    0: person
    1: bicycle
    2: car
    # ...
    77: teddy bear
    78: hair drier
    79: toothbrush

2.2 创建标签

在使用标注工具标注图像后,将标签导出为 YOLO 格式,每张图像对应一个 *.txt 文件(如果图像中没有对象,则不需要 *.txt 文件)。*.txt 文件的规范如下:

  • 每行一个对象
  • 每行格式为 class x_center y_center width height
  • 边界框坐标必须为 归一化的 xywh 格式(从 0 到 1)。如果您的边界框以像素为单位,请将 x_centerwidth 除以图像宽度,将 y_centerheight 除以图像高度。
  • 类别编号从零开始(从 0 开始)。

Roboflow annotations

与上图对应的标签文件包含 2 个人(类别 0)和 1 条领带(类别 27):

Roboflow dataset preprocessing

2.3 组织目录

根据以下示例组织您的训练和验证图像及标签。YOLOv5 假设 /coco128 位于 /datasets 目录中,紧邻 /yolov5 目录。YOLOv5 通过将每个图像路径中的最后一个 /images/ 替换为 /labels/ 来自动定位标签。例如:

../datasets/coco128/images/im0.jpg  # 图像
../datasets/coco128/labels/im0.txt  # 标签

YOLOv5 dataset structure

3. 选择模型

选择一个预训练模型开始训练。这里我们选择 YOLOv5s,这是可用的第二小且最快的模型。请参阅我们的 README 表格 以获取所有模型的完整比较。

YOLOv5 models

4. 训练

通过指定数据集、批量大小、图像大小以及预训练的 --weights yolov5s.pt(推荐)或随机初始化的 --weights '' --cfg yolov5s.yaml(不推荐),在 COCO128 上训练 YOLOv5s 模型。预训练权重会自动从 最新 YOLOv5 版本 下载。

python train.py --img 640 --epochs 3 --data coco128.yaml --weights yolov5s.pt

Tip

💡 添加 --cache ram--cache disk 以加快训练速度(需要大量 RAM/磁盘资源)。

Tip

💡 始终从本地数据集进行训练。挂载或网络驱动器(如 Google Drive)会非常慢。

所有训练结果都保存到 runs/train/ 目录下,并按递增的运行目录命名,例如 runs/train/exp2runs/train/exp3 等。更多详情请参阅我们的教程笔记本中的训练部分。在 Colab 中打开 在 Kaggle 中打开

5. 可视化

Comet 日志记录和可视化 🌟 新功能

Comet 现已完全集成到 YOLOv5 中。实时跟踪和可视化模型指标,保存您的超参数、数据集和模型检查点,并使用 Comet 自定义面板 可视化您的模型预测!Comet 确保您不会丢失工作进度,并使跨团队共享结果和协作变得容易!

开始使用非常简单:

pip install comet_ml  # 1. 安装
export COMET_API_KEY=<您的 API 密钥>  # 2. 粘贴 API 密钥
python train.py --img 640 --epochs 3 --data coco128.yaml --weights yolov5s.pt  # 3. 训练

要了解更多关于此集成支持的所有 Comet 功能,请查看 Comet 教程。如果您想了解更多关于 Comet 的信息,请访问我们的 文档。通过尝试 Comet Colab 笔记本开始:在 Colab 中打开

YOLO UI

ClearML 日志记录和自动化 🌟 新功能

ClearML 完全集成到 YOLOv5 中,用于跟踪您的实验、管理数据集版本,甚至远程执行训练运行。要启用 ClearML:

  • pip install clearml
  • 运行 clearml-init 以连接到 ClearML 服务器

您将获得实验管理器所期望的所有出色功能:实时更新、模型上传、实验比较等,但 ClearML 还会跟踪未提交的更改和已安装的包。因此,ClearML 任务(我们称之为实验)也可以在不同机器上重现!只需一行额外的代码,我们就可以将 YOLOv5 训练任务安排到一个队列中,由任意数量的 ClearML 代理(工作器)执行。

您可以使用 ClearML Data 对您的数据集进行版本控制,然后只需使用其唯一 ID 将其传递给 YOLOv5。这将帮助您跟踪数据,而不会增加额外的麻烦。探索 ClearML 教程 以获取详细信息!

ClearML 实验管理 UI

本地日志记录

训练结果会自动通过 TensorboardCSV 记录器记录到 runs/train 目录中,每次新训练都会创建一个新的实验目录,例如 runs/train/exp2runs/train/exp3 等。

此目录包含训练和验证统计数据、马赛克图像、标签、预测和增强的马赛克图像,以及包括 精确度-召回率(PR)曲线和混淆矩阵在内的指标和图表。

本地日志记录结果

结果文件 results.csv 在每个 epoch 后更新,并在训练完成后绘制为 results.png(如下)。您也可以手动绘制任何 results.csv 文件:

from utils.plots import plot_results

plot_results("path/to/results.csv")  # 将 'results.csv' 绘制为 'results.png'

results.png

下一步

一旦您的模型训练完成,您可以使用最佳检查点 best.pt 进行以下操作:

  • 对新图像和视频运行 CLIPython 推理
  • 在训练、验证和测试分割上验证 准确性
  • 导出TensorFlow、Keras、ONNX、TFlite、TF.js、CoreML 和 TensorRT 格式
  • 进化 超参数以提高性能
  • 改进 你的模型,通过采样真实世界的图像并将其添加到你的数据集中

支持的环境

Ultralytics 提供了一系列开箱即用的环境,每个环境都预装了必要的依赖项,如 CUDACUDNNPythonPyTorch,以启动你的项目。

项目状态

YOLOv5 CI

此徽章表示所有 YOLOv5 GitHub Actions 持续集成 (CI) 测试均成功通过。这些 CI 测试严格检查 YOLOv5 在各个关键方面的功能和性能:训练验证推理导出基准测试。它们确保在 macOS、Windows 和 Ubuntu 上的一致和可靠操作,测试每 24 小时进行一次,并在每次新提交时进行。

常见问题

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

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

  1. 准备你的数据集:收集并标记图像。使用 Roboflow 等工具组织数据并导出为 YOLOv5 格式
  2. 设置环境:克隆 YOLOv5 仓库并安装依赖项:
    git clone https://github.com/ultralytics/yolov5
    cd yolov5
    pip install -r requirements.txt
    
  3. 创建数据集配置:编写一个 dataset.yaml 文件,定义训练/验证路径和类名。
  4. 训练模型
    python train.py --img 640 --epochs 3 --data dataset.yaml --weights yolov5s.pt
    

我可以使用哪些工具来标注我的 YOLOv5 数据集?

你可以使用 Roboflow Annotate,这是一个直观的基于网络的图像标注工具。它支持团队协作,并导出为 YOLOv5 格式。收集图像后,使用 Roboflow 高效地创建和管理标注。其他选项包括 LabelImg 和 CVAT 等本地标注工具。

为什么我应该使用 Ultralytics HUB 来训练我的 YOLO 模型?

Ultralytics HUB 提供了一个端到端的平台,用于训练、部署和管理 YOLO 模型,无需广泛的编码技能。使用 Ultralytics HUB 的好处包括:

  • 简单的模型训练:通过预配置的环境简化训练过程。
  • 数据管理:轻松管理数据集和版本控制。
  • 实时监控:集成 Comet 等工具,用于实时指标跟踪和可视化。
  • 协作:非常适合团队项目,共享资源和易于管理。

如何将我的标注数据转换为 YOLOv5 格式?

使用 Roboflow 将标注数据转换为 YOLOv5 格式:

  1. 上传你的数据集到 Roboflow 工作区。
  2. 标注图像(如果尚未标注)。
  3. 生成并导出数据集为 YOLOv5 Pytorch 格式。确保应用预处理步骤,如自动方向和调整大小(拉伸)到方形输入尺寸(例如 640x640)。
  4. 下载数据集并将其集成到你的 YOLOv5 训练脚本中。

在商业应用中使用 YOLOv5 的许可选项有哪些?

Ultralytics 提供两种许可选项: - AGPL-3.0 许可证: 适用于非商业用途的开源许可证,非常适合学生和爱好者。 - 企业许可证: 专为希望将 YOLOv5 集成到商业产品和服务的公司定制。有关详细信息,请访问我们的许可证页面

更多详情,请参阅我们的Ultralytics 许可证指南


📅 Created 11 months ago ✏️ Updated 9 days ago

Comments