简介:本文详细介绍了Yolov5自定义图片训练、测试及模型调优的全过程,涵盖数据准备、模型训练、测试评估和优化策略,适合开发者及企业用户实践参考。
本文系统阐述了基于Yolov5框架的自定义图片训练、测试及模型调优的完整流程。从数据集准备、标注规范、模型配置到训练策略优化,结合代码示例和实操建议,帮助开发者高效完成目标检测模型的定制化开发。内容涵盖数据增强、超参数调优、模型评估等关键环节,适用于工业检测、安防监控等场景的落地实践。
Yolov5采用VOC或COCO格式的数据集结构,推荐使用以下目录组织方式:
custom_dataset/├── images/│ ├── train/ # 训练集图片│ ├── val/ # 验证集图片│ └── test/ # 测试集图片(可选)└── labels/├── train/ # 训练集标注└── val/ # 验证集标注
推荐使用以下标注工具生成Yolo格式标注文件:
Yolo格式标注文件为.txt格式,每行格式为:
<class_id> <x_center> <y_center> <width> <height>
所有坐标值需归一化到[0,1]区间。
在data.yaml中配置数据增强参数,推荐组合:
train: ../custom_dataset/images/trainval: ../custom_dataset/images/valnc: 5 # 类别数names: ['class1', 'class2', 'class3', 'class4', 'class5']# 数据增强配置augment: Truemosaic: 0.8 # Mosaic增强概率hsv_h: 0.015 # HSV色彩空间增强hsv_s: 0.7 # 饱和度增强hsv_v: 0.4 # 亮度增强flipud: 0.3 # 垂直翻转fliplr: 0.5 # 水平翻转
conda create -n yolov5 python=3.8conda activate yolov5pip install torch torchvision torchaudiopip install -r requirements.txt
根据任务需求选择预训练模型:
| 模型 | 参数量 | 速度(FPS) | 适用场景 |
|——————|————|—————-|————————————|
| Yolov5s | 7.3M | 140 | 嵌入式设备/实时检测 |
| Yolov5m | 21.2M | 80 | 通用目标检测 |
| Yolov5l | 46.5M | 60 | 高精度需求场景 |
| Yolov5x | 86.7M | 40 | 复杂背景/小目标检测 |
python train.py --img 640 --batch 16 --epochs 100 \--data custom.yaml --weights yolov5s.pt \--name custom_model --cache
关键参数说明:
--img:输入图像尺寸(建议640或1280)--batch:批处理大小(根据GPU内存调整)--epochs:训练轮次(通常50-300轮)--weights:预训练模型路径--cache:加速数据加载
python val.py --data custom.yaml --weights runs/train/exp/weights/best.pt \--img 640 --task val --half
使用plots.py生成评估报告:
python utils/plots.py --results runs/val/exp --task metrics
生成内容包含:
学习率调整:
--lr0参数设置,配合--lrf设置学习率衰减系数锚框优化:
from utils.general import kmean_anchorsanchors = kmean_anchors(path='custom_dataset/labels/train/', n=9, img_size=640)
将生成的锚框写入data.yaml或模型配置文件
损失函数权重调整:
在models/yolov5s.yaml中修改:
loss:obj: 1.0 # 目标存在损失权重cls: 0.5 # 分类损失权重box: 0.5 # 边界框回归损失权重
通道剪枝:
python prune.py --weights yolov5s.pt --img 640 --percent 0.3
--percent参数控制剪枝比例(建议0.2-0.5)
知识蒸馏:
# 在train.py中添加教师模型指导teacher_model = torch.load('teacher.pt')['model'].float().eval()criterion = KnowledgeDistillationLoss(teacher_model)
量化技术:
python export.py --weights yolov5s.pt --include torchscript --int8
过拟合问题:
models/yolov5s.yaml中修改)--patience 20)小目标检测差:
--img 1280)类别不平衡:
data.yaml中设置类别权重:
class_weights: [1.0, 2.0, 1.5, 0.8, 1.2]
python export.py --weights yolov5s.pt --include onnx coreml tflite
支持格式:
TensorRT加速:
trtexec --onnx=yolov5s.onnx --saveEngine=yolov5s.engine --fp16
可获得3-5倍加速
动态输入处理:
在导出时添加--dynamic参数支持可变输入尺寸
多线程优化:
model = torch.jit.load('yolov5s.pt')model.to('cuda')batch_size = 16data = torch.randn(batch_size, 3, 640, 640).to('cuda')with torch.no_grad():for _ in range(100):_ = model(data)
训练配置:
# custom_industrial.yamltrain: ../industrial_dataset/images/trainval: ../industrial_dataset/images/valnc: 3names: ['scratch', 'hole', 'crack']augment:mosaic: 0.7hsv_h: 0.02flipud: 0.4
论文研读:
开源项目:
工具链:
通过本文介绍的完整流程,开发者可以系统掌握Yolov5自定义训练的核心技术,从数据准备到模型部署形成完整闭环。实际项目中建议采用渐进式优化策略:先保证基础模型收敛,再逐步调整超参数,最后进行模型压缩与加速。对于企业级应用,建议建立自动化训练流水线,结合持续集成(CI)系统实现模型版本管理。