开发者-导航 猿导航

YOLOv5 模型训练记录

发布时间:

Ultralytics YOLOv5 🚀 是由 Ultralytics 开发的尖端、达到业界顶尖水平(SOTA)的计算机视觉模型。基于 PyTorch 框架,YOLOv5 以其易用性、速度和准确性而闻名。它融合了广泛研究和开发的见解与最佳实践,使其成为各种视觉 AI 任务的热门选择,包括目标检测,图像分割和图像分类

目录

预训练模型和数据格式要求
  1. 数据格式要求:

    YOLOv5 使用的标准数据格式是 YOLO 格式。对于每张图像,需要创建一个与之对应的标签文件,标签文件使用 .txt 格式,其中包含该图像中所有物体的位置信息。

    • 图像格式:YOLOv5 支持 JPEG、PNG、BMP 等常见图像格式。
    • 标签格式:每个图像有一个对应的 .txt 标签文件,文件的名称与图像文件的名称相同。例如:image1.jpg 对应 image1.txt

    标签文件的每一行描述一个物体的边界框(bounding box)。每一行的格式为:

    <class_id> <x_center> <y_center> <width> <height>
    • <class_id>:物体类别的编号,从 0 开始。例如:第一个类别是 0,第二个是 1,以此类推。
    • <x_center>, <y_center>:边界框中心点的坐标,归一化到 [0, 1] 范围,即 (x_center / image_width)(y_center / image_height)
    • <width>, <height>:边界框的宽度和高度,归一化到 [0, 1] 范围,即 (box_width / image_width)(box_height / image_height)

    示例
    对于一张图像,假设图像的分辨率是 640x480,图中有一个物体(例如,线束圈),该物体的边界框为 (x1, y1, x2, y2) = (100, 150, 200, 250)。那么对应的标签文件内容应该是:

    0 0.25 0.5 0.15 0.21
    

    其中,0 是类别编号,x_center=0.25y_center=0.5width=0.15height=0.21 分别是归一化后的宽度和高度。

  2. 如何标注图片:
    标注图像是为训练模型提供必要数据的过程。以下是常见的标注工具:

    • LabelImg:一个开源的图像标注工具,支持 YOLO 格式的标注。你可以手动绘制矩形框并标注物体类别,软件会生成对应的 .txt 文件。
  3. 图像分辨率要求:

    • 推荐分辨率:YOLOv5 在训练时对输入图像的分辨率没有严格要求,通常推荐将图像调整到 640x640 或 416x416。

      • 在训练过程中,YOLOv5 会自动将图像缩放到指定的大小。通常,较大的图像分辨率会带来更高的精度,但也需要更多的计算资源和内存。
    • 最大尺寸:YOLOv5 可以处理较大的图像,但需要注意计算资源,过大的图像会增加内存和计算负担。

    • 自适应输入:YOLOv5 支持自适应输入尺寸,如果图像不是标准大小,它会进行自动填充或裁剪以适配训练模型。

  4. 训练数据准备

    • 数据集划分:通常,数据集分为训练集、验证集和测试集。一般情况下:

      • 训练集:80% 的数据用于训练。
      • 验证集:10% 的数据用于验证。
      • 测试集:10% 的数据用于最终测试。
    • 文件结构

      /dataset
          /images
              /train
              /val
              /test
          /labels
              /train
              /val
              /test
  5. YOLOv5 数据集的组织:

    • labels 文件夹:与 images 文件夹对应,里面存放每张图像的 .txt 标签文件。

    • 配置文件:YOLOv5 使用 .yaml 配置文件来定义数据集的信息,包括类别名称、数据集路径等。
      示例:

      train: /path/to/train/images
      val: /path/to/val/images
      
      nc: 2  # 类别数
      names: ['line_bundle', 'other_object']  # 类别名称

一、准备数据 #

收集图片数据,进行图片标注,图片格式要求,尽量使用大小一致的图片

二、标注工具 #

labelImg 需要 python 3.0 以上版本安装:

pip3 install labelImg

labelImg

常用快捷键:

三、创建数据集 #

目录结构:

数据集 datasets
datasets
├── wiring
│   ├── images
│   │   ├── train
│   │   │   ├── 00000001.jpg (63959B)
│   │   │   ├── 00000002.jpg (68349B)
│   │   │   ├── 00000003.jpg (67362B)
│   │   │   ├── 00000004.jpg (67151B)
│   │   │   └── ...
│   │   └── val
│   │       ├── 00000005.jpg (63959B)
│   │       ├── 00000006.jpg (68349B)
│   │       ├── 00000007.jpg (67362B)
│   │       ├── 00000008.jpg (67151B)
│   │       └── ...
│   └── labels
│       ├── train
│       │   ├── 00000001.txt (38B)
│       │   ├── 00000002.txt (38B)
│       │   ├── 00000003.txt (38B)
│       │   ├── 00000004.txt (38B)
│       │   └── ...
│       ├── val
│       │   ├── 00000005.txt (114B)
│       │   ├── 00000006.txt (114B)
│       │   ├── 00000007.txt (76B)
│       │   ├── 00000008.txt (38B)
│       │   └── ...
├── wiring.yaml (193B)
配置文件 wiring.yaml
train: ./datasets/wiring/images/train
val: ./datasets/wiring/images/val

nc: 2  # 类别数
names: ['L','T']

四、下载安装 YOLOv5 #

# 克隆 YOLOv5 仓库
git clone https://github.com/ultralytics/yolov5

# 导航到克隆的目录
cd yolov5

# 安装所需的包
pip install -r requirements.txt

将第三步的 datasets 所有数据拷贝到 yolov5 根目录

五、开始训练 #

最好使用显卡推理,默认有显卡会使用显卡推理,没有使用 CPU 推理,显卡推理需安装的软件和 cuda版本对应。

使用 nvidia-smi 查询版本信息:

nvidia-smi
---------------------------------------------------------------------------------------+
| NVIDIA-SMI 539.28                 Driver Version: 539.28       CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                     TCC/WDDM  | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  Tesla P40                    TCC   | 00000000:0B:00.0 Off |                  Off |
| N/A   33C    P8               9W / 250W |      8MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------+

+---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
|  No running processes found                                                           |
+---------------------------------------------------------------------------------------+

安装兼容 CUDA Version: 12.2 相应的软件:

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

训练命令 #

Window 环境下,yolov5 根目录 cmd 执行 bash
python train.py --img 1024 --batch 32 --epochs 150 ^
--data datasets/wiring.yaml ^
--weights yolov5s.pt ^
--name wiring ^
--cache ^
--device 0

扩展 #

开始 模型训练 使用 train.py 脚本。必要的参数包括:

六、开始测试 #

模型保存在 runs/train/wiring_exp/weights/best.pt

推理测试 #

推理结果保存在: runs/detect/exp

python detect.py --weights runs/train/wiring_exp/weights/best.pt --img 640 --source test.jpg

扩展 #

# 使用网络摄像头运行推理
python detect.py --weights yolov5s.pt --source 0

# 对本地图像文件运行推理
python detect.py --weights yolov5s.pt --source img.jpg

# 对本地视频文件运行推理
python detect.py --weights yolov5s.pt --source vid.mp4

# 对屏幕截图运行推理
python detect.py --weights yolov5s.pt --source screen

# 对图像目录运行推理
python detect.py --weights yolov5s.pt --source path/to/images/

# 对列出图像路径的文本文件运行推理
python detect.py --weights yolov5s.pt --source list.txt

# 对列出流 URL 的文本文件运行推理
python detect.py --weights yolov5s.pt --source list.streams

# 使用 glob 模式对图像运行推理
python detect.py --weights yolov5s.pt --source 'path/to/*.jpg'

# 对 YouTube 视频 URL 运行推理
python detect.py --weights yolov5s.pt --source 'https://youtu.be/LNwODJXcvt4'

# 对 RTSP、RTMP 或 HTTP 流运行推理
python detect.py --weights yolov5s.pt --source 'rtsp://example.com/media.mp4'

📚 参考 #