2. YOLOv5 搭建一个完整的目标检测系统核心步骤

以 YOLOv5 为例,搭建一个完整的目标检测系统通常需要以下 5 个核心步骤。我会为你进行一个详细的拆解:

步骤 1: 环境准备

首先,你需要一个能运行 YOLOv5 的计算机环境。推荐使用带有 NVIDIA 显卡的电脑,因为训练过程非常依赖 GPU 进行加速。

  1. 安装操作系统:

    • 推荐使用 Ubuntu 18.04/20.04,Linux 系统在深度学习领域有更好的兼容性和性能。
    • 如果你只有 Windows 电脑,也可以使用,但后续步骤会略有不同,且某些依赖库的安装可能更复杂。
  2. 安装 GPU 驱动、CUDA 和 cuDNN:

    • GPU 驱动: 从 NVIDIA 官网下载并安装对应型号的显卡驱动。
    • CUDA Toolkit: YOLOv5 依赖于 CUDA 进行 GPU 计算。需要安装与你的驱动和将要安装的 PyTorch 版本兼容的 CUDA(例如 CUDA 11.3)。
    • cuDNN: NVIDIA 提供的深度学习加速库,需要与 CUDA 版本匹配。
  3. 安装 Anaconda (推荐):

    • Anaconda 可以方便地管理不同的 Python 环境,避免包版本冲突。

    • 下载并安装 Anaconda 后,创建一个新的环境:

      bash 复制代码
      conda create -n yolov5 python=3.8
      conda activate yolov5
  4. 克隆 YOLOv5 仓库并安装依赖:

    • 打开终端,克隆 ultralytics 官方的 YOLOv5 仓库:

      bash 复制代码
      git clone https://github.com/ultralytics/yolov5.git
      cd yolov5
    • 安装所有必需的 Python 库。推荐使用 requirements.txt 文件:

      bash 复制代码
      pip install -r requirements.txt

      这会自动安装 PyTorch、TorchVision、OpenCV 等一系列库。

验证环境 :

在 YOLOv5 目录下,运行以下命令。如果能成功下载预训练权重并在屏幕上显示检测结果,说明你的环境配置成功了。

bash 复制代码
python detect.py --source data/images/zidane.jpg --weights yolov5s.pt --conf 0.25

步骤 2: 数据准备与标注

这是最耗费人力但至关重要的一步。你需要为你的特定任务准备图像数据并进行标注。

  1. 收集图像:

    • 收集大量包含你想要识别的物体的图像。图像应该尽可能多样化,包括不同的角度、光照条件、背景和物体姿态。
    • 一个好的起点是收集几百到上千张高质量图像。
  2. 标注数据:

    • 你需要使用标注工具在图像上框出物体,并为每个框分配一个类别标签。

    • 推荐工具 :

      • LabelImg : 一个简单易用的图形化标注工具,生成 YOLO 格式的 .txt 文件。
      • CVAT: 一个更强大的在线标注平台,支持团队协作,适合大规模项目。
    • 标注格式 : YOLO 使用一种特定的文本格式。对于每张图片 image.jpg,会有一个对应的 image.txt 文件,其中每一行代表一个物体:

      复制代码
      <class_id> <x_center> <y_center> <width> <height>
      • class_id: 物体类别的索引(从 0 开始)。
      • x_center, y_center, width, height: 归一化后的坐标(范围在 0 到 1 之间)。
  3. 组织数据集目录:

    • 将你的数据集按照以下结构组织,这是 YOLOv5 推荐的格式:

      复制代码
      /path/to/your/dataset
      ├── images
      │   ├── train
      │   │   ├── image1.jpg
      │   │   └── image2.jpg
      │   └── val
      │       ├── image3.jpg
      │       └── image4.jpg
      └── labels
          ├── train
          │   ├── image1.txt
          │   └── image2.txt
          └── val
              ├── image3.txt
              └── image4.txt
    • 训练集 (train): 用于训练模型的主要数据(通常占 80-90%)。

    • 验证集 (val): 用于在训练过程中评估模型性能,防止过拟合(通常占 10-20%)。


步骤 3: 配置文件修改

在开始训练前,你需要修改两个关键的配置文件。

  1. 创建数据集配置文件:

    • yolov5/data/ 目录下,复制一个现有的配置文件(如 coco128.yaml)并改名,例如 my_custom_data.yaml

    • 打开 my_custom_data.yaml 并修改以下内容:

      yaml 复制代码
      # train and val data paths
      train: /path/to/your/dataset/images/train  # 训练集图片目录的绝对路径
      val: /path/to/your/dataset/images/val    # 验证集图片目录的绝对路径
      
      # number of classes
      nc: 2  # 你的数据集有多少个类别 (例如,识别苹果和橙子,nc=2)
      
      # class names
      names: ['Apple', 'Orange']  # 类别名称列表,顺序必须和标注时的 class_id 对应
  2. 选择并修改模型配置文件:

    • YOLOv5 提供了多个不同大小的模型(yolov5s.yaml, yolov5m.yaml, yolov5l.yaml, yolov5x.yaml)。s 代表 small,模型最小,速度最快,但精度可能稍低。对于初学者,建议从 yolov5s.yaml 开始。
    • 打开你选择的模型配置文件(如 models/yolov5s.yaml)。
    • 只需要修改一个地方 : 将 nc: 80 (默认是 COCO 数据集的 80 个类别) 修改为你的数据集的类别数,例如 nc: 2

步骤 4: 开始训练

一切准备就绪后,就可以启动训练了。在 YOLOv5 根目录下运行以下命令:

bash 复制代码
python train.py --img 640 --batch 16 --epochs 100 --data my_custom_data.yaml --weights yolov5s.pt --cache

命令参数解释:

  • --img 640: 训练时将图像缩放至 640x640 像素。
  • --batch 16: 每个批次处理 16 张图片。这个值受限于你的 GPU 显存,显存越大,batch 可以设置得越大。如果显存不足,可以减小它,例如 --batch 8--batch 4
  • --epochs 100: 训练将进行 100 个轮次。一个轮次意味着模型将学习完整个训练数据集一次。
  • --data my_custom_data.yaml: 指定你刚刚创建的数据集配置文件。
  • --weights yolov5s.pt: 指定预训练权重。使用 yolov5s.pt 可以让模型在 COCO 数据集上的知识基础上进行迁移学习 ,这会极大地加快训练速度并提高最终性能。如果你想从零开始训练(不推荐),可以使用 --weights ''
  • --cache: 将数据集缓存到内存中,加速训练。

训练过程中:

  • 你会看到一个进度条,显示当前的轮次、损失值(loss)等信息。
  • 训练过程中的结果(如模型权重、验证集上的预测图像)会保存在 runs/train/exp/ 目录下(每次运行 train.pyexp 会递增为 exp1, exp2 等)。
  • 训练结束后,最佳的模型权重会被保存为 best.pt,最后一轮的权重为 last.pt

步骤 5: 使用训练好的模型进行检测

训练完成后,你可以使用 best.pt 这个最佳模型来对新的图片或视频进行预测。

bash 复制代码
python detect.py --source path/to/your/test_image.jpg --weights runs/train/exp/weights/best.pt --conf 0.4

命令参数解释:

  • --source path/to/your/test_image.jpg: 指定输入源。可以是单张图片、一个图片目录、一段视频,甚至是电脑的摄像头 (--source 0)。
  • --weights runs/train/exp/weights/best.pt: 指定你训练好的模型权重文件的路径。
  • --conf 0.4: 设置置信度阈值。只有检测框的置信度高于 0.4 时,才会被显示出来。

查看结果 :

检测结果图像或视频会保存在 runs/detect/exp/ 目录下。打开后,你就能看到你的模型在新数据上的识别效果了!

后续优化

模型第一次训练的结果可能并不完美。你可以通过以下方式进行迭代优化:

  1. 分析结果 : 查看 runs/train/exp/ 目录下的 results.png,它展示了训练过程中各项指标的变化曲线。如果验证集的指标(如 mAP)不再提升甚至下降,说明可能发生了过拟合。
  2. 增加数据: 收集更多、更具多样性的图像数据是最有效的改进方法。
  3. 检查标注: 回顾你的标注数据,确保没有错误(如漏标、错标、框位置不准确)。
  4. 调整超参数 : 你可以修改 data/hyps/hyp.scratch-low.yaml 等超参数文件,然后在训练时通过 --hyp 参数指定它,以探索更好的模型性能。
  5. 尝试更大的模型 : 如果 yolov5s 的精度不够,可以尝试 yolov5myolov5l,它们拥有更深、更宽的网络,能学习到更复杂的特征,但训练和推理速度会变慢。

按照以上步骤,你就可以成功地使用 YOLOv5 训练出一个属于你自己的物体识别模型了。祝你成功!

相关推荐
会飞的老朱5 小时前
医药集团数智化转型,智能综合管理平台激活集团管理新效能
大数据·人工智能·oa协同办公
聆风吟º6 小时前
CANN runtime 实战指南:异构计算场景中运行时组件的部署、调优与扩展技巧
人工智能·神经网络·cann·异构计算
Codebee8 小时前
能力中心 (Agent SkillCenter):开启AI技能管理新时代
人工智能
聆风吟º9 小时前
CANN runtime 全链路拆解:AI 异构计算运行时的任务管理与功能适配技术路径
人工智能·深度学习·神经网络·cann
uesowys9 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
AI_56789 小时前
AWS EC2新手入门:6步带你从零启动实例
大数据·数据库·人工智能·机器学习·aws
User_芊芊君子9 小时前
CANN大模型推理加速引擎ascend-transformer-boost深度解析:毫秒级响应的Transformer优化方案
人工智能·深度学习·transformer
智驱力人工智能10 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
qq_1601448710 小时前
亲测!2026年零基础学AI的入门干货,新手照做就能上手
人工智能
Howie Zphile10 小时前
全面预算管理难以落地的核心真相:“完美模型幻觉”的认知误区
人工智能·全面预算