YOLOv5学习文档

YOLOv5学习文档

目录

  1. 简介
  2. 训练与部署全流程
  3. 超参数调优
  4. 模型优化技术汇总
  5. 工业场景中的常用优化实践
  6. 边缘设备部署流程与常见问题

简介

YOLOv5 是一款流行的、轻量且高效的目标检测框架。本指南系统梳理从训练、部署到各类优化技术及行业常用做法,帮助开发者快速上手并在生产环境中落地。


训练与部署全流程

1. 环境与数据准备

  • 克隆仓库 & 安装依赖
    git clone https://github.com/ultralytics/yolov5.git
    cd yolov5
    pip install -r requirements.txt
    
    
  • 数据组织

    /dataset
      /images
        /train  *.jpg
        /val    *.jpg
      /labels
        /train  *.txt
        /val    *.txt
    
  • 自定义数据配置 data/custom.yaml

    train: ../dataset/images/train
    val:   ../dataset/images/val
    nc:    3
    names: ['cat','dog','person']
    

2. 模型训练

python train.py \
  --img 640 \
  --batch 16 \
  --epochs 50 \
  --data data/custom.yaml \
  --weights yolov5s.pt \
  --project runs/train --name exp1
  • 监控:runs/train/exp1 下自动生成日志、TensorBoard、模型快照。

3. 验证与导出

  • 验证

    python val.py --weights runs/train/exp1/weights/best.pt --data data/custom.yaml --img 640
    
  • 导出 ONNX / TorchScript / TensorRT / TFLite

    python export.py --weights best.pt --include onnx,torchscript,tflite,engine --simplify
    

4. 服务化部署(FastAPI + Uvicorn)

  • 封装检测接口 app = FastAPI()

  • 启动命令:

    uvicorn main:app --host 0.0.0.0 --port 8000 --workers 2 --log-level info
    

超参数调优

YOLOv5 的超参集中在 hyp*.yaml 中:

# 学习率 & 优化器
lr0: 0.01          # 初始 LR
lrf: 0.2           # 最终 LR 比例
momentum: 0.937
weight_decay:0.0005

# Warmup
warmup_epochs:3.0
warmup_momentum:0.8
warmup_bias_lr:0.1

# 损失权重
box:7.5
cls:0.5
obj:1.0
fl_gamma:0.0

# IoU & Anchor
iou_t:0.20
anchor_t:4.0

# 数据增强
hsv_h:0.015
hsv_s:0.7
hsv_v:0.4
translate:0.1
scale:0.5
flipud:0.0
fliplr:0.5
mosaic:1.0
mixup:0.0

调优思路

  1. 分组试验:学习率组、损失权重组、增强参数组,各组内一次只改 1–2 个参数。
  2. 自动进化
   python train.py --evolve --patience 5
  1. 可视化:TensorBoard / Weights & Biases 监控曲线对比。

模型优化技术汇总

  1. 剪枝 (Pruning)

    • 非结构化:按权重幅度剪小值 → 难加速
    • 结构化:剪通道/卷积核 → 硬件友好
    • 流程:训练 → 评估重要性 → 剪枝 → 微调
  2. 蒸馏 (Distillation)

    • 教师–学生架构:
   Loss = CE(student, labels) + α·KL(student_logits, teacher_logits)
  • 可扩展至 多级蒸馏:中间特征、注意力图、关系矩阵等。
  1. 量化 (Quantization)

    • PTQ:校准数据 → 零改动部署
    • QAT:训练时模拟量化 → 保持 FP32 精度
  2. 混合精度训练 (Mixed‑Precision)

   from torch.cuda.amp import autocast, GradScaler
   scaler = GradScaler()
   with autocast():
       loss = model(input)
   scaler.scale(loss).backward()
   scaler.step(optimizer)
   scaler.update()
  1. 超参数进化 (Hyperparameter Evolution)

    • 遗传算法搜索超参空间
    • 并行评估、迭代优化
  2. 神经架构搜索 (NAS)

    • 强化学习 / 进化 / 梯度(DARTS)方法
    • 高开销,适合 AutoML 平台
  3. 数据增强优化

    • Mosaic、MixUp、CutMix、Copy‑Paste
    • AutoAugment / RandAugment
  4. 动态分辨率推理

    • 根据目标大小或负载在线切换分辨率
  5. 硬件加速库

    平台 场景
    NVIDIA TensorRT GPU / Jetson
    Intel OpenVINO CPU / NCS
    多平台 TVM 定制化硬件
    Android NNAPI 手机 / 嵌入式
  6. 算子融合 (Operator Fusion)

    • 合并 Conv→BN→Activation 等算子
    • ONNX Simplifier / TensorRT 自动完成
  7. 计算图优化 (Graph Optimization)

    • 常量折叠、死节点消除、内存复用等
    • ONNX Graph Surgeon、TensorRT Builder

工业场景中的常用优化实践

优先级 技术 应用理由
⭐️① 混合精度训练 原生支持、一行改动,速度 ↑1.5–2×,显存 ↓50%
⭐️② 硬件加速(TensorRT/OpenVINO) 推理 ↓2–5× 延迟、吞吐 ↑
⭐️③ 量化 (PTQ/QAT) INT8 推理速度 ↑2–4×、功耗 ↓
⭐️④ 结构化剪枝 精细控 FLOPs、模型尺寸;实际加速 1.2–2×
⭐️⑤ 数据增强优化 行业标配,mAP ↑1–5%,小目标/遮挡鲁棒性显著提升
  • 二次提升:蒸馏、超参进化
  • 高阶场景:NAS、动态分辨率 → AutoML 平台

边缘设备部署流程与常见问题

流程概览

  1. 硬件选型:Jetson Nano/Xavier、Raspberry Pi+NCS2、Coral Dev Board

  2. 模型转换

    python export.py --weights best.pt --include onnx --simplify
    trtexec --onnx=best.onnx --saveEngine=best.trt --fp16 --workspace=2048
    
  3. 环境搭建

    • Jetson:JetPack(CUDA/cuDNN/TensorRT)
    • Pi:apt install python3-pip libatlas-base-dev
      pip3 install numpy opencv-python onnxruntime-gpu
  4. 推理脚本 (infer.py)

 import tensorrt as trt
 # 加载 .trt,引擎创建、缓冲区分配、预处理、推理、后处理
  1. 启动
 python3 infer.py --source 0 --imgsz 640
  1. 容器化(可选)
 FROM nvcr.io/nvidia/l4t-pytorch:…
 COPY . /app
 RUN pip3 install -r requirements.txt
 ENTRYPOINT ["python3","infer.py"]

常见问题与解决方案

问题 原因 解决方案
推理速度低 未启 fp16/int8;未用 TensorRT 导出并加载 .trt;加 --fp16 或 INT8
内存/显存溢出 模型过大;batch 太大 切换到 yolov5n;剪枝;减 batch
精度大幅下降 量化误差;剪枝率过高 QAT;剪枝后微调;降低剪枝率
摄像头花屏 设备节点权限;格式不支持 指定 --device /dev/video0;安装 v4l2 支持
容器内无 GPU 未挂载 NVIDIA 驱动;缺 --gpus all 安装 NVIDIA Container Toolkit;加 --gpus all
设备降频 长时间高负载导致过热 加装散热;定期重启;降低采集帧率

posted @ 2025-06-30 14:01  ZHZCE  阅读(106)  评论(0)    收藏  举报