YoloV5实战:手把手教物体检测——YoloV5
一、引言:为什么选择YoloV5?
物体检测是计算机视觉的核心任务之一,广泛应用于安防监控、自动驾驶、工业质检等领域。YoloV5作为Yolo系列(You Only Look Once)的第五代版本,凭借其高精度、高速度、易部署的特点,成为开发者首选的实时检测框架。相较于传统两阶段检测器(如Faster R-CNN),YoloV5采用单阶段端到端设计,直接在图像上回归边界框和类别,速度提升数倍;同时,通过改进的CSPDarknet骨干网络和PANet特征融合结构,在精度上媲美甚至超越双阶段模型。
本文将从零开始,通过环境配置、数据准备、模型训练、优化调参、部署应用五个环节,手把手教你完成一个完整的YoloV5物体检测项目。无论你是初学者还是有一定经验的开发者,都能从中获得实用的技术指导。
二、环境配置:搭建开发基石
1. 硬件与软件要求
- 硬件:推荐使用NVIDIA GPU(如RTX 3060及以上),CUDA加速可显著提升训练速度;若无GPU,可使用Colab免费GPU资源。
- 软件:Python 3.8+、PyTorch 1.7+、CUDA 10.2+(与PyTorch版本匹配)、cuDNN。
2. 安装YoloV5
通过PyPI直接安装最新稳定版:
pip install ultralytics
或从GitHub克隆源码(适合修改代码):
git clone https://github.com/ultralytics/yolov5 # 克隆仓库cd yolov5pip install -r requirements.txt # 安装依赖
3. 验证环境
运行官方示例检测图像:
from ultralytics import YOLOmodel = YOLO('yolov5s.pt') # 加载预训练模型results = model('zidane.jpg') # 检测图像results.show() # 显示结果
若成功输出带边界框的检测图像,说明环境配置正确。
三、数据准备:从原始数据到训练集
1. 数据集格式要求
YoloV5支持两种数据格式:
- Yolo格式:每行文本为
<class> <x_center> <y_center> <width> <height>(归一化到[0,1])。 - COCO格式:JSON文件存储标注信息,适合复杂场景。
示例Yolo格式标注(labels/train/img1.txt):
0 0.5 0.5 0.2 0.3 # 类别0,中心点(0.5,0.5),宽0.2,高0.31 0.3 0.7 0.1 0.1 # 类别1
2. 数据集划分
推荐按7
1划分训练集、验证集、测试集。使用datasets.py中的create_dataloader函数自动处理:
from ultralytics.data.utils import create_dataloaderdata_dict = {'train': 'data/images/train/', # 训练图像路径'val': 'data/images/val/', # 验证图像路径'names': ['cat', 'dog'] # 类别名称}train_loader = create_dataloader(data_dict, batch_size=16, img_size=640)[0]
3. 数据增强策略
YoloV5内置丰富的数据增强方法,可通过hyp.scratch.yaml配置:
- 几何变换:随机缩放、裁剪、翻转(
hsv_h,hsv_s,hsv_v调整色调、饱和度、亮度)。 - Mosaic增强:将4张图像拼接为1张,增加上下文多样性。
- MixUp增强:图像与标签的线性叠加,提升模型鲁棒性。
四、模型训练:从预训练到微调
1. 选择预训练模型
YoloV5提供多种规模模型(按参数量从小到大):
yolov5s.pt:14M参数,速度快,适合边缘设备。yolov5m.pt:40M参数,平衡精度与速度。yolov5l.pt:76M参数,高精度。yolov5x.pt:170M参数,极致精度。
2. 训练命令详解
基本训练命令:
python train.py --img 640 --batch 16 --epochs 100 --data custom.yaml --weights yolov5s.pt --name my_model
--img 640:输入图像尺寸(建议640或1280)。--batch 16:批大小(根据GPU内存调整)。--epochs 100:训练轮数。--data custom.yaml:数据集配置文件。--weights yolov5s.pt:预训练权重路径。--name my_model:实验名称(结果保存在runs/train/my_model)。
3. 关键训练参数
- 学习率:初始学习率建议0.01(
--lr0 0.01),使用余弦退火调整。 - 优化器:默认SGD(
--optimizer 'SGD'),也可选AdamW。 - 损失函数:CIoU损失(边界框回归)+ Focal Loss(类别不平衡)。
4. 监控训练过程
训练日志会输出以下指标:
metrics/precision:精确率(预测为正的样本中实际为正的比例)。metrics/recall:召回率(实际为正的样本中被预测为正的比例)。metrics/mAP_0.5:IoU=0.5时的平均精度。metrics/mAP_0.5:0.95:IoU从0.5到0.95的平均精度(COCO指标)。
可通过TensorBoard可视化:
tensorboard --logdir runs/train
五、模型优化:提升精度与速度
1. 超参数调优
- 输入尺寸:增大
--img(如1280)可提升小目标检测精度,但增加计算量。 - 批大小:增大
--batch可稳定梯度,但需更多GPU内存。 - 学习率:若训练后期损失波动大,可降低
--lr0或增加--warmup_epochs。
2. 模型剪枝与量化
- 剪枝:移除冗余通道,减少参数量:
model = YOLO('yolov5s.pt')model.prune(amount=0.3) # 剪枝30%通道model.save('yolov5s_pruned.pt')
- 量化:将FP32权重转为INT8,速度提升2-4倍:
model = YOLO('yolov5s.pt')model.quantize() # 量化model.save('yolov5s_quant.pt')
3. 知识蒸馏
用大模型(教师)指导小模型(学生)训练:
teacher = YOLO('yolov5x.pt')student = YOLO('yolov5s.pt')student.distill(teacher=teacher, epochs=50) # 蒸馏50轮
六、部署应用:从模型到产品
1. 导出为不同格式
- TorchScript:适用于PyTorch生态:
model = YOLO('yolov5s.pt')model.export(format='torchscript')
- ONNX:跨平台部署(如TensorRT、OpenVINO):
model.export(format='onnx')
- CoreML:iOS设备部署:
model.export(format='coreml')
2. 实时检测示例(Python)
from ultralytics import YOLOimport cv2model = YOLO('yolov5s.pt')cap = cv2.VideoCapture(0) # 摄像头while True:ret, frame = cap.read()if not ret:breakresults = model(frame) # 检测annotated_frame = results[0].plot() # 绘制边界框cv2.imshow('Detection', annotated_frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()cv2.destroyAllWindows()
3. C++部署(OpenCV DNN)
若需高性能推理,可用OpenCV加载ONNX模型:
#include <opencv2/dnn.hpp>#include <opencv2/opencv.hpp>using namespace cv;using namespace dnn;int main() {Net net = readNetFromONNX("yolov5s.onnx");VideoCapture cap(0);Mat frame, blob;while (true) {cap >> frame;if (frame.empty()) break;blobFromImage(frame, blob, 1/255.0, Size(640, 640), Scalar(0,0,0), true, false);net.setInput(blob);Mat outputs = net.forward();// 解析outputs绘制边界框(需实现NMS)imshow("Detection", frame);if (waitKey(1) == 'q') break;}return 0;}
七、总结与展望
本文通过完整的实战流程,展示了YoloV5从环境配置到部署应用的全过程。关键点包括:
- 数据准备:规范标注格式,合理划分数据集。
- 模型训练:选择合适的预训练模型,调整超参数。
- 优化策略:剪枝、量化、蒸馏提升模型效率。
- 部署应用:支持多平台导出,满足不同场景需求。
未来,Yolo系列将继续向更高精度、更低延迟发展,结合Transformer架构(如YoloV7的ELAN结构)和自监督学习,进一步拓展物体检测的应用边界。对于开发者而言,掌握YoloV5不仅是完成当前项目的关键,更是迈向更复杂计算机视觉任务的基础。