5.1 KiB
5.1 KiB
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 导出
- 在 CVAT 中选择任务/作业
- 点击 "Export job as a dataset"
- 选择 "Ultralytics YOLO Segmentation 1.0"
- 下载导出的数据集
数据集目录结构
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: 最后一轮的模型
注意事项
- 模型选择:必须使用分割模型(
-seg后缀),如yolov8n-seg.pt - 标注格式:确保标注是多边形格式(坐标数 > 5)
- 文件名对应:标注文件名必须与图片文件名一致(仅扩展名不同)
- 坐标归一化:所有坐标必须在 [0, 1] 范围内
- GPU加速:如果有GPU,将
device设置为"cuda"或"0"可以大幅加速训练
常见问题
Q: 如何判断标注是分割格式还是检测格式?
A: 分割格式的坐标数量 > 5(class_id + 至少6个坐标值),检测格式只有5个值(class_id + 4个边界框坐标)
Q: 训练时提示找不到模型文件?
A: 首次使用时会自动下载,确保网络连接正常。也可以手动下载后放到项目根目录。
Q: 如何可视化分割结果?
A: 使用 test_seg_label.py 脚本,提供图片路径即可可视化标注。
Q: 训练速度很慢?
A: 如果有GPU,将 device="cpu" 改为 device="cuda"。也可以减小 batch 大小或 imgsz 尺寸。