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 训练出一个属于你自己的物体识别模型了。祝你成功!

相关推荐
1***Q7842 小时前
PyTorch图像分割实战,U-Net模型训练与部署
人工智能·pytorch·python
阿十六2 小时前
OUC AI Lab 第六章:基于卷积的注意力机制
人工智能
努力の小熊2 小时前
基于tensorflow框架的MSCNN-LSTM模型在CWRU轴承故障诊断的应用
人工智能·tensorflow·lstm
AI即插即用2 小时前
即插即用涨点系列 (八):AMDNet 详解!AAAI 2025 SOTA,MLP 融合多尺度分解(MDM)与 AMS 的涨点新范式。
人工智能·pytorch·深度学习·目标检测·计算机视觉·transformer
脑极体2 小时前
穿越沙海:中国AI的中东远征
人工智能·搜索引擎
jn100105373 小时前
【概念科普】原位CT(In-situ CT)技术详解:从定义到应用的系统梳理
人工智能
禾风wyh3 小时前
(ICLR 2019)APPNP传播用 PageRank,不用神经网络!
人工智能·深度学习·神经网络
Keep_Trying_Go3 小时前
论文STEERER人群计数,车辆计数以及农作物计数算法详解(pytorch)
人工智能·pytorch·python
gzu_013 小时前
基于昇腾 配置pytorch环境
人工智能·pytorch·python