jjsos_JJdetection/分割训练说明.md

5.1 KiB
Raw Permalink Blame History

YOLO 分割模型训练说明

概述

本项目现在支持使用多边形标注进行实例分割训练,可以精确框选目标,避免矩形框包含非目标区域的问题。

文件说明

1. train_segmentation.py - 分割模型训练脚本

专门用于训练YOLO分割模型支持多边形标注

使用方法:

python train_segmentation.py

参数说明:

  • dataset_path: 数据集配置文件路径(默认: datasets/搭电设备/data.yaml
  • model_name: 预训练模型(默认: yolov8n-seg.pt
    • 可选: yolov8n-seg.pt, yolov8s-seg.pt, yolov8m-seg.pt, yolov8l-seg.pt, yolov8x-seg.pt
    • 或: yolo11n-seg.pt, yolo11s-seg.pt
  • epochs: 训练轮数(默认: 100
  • batch: 批次大小(默认: 8
  • imgsz: 图片尺寸(默认: 640
  • device: 设备类型(默认: "cpu"GPU使用 "cuda""0"

2. verify_seg_labels.py - 标注格式验证工具

批量验证YOLO分割标注格式是否正确

使用方法:

# 验证指定目录的标注文件
python verify_seg_labels.py datasets/搭电设备/train/labels datasets/搭电设备/train/images

# 或直接运行(会验证搭电设备数据集)
python verify_seg_labels.py

功能:

  • 检查标注格式是否正确
  • 验证坐标是否在有效范围内 [0, 1]
  • 统计多边形顶点数量
  • 可选:可视化标注结果

3. test_seg_label.py - 单个文件测试工具

快速测试单个标注文件

使用方法:

# 仅验证标注文件
python test_seg_label.py datasets/搭电设备/train/labels/your_file.txt

# 验证并可视化
python test_seg_label.py datasets/搭电设备/train/labels/your_file.txt datasets/搭电设备/train/images/your_file.jpg

4. train_jumper_cable.py - 智能训练脚本(已更新)

自动检测标注格式,选择相应的模型

  • 如果检测到多边形格式(坐标数 > 5使用分割模型
  • 如果检测到边界框格式(坐标数 = 5使用检测模型

标注格式说明

YOLO 分割格式(多边形)

每个 .txt 文件格式:

class_id x1 y1 x2 y2 x3 y3 x4 y4 ...

示例:

0 0.666693 0.597539 0.600534 0.649248 0.427135 0.689463 0.287852 0.680586 ...

说明:

  • class_id: 类别ID整数从0开始
  • x1 y1 x2 y2 ...: 归一化的多边形顶点坐标0-1之间
  • 至少需要3个点6个坐标值

从 CVAT 导出

  1. 在 CVAT 中选择任务/作业
  2. 点击 "Export job as a dataset"
  3. 选择 "Ultralytics YOLO Segmentation 1.0"
  4. 下载导出的数据集

数据集目录结构

datasets/
  └── 搭电设备/
      ├── data.yaml          # 数据集配置
      ├── train/
      │   ├── images/        # 训练图片
      │   └── labels/        # 训练标注(.txt文件
      └── val/
          ├── images/        # 验证图片
          └── labels/        # 验证标注(.txt文件

data.yaml 配置示例

train: train/images
val: val/images
nc: 2
names: ['JumperCable', 'NoJumperCable']

训练步骤

1. 准备数据

  • 从 CVAT 导出为 "Ultralytics YOLO Segmentation 1.0" 格式
  • 将数据组织到正确的目录结构
  • 创建或更新 data.yaml 配置文件

2. 验证标注

# 验证标注格式
python verify_seg_labels.py datasets/搭电设备/train/labels datasets/搭电设备/train/images

3. 开始训练

# 使用分割模型训练
python train_segmentation.py

或修改 train_segmentation.py 中的参数:

train_segmentation_model(
    dataset_path="datasets/你的数据集/data.yaml",
    model_name="yolov8n-seg.pt",
    epochs=100,
    batch=8,
    imgsz=640,
    device="cuda"  # 如果有GPU
)

4. 查看结果

训练完成后,模型保存在 runs/segment/train/weights/ 目录下:

  • best.pt: 最佳模型
  • last.pt: 最后一轮的模型

注意事项

  1. 模型选择:必须使用分割模型(-seg 后缀),如 yolov8n-seg.pt
  2. 标注格式:确保标注是多边形格式(坐标数 > 5
  3. 文件名对应:标注文件名必须与图片文件名一致(仅扩展名不同)
  4. 坐标归一化:所有坐标必须在 [0, 1] 范围内
  5. GPU加速如果有GPUdevice 设置为 "cuda""0" 可以大幅加速训练

常见问题

Q: 如何判断标注是分割格式还是检测格式?

A: 分割格式的坐标数量 > 5class_id + 至少6个坐标值检测格式只有5个值class_id + 4个边界框坐标

Q: 训练时提示找不到模型文件?

A: 首次使用时会自动下载,确保网络连接正常。也可以手动下载后放到项目根目录。

Q: 如何可视化分割结果?

A: 使用 test_seg_label.py 脚本,提供图片路径即可可视化标注。

Q: 训练速度很慢?

A: 如果有GPUdevice="cpu" 改为 device="cuda"。也可以减小 batch 大小或 imgsz 尺寸。

参考