Ultralytics YOLO27:

实例分割数据集概览#

实例分割是一项计算机视觉任务,涉及识别和描绘图像中的各个对象。本指南概述了 Ultralytics YOLO 支持的实例分割任务数据集格式,并介绍如何准备、转换和使用这些数据集来训练你的模型。

支持的数据集格式#

Ultralytics YOLO 格式#

用于训练 YOLO 分割模型的数据集标签格式如下:

  1. 每张图像对应一个文本文件:数据集中的每张图像都有一个与图像文件同名且扩展名为 ".txt" 的对应文本文件。
  2. 每个对象占一行:文本文件中的每一行对应图像中的一个对象实例。
  3. 每行的对象信息:每一行包含以下对象实例信息:
    • 对象类别索引:表示对象类别的整数(例如,0 表示人,1 表示汽车,等等)。
    • 物体多边形坐标:勾勒物体掩码轮廓的 (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/cfg/datasets/coco8-seg.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

trainvaltest 字段分别指向训练、验证和测试图像。每个字段都可以接受一个目录、目录列表,或列出每行一个图像路径的 *.txt 文件(以 ./ 开头的路径会相对于 *.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: person

names 是一个类别名称字典。名称的顺序应与 YOLO 数据集文件中对象类别索引的顺序一致。

使用方法#

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-seg.pt")  # load a pretrained model (recommended for training)

# Train the model
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")
参数类型默认值描述
datastr必需包含用于标注或分割的目标图像的目录路径。
det_modelstr'yolo26x.pt'用于初始对象检测的 YOLO 检测模型路径。
sam_modelstr'sam_b.pt'用于分割的 SAM 模型路径(支持 SAM、SAM 2、MobileSAM 和 SAM 3 权重)。
devicestr''计算设备(例如,'cuda:0'、'cpu',或使用 '' 自动检测设备)。
conffloat0.25用于过滤低置信度检测结果的 YOLO 检测置信度阈值。
ioufloat0.45用于非极大值抑制以过滤重叠框的 IoU 阈值。
imgszint640用于调整图像大小的输入尺寸(必须是 32 的倍数)。
max_detint300每张图像的最大检测数,以提高内存使用效率。
classeslist[int]None要检测的类别索引列表(例如,[0, 1] 表示人和自行车)。
output_dirstrNone用于保存标注的目录(默认:<data>_auto_annotate_labels 所在目录的同级目录)。

auto_annotate 函数接收图像路径,以及用于指定预训练检测模型(例如 YOLO26YOLO11 或其他模型)和分割模型(例如 SAMSAM 2MobileSAMSAM 3)的可选参数,以及运行模型的设备和用于保存标注结果的输出目录。

借助预训练模型的能力,自动标注可以显著减少创建高质量分割数据集所需的时间和精力。此功能特别适合处理大型图像集合的研究人员和开发者,因为它让他们能够专注于模型开发和评估,而不是手动标注。

可视化数据集标注#

在训练模型之前,可视化数据集标注通常很有帮助,以确保标注正确。Ultralytics 提供了用于此目的的实用函数:

from ultralytics.data.utils import visualize_image_annotations

label_map = {  # Define the label map with all annotated class labels.
    0: "person",
    1: "car",
}

# Visualize
visualize_image_annotations(
    "path/to/image.jpg",  # Input image path.
    "path/to/annotations.txt",  # Annotation file path for the image.
    label_map,
)

此函数会绘制边界框、使用类别名称标注对象,并调整文本颜色以提高可读性,帮助你在训练前识别并纠正标注错误。

将分割掩码转换为 YOLO 格式#

如果你有二进制格式的分割掩码,可以使用以下方法将其转换为 YOLO 分割格式:

from ultralytics.data.converter import convert_segment_masks_to_yolo_seg

# For datasets like COCO with 80 classes
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 格式非常简单。你可以使用 convert_coco 模块中的 ultralytics.data.converter 函数:

    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"

    此函数可自动完成标注流程,使其更快速、更高效。有关详细信息,请查看自动标注参考

评论