YOLOv5作为当前工业界最受欢迎的实时目标检测框架之一,其训练过程涉及数据准备、模型配置、超参数调优等多个关键环节。本文将基于Ultralytics官方实现,详细拆解从零开始训练自定义数据集的完整流程,包含数据标注规范、模型结构选择、训练技巧等实战经验。
提示:本文基于YOLOv5 v7.0版本,所有代码示例均经过实际验证
数据集组织应采用YOLO标准格式:
code复制dataset/
├── images/
│ ├── train/
│ └── val/
└── labels/
├── train/
└── val/
标注文件为.txt格式,每行表示一个目标:
code复制<class_id> <x_center> <y_center> <width> <height>
实测建议:
YOLOv5提供不同规模的预训练模型:
| 模型类型 | 参数量 | 输入尺寸 | 适用场景 |
|---|---|---|---|
| YOLOv5n | 1.9M | 640 | 移动端 |
| YOLOv5s | 7.2M | 640 | 平衡型 |
| YOLOv5m | 21.2M | 640 | 服务器 |
| YOLOv5l | 46.5M | 640 | 高精度 |
选择建议:
yaml复制# data.yaml 示例
train: ../dataset/images/train
val: ../dataset/images/val
nc: 3 # 类别数
names: ['person', 'car', 'dog'] # 类别名称
训练命令核心参数:
bash复制python train.py \
--weights yolov5s.pt \
--data data.yaml \
--epochs 300 \
--batch-size 16 \
--img 640 \
--device 0 # 使用GPU 0
采用余弦退火策略时:
注意:batch_size变化时需同步调整学习率
关键训练日志指标:
修改train.py添加:
python复制early_stop = EarlyStopping(
patience=50,
min_delta=0.001,
verbose=True
)
bash复制python val.py \
--weights runs/train/exp/weights/best.pt \
--data data.yaml \
--task test
常用导出格式:
导出示例:
bash复制python export.py \
--weights best.pt \
--include onnx \
--dynamic
数据增强建议:
显存不足解决方案:
常见报错处理:
训练完成后建议使用--evolve参数进行超参数进化,通常可获得2-3%的mAP提升。对于部署环境,建议测试TensorRT加速效果,实测在3090上YOLOv5s可达1.2ms/帧。