YOLOv5训练自定义数据集超详细教程(含标注方法)

2025-06发布1次浏览

YOLOv5是一种非常流行的实时目标检测算法,其性能和易用性使得它成为许多开发者和研究人员的首选。本文将详细介绍如何使用YOLOv5训练自定义数据集,包括数据准备、标注方法以及模型训练的具体步骤。


一、环境准备

在开始之前,确保你的开发环境已准备好。以下是推荐的环境配置:

  1. 操作系统:Windows、Linux 或 macOS。
  2. Python 版本:建议使用 Python 3.8 或更高版本。
  3. CUDA 和 cuDNN(如果使用 GPU 加速):确保安装了与 NVIDIA 驱动程序兼容的 CUDA 和 cuDNN。

安装 YOLOv5

运行以下命令克隆 YOLOv5 的官方仓库并安装依赖项:

# 克隆 YOLOv5 仓库
git clone https://github.com/ultralytics/yolov5.git
cd yolov5

# 安装依赖
pip install -r requirements.txt

二、数据准备

1. 数据收集

首先,需要收集一组图片作为训练数据集。这些图片应包含你希望检测的目标类别。例如,如果你要检测“猫”和“狗”,则需要收集包含猫和狗的图片。

2. 数据标注

YOLOv5 使用的是 YOLO 格式 的标注文件。每个标注文件对应一张图片,存储为 .txt 文件,位于同一目录下。

标注工具推荐
  • LabelImg:经典的标注工具,支持导出为 YOLO 格式。
  • CVAT:在线标注工具,支持团队协作。
  • VIA:轻量级标注工具,适合小规模项目。
标注格式说明

假设我们有两类目标:“猫”和“狗”,它们的类别索引分别为 01。每行标注数据格式如下:

<class_index> <x_center> <y_center> <width> <height>

其中:

  • <class_index>:目标类别的索引。
  • <x_center><y_center>:目标框中心点的归一化坐标(相对于图片宽度和高度)。
  • <width><height>:目标框宽度和高度的归一化值。

示例标注文件内容:

0 0.45 0.60 0.20 0.30
1 0.75 0.80 0.15 0.25

三、数据集组织结构

YOLOv5 要求数据集按照以下目录结构组织:

dataset/
├── images/
│   ├── train/
│   └── val/
├── labels/
│   ├── train/
│   └── val/
└── data.yaml

1. 图片和标注文件

  • images/train/images/val/:分别存放训练集和验证集的图片。
  • labels/train/labels/val/:分别存放对应的标注文件。

2. 配置文件 data.yaml

创建一个 data.yaml 文件,用于定义数据集的相关信息。示例内容如下:

train: ../dataset/images/train  # 训练集路径
val: ../dataset/images/val      # 验证集路径

nc: 2                           # 类别数量
names: ['cat', 'dog']          # 类别名称

四、模型训练

1. 下载预训练权重

YOLOv5 提供了多种预训练权重文件,可以从 YOLOv5 Releases 页面下载。例如:

  • yolov5s.pt:小型模型,适合快速测试。
  • yolov5m.pt:中型模型,精度更高但速度稍慢。

将下载的权重文件放入 yolov5 目录下。

2. 启动训练

运行以下命令启动训练:

python train.py --img 640 --batch 16 --epochs 50 --data data.yaml --weights yolov5s.pt --cache

参数说明:

  • --img:输入图片的尺寸(如 640x640)。
  • --batch:批量大小。
  • --epochs:训练轮数。
  • --data:数据集配置文件路径。
  • --weights:预训练权重文件路径。
  • --cache:缓存数据以加速训练。

3. 训练过程监控

训练过程中,YOLOv5 会生成日志文件和 TensorBoard 可视化文件。你可以通过以下命令查看训练曲线:

tensorboard --logdir runs/train

五、模型评估与推理

1. 模型评估

训练完成后,YOLOv5 会自动对验证集进行评估,并生成 mAP(平均精度均值)等指标。

2. 模型推理

使用以下命令对单张图片进行推理:

python detect.py --source path/to/image.jpg --weights runs/train/exp/weights/best.pt --conf 0.4

参数说明:

  • --source:输入图片或视频路径。
  • --weights:训练好的模型权重路径。
  • --conf:置信度阈值。

六、常见问题与解决方案

  1. Q:训练时出现 CUDA OOM 错误怎么办? A:降低批量大小(--batch 参数),或者减少输入图片尺寸(--img 参数)。

  2. Q:标注文件格式错误导致无法训练怎么办? A:检查标注文件是否符合 YOLO 格式要求,特别是归一化值是否超出范围 [0, 1]

  3. Q:如何调整超参数以优化模型性能? A:可以通过修改 hyp.scratch.yaml 文件中的超参数(如学习率、正则化系数等)来优化模型。


七、总结

本文详细介绍了如何使用 YOLOv5 训练自定义数据集,包括数据准备、标注方法、模型训练及推理的完整流程。希望这些内容能帮助你更好地理解和应用 YOLOv5。