0

深度学习-物体检测-YOLO实战系列(已更新V5)

1egferghrt
5天前 6

获课地址:666it.top/3225/

深度学习物体检测YOLO实战指南:从入门到精通

引言:为什么选择YOLOv5?

在计算机视觉领域,YOLO系列已经成为物体检测的事实标准。而YOLOv5的出现,更是将这一技术的易用性提升到了全新高度。与学术气息浓厚的YOLOv4不同,YOLOv5由Ultralytics公司开发,从一开始就瞄准了工程实践——它提供了从数据准备、模型训练到部署推理的完整工具链,让开发者能够专注于业务逻辑而非底层实现。

本文将带你走一遍完整的YOLOv5实战流程,帮助你快速掌握这一强大工具。

一、环境搭建:五分钟启动YOLOv5

硬件配置建议

YOLOv5对硬件的要求相当友好:

  • GPU推荐:NVIDIA显卡,4GB以上显存即可训练小模型,8GB可训练主流模型

  • CPU与内存:4核以上CPU,16GB内存可应对大多数场景

  • 存储空间:预留20GB以上用于数据集和模型文件

软件环境配置

最便捷的方式是使用conda创建独立环境:

bash
# 创建Python 3.8环境conda create -n yolov5 python=3.8conda activate yolov5# 克隆官方仓库git clone https://github.com/ultralytics/yolov5cd yolov5# 安装依赖(自动匹配CUDA版本)pip install -r requirements.txt

安装完成后,运行测试命令验证环境:

bash
python detect.py --weights yolov5s.pt --source data/images/bus.jpg

如果一切正常,你将在runs/detect/exp目录下看到标注好物体的图片。

二、数据准备:高质量数据集是成功的关键

数据集格式规范

YOLOv5要求的数据集采用以下目录结构:

text
datasets/
├── images/          # 图像文件夹
│   ├── train/       # 训练集图片
│   └── val/         # 验证集图片
├── labels/          # 标签文件夹  
│   ├── train/       # 训练集标签
│   └── val/         # 验证集标签
└── data.yaml        # 数据集配置文件

每个图片对应一个同名的txt标签文件,内容格式为:

text
<class_id> <x_center> <y_center> <width> <height>

注意所有坐标值均需归一化到0-1之间。

数据标注实战

推荐使用LabelImg或LabelStudio进行标注:

LabelImg使用步骤

  1. 安装:pip install labelimg

  2. 打开软件,选择图片目录

  3. 使用矩形框标注物体,输入类别名称

  4. 保存自动生成YOLO格式的txt文件

数据集配置文件

data.yaml文件定义了数据集的基本信息:

yaml
# 训练集和验证集路径path: ../datasets/custom  # 数据集根目录train: images/train       # 训练图片路径val: images/val          # 验证图片路径# 类别定义nc: 3                    # 类别数量names: ['person', 'car', 'bicycle']  # 类别名称

三、模型训练:从零开始到领域专家

选择预训练模型

YOLOv5提供了五个不同规模的预训练模型:

模型参数量速度精度适用场景
YOLOv5n1.9M最快最低移动端/边缘设备
YOLOv5s7.2M较低通用场景
YOLOv5m21.2M中等中等平衡选择
YOLOv5l46.5M较慢较高服务器端
YOLOv5x86.7M最慢最高追求极致精度

初学者推荐从YOLOv5s开始,它在速度和精度间取得最佳平衡。

训练命令详解

基础训练命令:

bash
python train.py --data custom.yaml --weights yolov5s.pt --img 640 --epochs 100 --batch-size 16

关键参数说明:

  • --data:数据集配置文件路径

  • --weights:预训练权重,也可用--weights '' --cfg yolov5s.yaml从头训练

  • --img:输入图片尺寸,通常640x640

  • --batch-size:批次大小,根据显存调整

  • --epochs:训练轮数,小数据集50-100轮,大数据集200-300轮

  • --device:指定GPU,如00,1,2,3

训练过程监控

训练过程中,你会看到实时输出的训练日志:

text
     Epoch   gpu_mem       box       obj       cls    labels  img_size
      50/100     3.85G   0.04312   0.02167   0.01258        24       640

训练完成后,在runs/train/exp目录下生成:

  • weights/best.pt:验证集上表现最好的模型

  • weights/last.pt:最后一轮模型

  • results.png:训练指标变化曲线

  • confusion_matrix.png:混淆矩阵

四、模型评估与优化:让检测更精准

评估指标解读

使用以下命令评估模型:

bash
python val.py --data custom.yaml --weights runs/train/exp/weights/best.pt

输出结果包含关键指标:

  • [email protected]:IoU阈值为0.5时的平均精度,工业界常用指标

  • [email protected]:0.95:不同IoU阈值的平均,学术界更严格

  • Precision:预测为正例中实际为正例的比例

  • Recall:实际为正例中被正确预测的比例

常见问题优化策略

过拟合表现:训练集指标好但验证集差

  • 增加数据增强:在训练命令中添加--augment

  • 添加正则化:增大--dropout或减小--weight-decay

  • 减少训练轮数或使用早停机制

欠拟合表现:训练集和验证集指标都不理想

  • 使用更大模型:如从yolov5s升级到yolov5m

  • 增加训练轮数:设置更大的--epochs

  • 检查学习率:尝试调整--lr0初始学习率

小目标检测困难

  • 增加输入分辨率:--img 1280

  • 使用专门的小目标增强:--multi-scale

  • 检查数据集中小目标标注是否准确

超参数调优

YOLOv5支持使用遗传算法自动搜索超参数:

bash
python train.py --data custom.yaml --weights yolov5s.pt --epochs 50 --hyp data/hyps/hyp.scratch-low.yaml --evolve

系统会运行多轮训练,自动寻找最佳超参数组合。

五、模型部署:将算法投入实际应用

图片与视频检测

基础检测命令:

bash
# 检测单张图片python detect.py --weights best.pt --source test.jpg# 检测视频文件python detect.py --weights best.pt --source video.mp4# 实时摄像头检测python detect.py --weights best.pt --source 0

模型导出与加速

YOLOv5支持导出多种格式:

bash
# 导出为ONNX格式python export.py --weights best.pt --include onnx# 导出为TensorRT引擎(需要TensorRT环境)python export.py --weights best.pt --include engine# 导出为TorchScriptpython export.py --weights best.pt --include torchscript

性能对比

  • PyTorch模型:精度最高,速度一般

  • ONNX模型:跨平台兼容,速度略有提升

  • TensorRT引擎:速度提升3-5倍,适合生产部署

实际应用案例:智能安防系统

以监控视频中的人员检测为例:

python
import cv2import torch# 加载模型model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt')# 视频处理cap = cv2.VideoCapture('surveillance.mp4')while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    
    # 执行检测
    results = model(frame)
    
    # 筛选人员类别(假设人员id为0)
    persons = results.pandas().xyxy[0][results.pandas().xyxy[0]['class'] == 0]
    
    # 绘制结果并输出
    annotated_frame = results.render()[0]
    cv2.imshow('Detection', annotated_frame)
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        breakcap.release()cv2.destroyAllWindows()

进阶之路:从应用到创新

掌握了YOLOv5的基础用法后,你可以探索更多进阶方向:

模型轻量化:使用知识蒸馏技术,将大模型知识迁移到小模型,在保持精度的同时提升速度。

多任务扩展:在检测基础上增加分割、姿态估计等任务,实现更丰富的场景理解。

小样本学习:面对数据稀少的场景,研究迁移学习、数据增强等技术,用少量样本训练有效模型。

自定义模块:深入理解YOLOv5的代码结构,根据特定需求修改骨干网络、损失函数或后处理逻辑。

YOLOv5的强大不仅在于其性能,更在于它将复杂的物体检测技术封装成易于使用的工具。无论你是刚入门的学生,还是经验丰富的工程师,都能借助YOLOv5快速构建实用的物体检测系统。记住,工具只是手段,真正的价值在于解决实际问题的创造力。现在,开启你的YOLO实战之旅吧!


本站不存储任何实质资源,该帖为网盘用户发布的网盘链接介绍帖,本文内所有链接指向的云盘网盘资源,其版权归版权方所有!其实际管理权为帖子发布者所有,本站无法操作相关资源。如您认为本站任何介绍帖侵犯了您的合法版权,请发送邮件 [email protected] 进行投诉,我们将在确认本文链接指向的资源存在侵权后,立即删除相关介绍帖子!
最新回复 (0)

    暂无评论

请先登录后发表评论!

返回
请先登录后发表评论!