logo

Yolov5自定义数据集全流程指南:从训练到调优

作者:渣渣辉2025.09.18 18:05浏览量:0

简介:本文详细阐述Yolov5在自定义图片数据集上的训练、测试及模型调优全流程,包含数据准备、环境配置、训练参数优化及性能评估方法,助力开发者高效构建高性能目标检测模型。

Yolov5自定义图片训练测试及模型调优(详细过程)

一、环境准备与数据集构建

1.1 环境配置要点

  • 硬件要求:推荐使用NVIDIA GPU(CUDA 11.x支持),内存≥16GB,存储空间≥50GB(含数据集与模型文件)
  • 软件依赖
    1. conda create -n yolov5 python=3.8
    2. conda activate yolov5
    3. pip install torch torchvision torchaudio # 根据CUDA版本选择对应版本
    4. git clone https://github.com/ultralytics/yolov5.git
    5. cd yolov5 && pip install -r requirements.txt
  • 版本兼容性:Yolov5 v6.0+需PyTorch 1.7+,建议使用最新稳定版(如v7.0)

1.2 自定义数据集规范

  • 目录结构
    1. dataset/
    2. ├── images/
    3. ├── train/ # 训练集图片(占比70%)
    4. ├── val/ # 验证集图片(占比20%)
    5. └── test/ # 测试集图片(占比10%)
    6. └── labels/
    7. ├── train/ # 训练集标注(YOLO格式)
    8. ├── val/
    9. └── test/
  • 标注文件格式:每行包含class x_center y_center width height(归一化至[0,1]),示例:
    1. 0 0.5 0.5 0.2 0.3 # 第0类,中心点(0.5,0.5),宽高占比20%/30%
  • 数据增强建议
    • 水平翻转(--hflip 0.5概率)
    • 马赛克增强(默认开启,--mosaic 1.0
    • 随机缩放(--scale 0.8,1.2

二、模型训练全流程

2.1 配置文件调整

  • 修改data/custom.yaml
    1. train: ../dataset/images/train
    2. val: ../dataset/images/val
    3. test: ../dataset/images/test
    4. nc: 3 # 类别数
    5. names: ['class1', 'class2', 'class3'] # 类别名称
  • 模型选择
    • 小目标检测:yolov5s.yaml(轻量级,FPN+PAN结构)
    • 多尺度检测:yolov5m.yaml(平衡速度与精度)
    • 高精度需求:yolov5l.yamlyolov5x.yaml(需更大显存)

2.2 训练命令与参数

  1. python train.py --img 640 --batch 16 --epochs 100 \
  2. --data custom.yaml --cfg yolov5s.yaml \
  3. --weights yolov5s.pt --name custom_model \
  4. --cache ram # 使用RAM加速数据加载
  • 关键参数说明
    • --img:输入分辨率(建议640/1280,大图需更多显存)
    • --batch:批次大小(根据GPU内存调整,如V100可用32)
    • --epochs:训练轮次(通常50-300轮,每轮约5分钟)
    • --optimizer:可选SGD(默认Adam)
    • --lr0:初始学习率(默认0.01,小数据集可降至0.001)

2.3 训练日志分析

  • 关键指标监控
    • box_loss:边界框回归损失(应<0.05)
    • obj_loss:目标置信度损失(应<0.1)
    • cls_loss:分类损失(多类别时关注)
    • mAP@0.5:IoU=0.5时的平均精度(核心指标)
  • 可视化工具
    1. tensorboard --logdir runs/train/custom_model
    或直接查看runs/train/custom_model/results.png

三、模型测试与评估

3.1 测试命令

  1. python val.py --data custom.yaml --weights runs/train/custom_model/weights/best.pt \
  2. --img 640 --batch 16 --conf 0.001 --iou 0.65
  • 参数解释
    • --conf:置信度阈值(默认0.001,可调至0.5过滤低置信度检测)
    • --iou:NMS的IoU阈值(默认0.45,密集场景可增至0.6)

3.2 评估指标解读

  • mAP@0.5:0.95:IoU从0.5到0.95的平均精度(更严格)
  • F1-score:精确率与召回率的调和平均(平衡检测质量)
  • 速度指标
    • FPS:每秒帧数(V100上YOLOv5s可达140FPS)
    • Inference time:单图推理时间(<10ms为佳)

四、模型调优策略

4.1 超参数优化

  • 学习率调整
    1. # 在train.py中修改优化器参数
    2. optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.937, weight_decay=0.0005)
    或使用学习率调度器:
    1. scheduler = torch.optim.lr_scheduler.OneCycleLR(optimizer, max_lr=0.01, steps_per_epoch=len(dataloader), epochs=100)
  • 批次归一化
    • 增加--sync-bn参数(多GPU训练时启用同步BN)
    • 调整--batch-size--img的组合(如1280分辨率时batch减至8)

4.2 结构优化技巧

  • 特征金字塔调整
    • 修改yolov5s.yaml中的depth_multiplewidth_multiple(默认0.33/0.5)
    • 示例:加深网络depth_multiple=0.5)但保持宽度不变
  • 注意力机制集成
    • models/yolo.py中添加SE模块:
      1. class SEBlock(nn.Module):
      2. def __init__(self, channel, reduction=16):
      3. super().__init__()
      4. self.avg_pool = nn.AdaptiveAvgPool2d(1)
      5. self.fc = nn.Sequential(
      6. nn.Linear(channel, channel // reduction),
      7. nn.ReLU(inplace=True),
      8. nn.Linear(channel // reduction, channel),
      9. nn.Sigmoid()
      10. )
      11. def forward(self, x):
      12. b, c, _, _ = x.size()
      13. y = self.avg_pool(x).view(b, c)
      14. y = self.fc(y).view(b, c, 1, 1)
      15. return x * y.expand_as(x)

4.3 训练技巧

  • 预热训练
    1. # 在train.py中添加预热阶段
    2. warmup_epochs = 3
    3. if epoch < warmup_epochs:
    4. lr = 0.01 * (epoch / warmup_epochs)
    5. for param_group in optimizer.param_groups:
    6. param_group['lr'] = lr
  • 类别不平衡处理
    • 修改损失函数权重(data/custom.yaml中添加weights: [1.0, 2.0, 0.5]
    • 使用过采样/欠采样策略

五、部署与优化

5.1 模型导出

  1. python export.py --weights runs/train/custom_model/weights/best.pt \
  2. --include torchscript onnx engine # 支持多格式导出
  • 格式选择
    • torchscript:PyTorch原生部署
    • onnx:跨平台兼容(推荐TensorRT加速)
    • engine:NVIDIA TensorRT优化模型

5.2 性能优化案例

  • TensorRT加速
    1. trtexec --onnx=best.onnx --saveEngine=best.engine --fp16 # FP16量化
    • 速度提升:YOLOv5s从140FPS→320FPS(T4 GPU)
    • 精度损失:<1% mAP下降
  • 量化感知训练
    1. # 在train.py中启用量化模拟
    2. model.qconfig = torch.quantization.get_default_qat_qconfig('fbgemm')
    3. torch.quantization.prepare_qat(model, inplace=True)

六、常见问题解决方案

  1. 训练不收敛

    • 检查数据标注质量(使用utils/label_checker.py
    • 降低初始学习率至0.0001
    • 增加训练轮次至200轮
  2. 显存不足

    • 减小--batch-size(如从16→8)
    • 降低--img分辨率(如从640→416)
    • 启用梯度累积(修改训练循环)
  3. 过拟合处理

    • 增加数据增强强度(--augment true
    • 添加Dropout层(在models/yolo.py中修改)
    • 使用早停机制(监控验证集mAP)

本指南系统覆盖了Yolov5自定义训练的全生命周期,从环境搭建到模型部署均提供了可复现的解决方案。实际项目中,建议采用渐进式优化策略:先确保基础训练流程正确,再逐步调整超参数和网络结构,最后通过量化/剪枝实现部署优化。对于工业级应用,需特别注意数据质量管控和模型鲁棒性测试。

相关文章推荐

发表评论