YOLOv5是一种非常流行的实时目标检测算法,其性能和易用性使得它成为许多开发者和研究人员的首选。本文将详细介绍如何使用YOLOv5训练自定义数据集,包括数据准备、标注方法以及模型训练的具体步骤。
在开始之前,确保你的开发环境已准备好。以下是推荐的环境配置:
运行以下命令克隆 YOLOv5 的官方仓库并安装依赖项:
# 克隆 YOLOv5 仓库
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
# 安装依赖
pip install -r requirements.txt
首先,需要收集一组图片作为训练数据集。这些图片应包含你希望检测的目标类别。例如,如果你要检测“猫”和“狗”,则需要收集包含猫和狗的图片。
YOLOv5 使用的是 YOLO 格式 的标注文件。每个标注文件对应一张图片,存储为 .txt
文件,位于同一目录下。
假设我们有两类目标:“猫”和“狗”,它们的类别索引分别为 0
和 1
。每行标注数据格式如下:
<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
images/train/
和 images/val/
:分别存放训练集和验证集的图片。labels/train/
和 labels/val/
:分别存放对应的标注文件。data.yaml
创建一个 data.yaml
文件,用于定义数据集的相关信息。示例内容如下:
train: ../dataset/images/train # 训练集路径
val: ../dataset/images/val # 验证集路径
nc: 2 # 类别数量
names: ['cat', 'dog'] # 类别名称
YOLOv5 提供了多种预训练权重文件,可以从 YOLOv5 Releases 页面下载。例如:
yolov5s.pt
:小型模型,适合快速测试。yolov5m.pt
:中型模型,精度更高但速度稍慢。将下载的权重文件放入 yolov5
目录下。
运行以下命令启动训练:
python train.py --img 640 --batch 16 --epochs 50 --data data.yaml --weights yolov5s.pt --cache
参数说明:
--img
:输入图片的尺寸(如 640x640)。--batch
:批量大小。--epochs
:训练轮数。--data
:数据集配置文件路径。--weights
:预训练权重文件路径。--cache
:缓存数据以加速训练。训练过程中,YOLOv5 会生成日志文件和 TensorBoard 可视化文件。你可以通过以下命令查看训练曲线:
tensorboard --logdir runs/train
训练完成后,YOLOv5 会自动对验证集进行评估,并生成 mAP(平均精度均值)等指标。
使用以下命令对单张图片进行推理:
python detect.py --source path/to/image.jpg --weights runs/train/exp/weights/best.pt --conf 0.4
参数说明:
--source
:输入图片或视频路径。--weights
:训练好的模型权重路径。--conf
:置信度阈值。Q:训练时出现 CUDA OOM 错误怎么办?
A:降低批量大小(--batch
参数),或者减少输入图片尺寸(--img
参数)。
Q:标注文件格式错误导致无法训练怎么办?
A:检查标注文件是否符合 YOLO 格式要求,特别是归一化值是否超出范围 [0, 1]
。
Q:如何调整超参数以优化模型性能?
A:可以通过修改 hyp.scratch.yaml
文件中的超参数(如学习率、正则化系数等)来优化模型。
本文详细介绍了如何使用 YOLOv5 训练自定义数据集,包括数据准备、标注方法、模型训练及推理的完整流程。希望这些内容能帮助你更好地理解和应用 YOLOv5。