实例分割数据集概览#
实例分割是计算机视觉任务,旨在识别并勾勒图像中的单个物体。本指南概述 Ultralytics YOLO 支持的实例分割数据集格式,并介绍如何准备、转换和使用这些数据集来训练模型。
支持的数据集格式#
Ultralytics YOLO 格式#
用于训练 YOLO 分割模型的数据集标签格式如下:
- 每张图像对应一个文本文件:数据集中的每张图像都有一个对应的文本文件,文件名与图像文件相同,扩展名为“.txt”。
- 每个物体占一行:文本文件中的每一行对应图像中的一个物体实例。
- 每行包含物体信息:每一行包含有关该物体实例的以下信息:
- 物体类别索引:表示物体类别的整数(例如,0 表示 person,1 表示 car,依此类推)。
- 物体多边形坐标:
(x, y)点用于勾勒物体掩码,坐标归一化到 0 到 1 之间。
分割数据集文件中单行的格式如下:
<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>在此格式中,<class-index> 是物体的类别索引,<x1> <y1> <x2> <y2> ... <xn> <yn> 是物体分割掩码的归一化多边形坐标(数值相对于图像宽度和高度,范围为 [0, 1])。坐标之间以空格分隔。
以下示例展示了单张图像对应的 YOLO 数据集格式,其中包含两个物体,分别由 3 个点和 5 个点组成的分割区域构成。
0 0.681 0.485 0.670 0.487 0.676 0.487
1 0.504 0.000 0.501 0.004 0.498 0.004 0.493 0.010 0.492 0.0104- 每一行的长度不必相同。
- 每个分割标签必须至少包含 3 个
(x, y)点:<class-index> <x1> <y1> <x2> <y2> <x3> <y3> - 每个对象都需要一个多边形。检测格式的行(
<class-index> <x_center> <y_center> <width> <height>)不包含多边形;如果分割数据集中的边界框数量和多边形数量不一致,加载标签时就会报错ValueError。
数据集 YAML 格式#
Ultralytics 框架使用 YAML 文件格式定义用于训练分割模型的数据集和模型配置。以下是定义分割数据集时使用的 YAML 格式示例:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg
# Example usage: yolo train data=coco8-seg.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco8-seg ← downloads here (1 MB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8-seg # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Classes
names:
0: person
1: bicycle
2: car
3: motorcycle
4: airplane
5: bus
6: train
7: truck
8: boat
9: traffic light
10: fire hydrant
11: stop sign
12: parking meter
13: bench
14: bird
15: cat
16: dog
17: horse
18: sheep
19: cow
20: elephant
21: bear
22: zebra
23: giraffe
24: backpack
25: umbrella
26: handbag
27: tie
28: suitcase
29: frisbee
30: skis
31: snowboard
32: sports ball
33: kite
34: baseball bat
35: baseball glove
36: skateboard
37: surfboard
38: tennis racket
39: bottle
40: wine glass
41: cup
42: fork
43: knife
44: spoon
45: bowl
46: banana
47: apple
48: sandwich
49: orange
50: broccoli
51: carrot
52: hot dog
53: pizza
54: donut
55: cake
56: chair
57: couch
58: potted plant
59: bed
60: dining table
61: toilet
62: tv
63: laptop
64: mouse
65: remote
66: keyboard
67: cell phone
68: microwave
69: oven
70: toaster
71: sink
72: refrigerator
73: book
74: clock
75: vase
76: scissors
77: teddy bear
78: hair drier
79: toothbrush
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.ziptrain、val 和 test 字段分别指向训练、验证和测试图像。每个字段都可以接受一个目录、多个目录的列表,或一个 *.txt 文件,其中每行列出一个图像路径(以 ./ 开头的路径相对于 *.txt 文件解析)。使用 *.txt 文件可以从目录中选取部分图像进行训练、跳过未标注图像,或将多个来源的图像合并到一个数据集划分中。
path: datasets/coco8-seg # dataset root
train: train.txt # a directory, a list e.g. [images/a, images/b], or a *.txt file
val: val.txt
names:
0: personnames 是一个类别名称字典。名称的顺序应与 YOLO 数据集文件中对象类别索引的顺序一致。
用法#
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo26n-seg.pt") # 加载预训练模型(推荐用于训练)
# 训练模型
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)支持的数据集#
Ultralytics YOLO 支持多种用于实例分割任务的数据集。以下是最常用的数据集列表。其中大多数数据集也托管在 Ultralytics Platform 上,你可以浏览图像和标注、查看数据集统计信息,并克隆数据集以进行云端训练。
- Carparts-seg:这是一个专注于汽车零部件分割的专用数据集,非常适合汽车应用。它包含各种车辆,并对各个汽车部件进行了详细标注。
- COCO:这是一个全面的数据集,可用于目标检测、分割和图像描述,涵盖广泛类别的 20 多万张标注图像。
- COCO8-seg:这是 COCO 中一个包含 8 张图像的小型子集,专为快速测试分割模型训练而设计,非常适合在
ultralytics仓库中进行 CI 检查和工作流验证。 - COCO128-seg:这是一个较小的数据集,用于实例分割任务,包含 COCO 中 128 张图像的子集及其分割标注。
- Crack-seg:这是一个针对各种表面裂缝分割的数据集。它对基础设施维护和质量控制至关重要,提供了详细图像,可用于训练模型识别结构缺陷。
- Package-seg:这是一个专门用于分割不同类型包装材料和形状的数据集。它尤其适用于物流和仓库自动化,有助于开发包裹处理和分拣系统。
添加你自己的数据集#
如果你有自己的数据集,并希望使用 Ultralytics YOLO 格式训练分割模型,请确保数据集遵循上文“Ultralytics YOLO 格式”部分指定的格式。将标注转换为所需格式,并在 YAML 配置文件中指定路径、类别数量和类别名称。将 images/ 和 labels/ 保持为同级的独立文件夹,并确保子文件夹结构一致;将标签 .txt 文件放入图像文件夹可能导致模型漏掉标签。
转换或迁移标签格式#
将 COCO 数据集格式转换为 YOLO 格式#
你可以使用以下代码片段,轻松地将常用 COCO 数据集格式的标签转换为 YOLO 格式:
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)你可以使用此转换工具,将 COCO 数据集或任何 COCO 格式的数据集转换为 Ultralytics YOLO 格式。
请记得仔细检查你要使用的数据集是否与你的模型兼容,以及是否遵循必要的格式规范。格式正确的数据集对于成功训练分割模型至关重要。
自动标注#
自动标注是一项重要功能,可让你使用预训练检测模型生成分割数据集。无需手动标注,它就能让你快速、准确地标注大量图像,节省时间和精力。
使用检测模型生成分割数据集#
要使用 Ultralytics 框架自动标注数据集,你可以按如下方式使用 auto_annotate 函数:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | str | 必需 | 包含待标注或分割目标图像的目录路径。 |
det_model | str | 'yolo26x.pt' | 用于初始对象检测的 YOLO 检测模型路径。 |
sam_model | str | 'sam_b.pt' | 用于分割的 SAM 模型路径(支持 SAM、SAM 2、MobileSAM 和 SAM 3 权重)。 |
device | str | '' | 计算设备(例如 'cuda:0'、'cpu',或 '' 表示自动检测设备)。 |
conf | float | 0.25 | 用于过滤低置信度检测结果的 YOLO 检测置信度阈值。 |
iou | float | 0.45 | 用于通过非极大值抑制过滤重叠框的 IoU 阈值。 |
imgsz | int | 640 | 图像缩放输入尺寸(如有需要,会向上取整为 32 的倍数)。 |
max_det | int | 300 | 为提高内存效率,每张图像的最大检测数。 |
classes | list[int] | None | 要检测的类别索引列表(例如,[0, 1] 表示人和自行车)。 |
output_dir | str | None | 标注结果的保存目录(默认:同级目录中的 <data>_auto_annotate_labels)。 |
auto_annotate 函数接收图像路径,以及用于指定预训练检测模型的可选参数,例如 YOLO26、YOLO11 或其他模型,以及分割模型,例如 SAM、SAM 2、MobileSAM 或 SAM 3,还可以指定运行模型的设备,以及保存标注结果的输出目录。
借助预训练模型的强大能力,自动标注可以显著减少创建高质量分割数据集所需的时间和精力。此功能对于处理大型图像集的研究人员和开发者尤其有用,因为它能让他们专注于模型开发和评估,而不是手动标注。
可视化数据集注释#
训练模型之前,通常最好先可视化数据集标注,确保标注正确。Ultralytics 提供了一个用于此目的的实用函数。此函数只读取检测格式的边界框标签(<class-index> <x_center> <y_center> <width> <height>),因此无法解析分割多边形标签文件:
from ultralytics.data.utils import visualize_image_annotations
label_map = { # 定义包含所有已注释类别标签的标签映射。
0: "person",
1: "car",
}
# Visualize
visualize_image_annotations(
"path/to/image.jpg", # 输入图像路径。
"path/to/annotations.txt", # 图像的注释文件路径。
label_map,
)此函数会绘制边界框,使用类别名称标记对象,并调整文本颜色以提高可读性,帮助你在训练前发现并修正标注错误。
将分割掩码转换为 YOLO 格式#
如果你有灰度掩码图像,其中每个像素值等于类别索引 + 1(0 表示背景),可以使用以下方法将其转换为 YOLO 分割格式:
from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
# 适用于 COCO 等包含 80 个类别的数据集
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)此实用工具会将掩码图像转换为 YOLO 分割格式,并保存到指定的输出目录。
常见问题#
Ultralytics YOLO 支持多种实例分割数据集格式,其中主要格式是其自有的 Ultralytics YOLO 格式。数据集中的每张图像都需要对应一个文本文件,其中包含按多行组织的对象信息(每个对象占一行),列出类别索引和归一化后的多边形坐标。如需了解 YOLO 数据集格式的详细说明,请参阅实例分割数据集概览。
借助 Ultralytics 工具,将 COCO 格式的标注转换为 YOLO 格式非常简单。你可以使用
ultralytics.data.converter模块中的convert_coco函数:from ultralytics.data.converter import convert_coco convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)此脚本会将你的 COCO 数据集标注转换为所需的 YOLO 格式,使其适用于训练 YOLO 模型。如需了解详情,请参阅迁移或转换标签格式。
要使用 Ultralytics 准备 YOLO 模型训练所需的 YAML 文件,你需要定义数据集路径和类别名称。以下是 YAML 配置示例:
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license # COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics # Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg # Example usage: yolo train data=coco8-seg.yaml # parent # ├── ultralytics # └── datasets # └── coco8-seg ← downloads here (1 MB) # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: coco8-seg # dataset root dir train: images/train # train images (relative to 'path') 4 images val: images/val # val images (relative to 'path') 4 images test: # test images (optional) # Classes names: 0: person 1: bicycle 2: car 3: motorcycle 4: airplane 5: bus 6: train 7: truck 8: boat 9: traffic light 10: fire hydrant 11: stop sign 12: parking meter 13: bench 14: bird 15: cat 16: dog 17: horse 18: sheep 19: cow 20: elephant 21: bear 22: zebra 23: giraffe 24: backpack 25: umbrella 26: handbag 27: tie 28: suitcase 29: frisbee 30: skis 31: snowboard 32: sports ball 33: kite 34: baseball bat 35: baseball glove 36: skateboard 37: surfboard 38: tennis racket 39: bottle 40: wine glass 41: cup 42: fork 43: knife 44: spoon 45: bowl 46: banana 47: apple 48: sandwich 49: orange 50: broccoli 51: carrot 52: hot dog 53: pizza 54: donut 55: cake 56: chair 57: couch 58: potted plant 59: bed 60: dining table 61: toilet 62: tv 63: laptop 64: mouse 65: remote 66: keyboard 67: cell phone 68: microwave 69: oven 70: toaster 71: sink 72: refrigerator 73: book 74: clock 75: vase 76: scissors 77: teddy bear 78: hair drier 79: toothbrush # Download script/URL (optional) download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zip请根据你的数据集更新路径和类别名称。如需了解详情,请查看数据集 YAML 格式部分。
Ultralytics YOLO 的自动标注功能可以使用预训练检测模型为数据集生成分割标注,大幅减少手动标注的需求。你可以按如下方式使用
auto_annotate函数:from ultralytics.data.annotator import auto_annotate auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt") # or sam_model="mobile_sam.pt"此函数可自动执行标注流程,使其更快速、更高效。如需了解详情,请参阅自动标注参考。