YoloV5实战指南:从零开始的物体检测教程

YoloV5实战:手把手教物体检测

一、为什么选择YoloV5?

YoloV5作为Ultralytics团队推出的目标检测框架,凭借其轻量化设计(最小模型仅7.3MB)、高精度表现(COCO数据集mAP@0.5达56.8%)和易用性(支持PyTorch生态),成为工业界和学术界的热门选择。相较于前代版本,YoloV5通过自适应锚框计算Mosaic数据增强CSPDarknet骨干网络等创新,在检测速度和准确率上实现了显著提升。

二、环境配置与工具准备

1. 硬件要求

  • 推荐配置:NVIDIA GPU(显存≥4GB)+ CUDA 11.x + cuDNN 8.x
  • CPU模式:支持但训练速度较慢(约慢10倍)

2. 软件依赖

  1. # 创建conda环境(推荐)
  2. conda create -n yolov5 python=3.8
  3. conda activate yolov5
  4. # 安装核心依赖
  5. pip install torch torchvision torchaudio # 根据CUDA版本选择版本
  6. pip install opencv-python matplotlib tqdm
  7. pip install git+https://github.com/ultralytics/yolov5.git

3. 验证环境

  1. import torch
  2. print(torch.__version__) # 应输出与CUDA匹配的版本
  3. print(torch.cuda.is_available()) # 应返回True

三、数据集准备与预处理

1. 数据集结构规范

  1. dataset/
  2. ├── images/
  3. ├── train/ # 训练集图片
  4. └── val/ # 验证集图片
  5. └── labels/
  6. ├── train/ # 训练集标注(YOLO格式)
  7. └── val/ # 验证集标注

2. 标注文件格式

YOLO格式标注文件每行包含:

  1. <class_id> <x_center> <y_center> <width> <height>

其中坐标均为相对值(0~1范围),示例:

  1. 0 0.5 0.5 0.2 0.3 # 第0类物体,中心在(0.5,0.5),宽高占比0.2和0.3

3. 数据增强技巧

YoloV5内置Mosaic增强(四图拼接)、HSV色彩空间调整随机缩放等策略,可通过修改data/coco128.yaml中的augment参数调整:

  1. train: ../datasets/coco128/images/train/
  2. val: ../datasets/coco128/images/val/
  3. nc: 80 # 类别数
  4. names: ['person', 'bicycle', ...] # 类别名称

四、模型训练全流程

1. 选择预训练模型

YoloV5提供6种规模模型:
| 模型 | 参数量 | 速度(FPS) | mAP@0.5 |
|——————|————|—————-|————-|
| YoloV5s | 7.3M | 140 | 56.8% |
| YoloV5m | 21.2M | 110 | 60.6% |
| YoloV5l | 46.5M | 82 | 63.7% |
| YoloV5x | 86.7M | 64 | 65.4% |

推荐策略

  • 嵌入式设备:YoloV5s
  • 云端部署:YoloV5l
  • 高精度需求:YoloV5x + TTA(测试时增强)

2. 训练命令示例

  1. python train.py --img 640 --batch 16 --epochs 100 \
  2. --data coco128.yaml --weights yolov5s.pt \
  3. --name custom_model --cache ram

关键参数说明:

  • --img:输入分辨率(建议640或1280)
  • --batch:批大小(根据GPU显存调整)
  • --epochs:训练轮数(通常300轮)
  • --weights:预训练模型路径
  • --cache:数据加载方式(ram/disk

3. 训练日志解析

训练过程中会输出以下关键指标:

  1. Epoch: 100 | GPU: 0.98h | Prec@1: 0.923 | mAP@0.5: 0.654 | mAP@0.5:0.95: 0.487
  • Prec@1:Top-1准确率
  • mAP@0.5:IoU=0.5时的平均精度
  • mAP@0.5:0.95:IoU从0.5到0.95的平均精度

五、模型优化技巧

1. 超参数调优

data/hyp.scratch.yaml中调整:

  1. lr0: 0.01 # 初始学习率
  2. lrf: 0.01 # 学习率衰减系数
  3. momentum: 0.937 # 动量
  4. weight_decay: 0.0005 # 权重衰减

2. 模型剪枝

使用--optimize参数进行通道剪枝:

  1. python export.py --weights yolov5s.pt --include prune \
  2. --img 640 --optimize 0.3 # 剪枝30%通道

3. 知识蒸馏

通过--teacher参数引入教师模型:

  1. python train.py --weights yolov5s.pt --teacher yolov5x.pt \
  2. --data coco128.yaml --epochs 50

六、部署与应用

1. 模型导出

  1. python export.py --weights yolov5s.pt --include onnx \
  2. --img 640 --opset 12

支持格式:

  • torchscript:PyTorch脚本模型
  • onnx:通用跨平台格式
  • coreml:苹果设备专用
  • tflite:安卓设备专用

2. 推理代码示例

  1. import cv2
  2. import torch
  3. from models.experimental import attempt_load
  4. # 加载模型
  5. model = attempt_load('yolov5s.pt', map_location='cpu')
  6. # 推理函数
  7. def detect(img_path):
  8. img = cv2.imread(img_path)
  9. img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
  10. results = model(img)
  11. # 解析结果
  12. for *box, conf, cls in results.xyxy[0]:
  13. print(f"Class {int(cls)}: {conf.item():.2f} @ {box}")
  14. # 执行检测
  15. detect('test.jpg')

3. 性能优化

  • TensorRT加速(NVIDIA GPU):
    1. trtexec --onnx=yolov5s.onnx --saveEngine=yolov5s.engine
  • OpenVINO优化(Intel CPU):
    1. mo --framework onnx --input_model yolov5s.onnx \
    2. --output_dir openvino_model

七、常见问题解决方案

1. 训练中断处理

使用--resume参数继续训练:

  1. python train.py --resume yolov5s/last.pt

2. 类别不平衡问题

在数据集中采用加权采样或修改损失函数:

  1. # 在data/hyp.scratch.yaml中调整
  2. cls_pw: 1.0 # 类别权重平衡系数

3. 小目标检测优化

  • 增大输入分辨率(--img 1280
  • 使用更高分辨率的预训练模型(如YoloV5x)
  • 在数据增强中增加--flipud(上下翻转)

八、进阶应用场景

1. 实时视频流检测

  1. import cv2
  2. from models.experimental import attempt_load
  3. model = attempt_load('yolov5s.pt')
  4. cap = cv2.VideoCapture(0) # 或视频文件路径
  5. while True:
  6. ret, frame = cap.read()
  7. if not ret: break
  8. results = model(frame)
  9. # 绘制检测框(需实现draw_boxes函数)
  10. # ...
  11. cv2.imshow('Detection', frame)
  12. if cv2.waitKey(1) == 27: break # ESC键退出

2. 多任务学习

通过修改models/yolo.py中的head部分,可同时实现:

  • 目标检测
  • 实例分割
  • 关键点检测

3. 嵌入式部署

针对树莓派等设备:

  1. 使用--half参数进行半精度训练
  2. 导出为TFLite格式
  3. 通过tensorflow-lite-delegate-gpu加速

九、资源推荐

  1. 官方文档:https://github.com/ultralytics/yolov5/wiki
  2. 预训练模型:https://github.com/ultralytics/yolov5/releases
  3. 数据集工具:LabelImg(标注)、Roboflow(数据管理)
  4. 可视化工具:Weights & Biases(训练监控)

通过本文的实战指导,读者可系统掌握YoloV5从环境搭建到部署应用的全流程。建议从YoloV5s模型开始实践,逐步尝试模型优化和定制化开发。实际项目中,需特别注意数据质量对模型性能的关键影响,建议采用80/20法则分配时间(80%时间用于数据收集和清洗,20%用于模型调优)。