1. 前言:为什么选择YOLOv5?
作为一名计算机视觉方向的算法工程师,我接触过各种目标检测框架,但YOLOv5始终是我的首选推荐。它不仅继承了YOLO系列"快准狠"的基因,更在易用性上做了大量优化。记得第一次部署YOLOv3时,光是环境配置就折腾了两天,而YOLOv5从安装到运行第一个检测demo,新手也能在30分钟内完成。
YOLOv5的独特优势在于:
- 工业级性能:在COCO数据集上,YOLOv5s模型仅27MB大小却能实现56.8%的AP精度,推理速度在V100上可达140FPS
- 极简工程化:完善的Python接口、清晰的代码结构、详细的文档,让算法落地变得简单
- 全平台兼容:支持从树莓派到云服务器的各类硬件,提供PyTorch、ONNX、TensorRT等多种格式的模型导出
提示:虽然官方已推出YOLOv8,但YOLOv5仍是目前社区生态最完善、工业部署最广泛的版本,特别适合需要快速落地的项目。
2. 环境准备:避坑指南
2.1 硬件配置方案
根据我的部署经验,不同硬件配置下的性能差异巨大:
| 设备类型 | 推荐配置 | 预期推理速度 (FPS) |
|---|---|---|
| 高性能GPU | RTX 3080 + CUDA 11.7 | 120-140 (YOLOv5s) |
| 入门级GPU | GTX 1660 + CUDA 11.3 | 45-55 |
| 轻薄本CPU | i7-1165G7 | 8-12 |
| 树莓派4B | 4GB内存 + 散热风扇 | 1.5-2.5 |
实测发现:使用CPU运行时,建议将图像resize到640x640以下,否则内存占用会飙升到4GB以上。
2.2 Python环境配置
强烈推荐使用conda创建虚拟环境,这是我验证过的完美组合:
bash复制conda create -n yolov5 python=3.10 -y
conda activate yolov5
常见版本冲突问题:
- OpenCV报错:当出现"ImportError: libGL.so.1"错误时,需要安装:
bash复制sudo apt install libgl1-mesa-glx # Ubuntu brew install opencv # macOS - PyTorch安装失败:先安装官方推荐的PyTorch版本:
bash复制
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
3. 安装全流程详解
3.1 代码获取最佳实践
国内用户建议使用Gitee镜像,速度提升10倍以上:
bash复制git clone https://gitee.com/ultralytics/yolov5.git --depth 1 # 只克隆最新提交
cd yolov5
如果遇到SSL证书错误,可以临时关闭验证:
bash复制git config --global http.sslVerify false
3.2 依赖安装的进阶技巧
除了基本的requirements.txt,我强烈建议安装这些优化组件:
bash复制pip install thop # 计算FLOPs
pip install seaborn # 更美观的可视化
pip install onnxruntime # 模型转换必备
对于国内用户,永久修改pip源为清华镜像:
bash复制pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
4. 快速验证与排错
4.1 首次运行测试
使用官方提供的预训练模型进行验证:
bash复制python detect.py --weights yolov5s.pt --source data/images/bus.jpg
常见报错解决方案:
- CUDA out of memory:减小
--img-size参数(如改为640) - No module named 'xxx':检查虚拟环境是否激活,重新安装缺失包
- Downloading timeout:手动下载模型到
yolov5/weights目录
4.2 摄像头实时检测
实现1080P摄像头的低延迟检测:
bash复制python detect.py --weights yolov5s.pt --source 0 --img-size 1280 --conf-thres 0.5
关键参数说明:
--source 0:使用默认摄像头--img-size 1280:输入分辨率(越大越精确但越慢)--conf-thres 0.5:只显示置信度>50%的检测框
5. 训练自定义数据集
5.1 数据准备规范
推荐使用这种目录结构:
code复制custom_data/
├── images/
│ ├── train/ # 训练图片
│ └── val/ # 验证图片
└── labels/
├── train/ # YOLO格式标签
└── val/
标签格式示例(每行一个对象):
code复制<class_id> <x_center> <y_center> <width> <height> # 全部为归一化数值
5.2 训练参数调优
我的最佳实践配置:
bash复制python train.py --img 640 --batch 16 --epochs 100 --data custom.yaml --weights yolov5s.pt --cache
关键技巧:
- 启用
--cache可将数据集缓存到内存,提速3-5倍 - 小样本训练时添加
--freeze 10冻结浅层网络 - 使用W&B监控训练过程:
--wandb
6. 模型部署实战
6.1 模型导出为ONNX
bash复制python export.py --weights yolov5s.pt --include onnx --img 640 --simplify
部署注意事项:
- ONNX模型需要对应版本的Runtime(建议1.12+)
- 动态轴设置会影响推理速度,固定输入尺寸最佳
- 验证导出结果:
python detect.py --weights yolov5s.onnx
6.2 TensorRT加速
生成FP16精度的引擎:
bash复制trtexec --onnx=yolov5s.onnx --saveEngine=yolov5s_fp16.engine --fp16
实测性能对比(RTX 3090):
| 格式 | 延迟(ms) | 显存占用(MB) |
|---|---|---|
| PyTorch | 6.2 | 1240 |
| ONNX | 4.8 | 980 |
| TensorRT | 2.1 | 740 |
7. 常见问题解决方案
7.1 性能优化技巧
- 多线程预处理:修改
dataset.py中的num_workers参数(建议设为CPU核心数) - TensorRT INT8量化:可进一步提升30%速度,但需要校准数据集
- OpenVINO优化:适合Intel CPU部署,能提升2-3倍速度
7.2 典型错误排查
-
NMS速度慢:
python复制# 修改utils/general.py中的non_max_suppression iou_thres=0.45 # 可适当调高加速 -
GPU利用率低:
- 检查数据加载是否成为瓶颈(观察GPU波动)
- 增大
--batch-size直到显存占满
-
验证集mAP异常:
- 检查标签文件是否损坏
- 确认训练/验证集分布一致
8. 工程化建议
在实际项目中,我总结出这些经验:
-
模型选型原则:
- 移动端:YOLOv5n + TensorRT
- 服务端:YOLOv5x + ONNX Runtime
- 边缘设备:YOLOv5s + OpenVINO
-
数据增强策略:
yaml复制# data/hyps/hyp.scratch-low.yaml hsv_h: 0.015 # 色相增强幅度 hsv_s: 0.7 # 饱和度增强 fliplr: 0.5 # 水平翻转概率 -
日志监控体系:
- 使用TensorBoard记录损失曲线
- 自定义回调函数监控关键指标
- 异常检测自动发送邮件报警
经过数十个项目的验证,这套工作流程能确保YOLOv5在工业场景稳定运行。最近在一个安防项目中,我们基于YOLOv5s改造的模型在Jetson Xavier NX上实现了35FPS的实时检测,误报率比原版降低了42%。