YOLOv5学习文档
YOLOv5学习文档
目录
简介
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–2 个参数。
- 自动进化:
python train.py --evolve --patience 5
- 可视化:TensorBoard / Weights & Biases 监控曲线对比。
模型优化技术汇总
-
剪枝 (Pruning)
- 非结构化:按权重幅度剪小值 → 难加速
- 结构化:剪通道/卷积核 → 硬件友好
- 流程:训练 → 评估重要性 → 剪枝 → 微调
-
蒸馏 (Distillation)
- 教师–学生架构:
Loss = CE(student, labels) + α·KL(student_logits, teacher_logits)
- 可扩展至 多级蒸馏:中间特征、注意力图、关系矩阵等。
-
量化 (Quantization)
- PTQ:校准数据 → 零改动部署
- QAT:训练时模拟量化 → 保持 FP32 精度
-
混合精度训练 (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()
-
超参数进化 (Hyperparameter Evolution)
- 遗传算法搜索超参空间
- 并行评估、迭代优化
-
神经架构搜索 (NAS)
- 强化学习 / 进化 / 梯度(DARTS)方法
- 高开销,适合 AutoML 平台
-
数据增强优化
- Mosaic、MixUp、CutMix、Copy‑Paste
- AutoAugment / RandAugment
-
动态分辨率推理
- 根据目标大小或负载在线切换分辨率
-
硬件加速库
平台 库 场景 NVIDIA TensorRT GPU / Jetson Intel OpenVINO CPU / NCS 多平台 TVM 定制化硬件 Android NNAPI 手机 / 嵌入式 -
算子融合 (Operator Fusion)
- 合并 Conv→BN→Activation 等算子
- ONNX Simplifier / TensorRT 自动完成
-
计算图优化 (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 平台
边缘设备部署流程与常见问题
流程概览
-
硬件选型:Jetson Nano/Xavier、Raspberry Pi+NCS2、Coral Dev Board
-
模型转换
python export.py --weights best.pt --include onnx --simplify trtexec --onnx=best.onnx --saveEngine=best.trt --fp16 --workspace=2048
-
环境搭建
- Jetson:JetPack(CUDA/cuDNN/TensorRT)
- Pi:
apt install python3-pip libatlas-base-dev
pip3 install numpy opencv-python onnxruntime-gpu
-
推理脚本 (
infer.py
)
import tensorrt as trt
# 加载 .trt,引擎创建、缓冲区分配、预处理、推理、后处理
- 启动
python3 infer.py --source 0 --imgsz 640
- 容器化(可选)
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 |
设备降频 | 长时间高负载导致过热 | 加装散热;定期重启;降低采集帧率 |