在训练YOLO分割模型时,需要对数据集中的每张图片进行标注,以提供模型学习所需的对象信息。以下是数据标注的具体格式和步骤,以确保模型能够正确理解和识别图像中的对象。
对于数据集中的每张图片,都应有一个与之同名的文本文件,该文件的扩展名为".txt"。每个对象实例在文本文件中占据一行,包含对象的类别索引和边界坐标。具体格式如下:
<类别索引> <x1> <y1> <x2> <y2> ... <xn> <yn>
其中,<类别索引>代表对象的类别编号,<x1> <y1> <x2> <y2> ... <xn> <yn>是对象分割掩码的边界坐标,这些坐标值需要归一化到0和1之间。坐标之间以空格分隔。
Ultralytics框架使用YAML文件格式来定义训练检测模型时的数据集和模型配置。以下是定义检测数据集的YAML格式示例:
# 训练/验证/测试集可以是1) dir: 路径/imgs, 2) file: 路径/imgs.txt, 或3) list: [路径/imgs1, 路径/imgs2, ..]
path:
../datasets/coco8-seg
# 数据集根目录
train:
images/train
# 训练图片(相对于'path')4张图片
val:
images/val
# 验证图片(相对于'path')4张图片
test:
# 测试图片(可选)
# 类别(80个COCO类别)
names:
0:
person
1:
bicycle
2:
car
# ...
在YAML配置文件中,train和val字段指定了包含训练和验证图片的目录路径,names是一个类别名称的字典,其顺序应与YOLO数据文件中的类别索引顺序相匹配。
以下是使用Python CLI和Ultralytics YOLO库来加载模型并进行训练的示例代码:
from ultralytics import YOLO
# 加载模型
model = YOLO("yolo11n-seg.pt")
# 使用预训练模型进行训练(推荐)
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)
# 从预训练的*.pt模型开始训练
yolo segment train data=coco8-seg.yaml model=yolo11n-seg.pt epochs=100 imgsz=640
在这段代码中,首先导入了YOLO库,然后加载了一个预训练的模型,并使用指定的数据集和参数进行训练。
UltralyticsYOLO支持多种数据集格式,主要包括:
如果有自己的数据集,并希望使用UltralyticsYOLO格式进行分割模型训练,请确保它遵循上述"Ultralytics YOLO格式"中指定的格式。将注释转换为所需格式,并在YAML配置文件中指定路径、类别数量和类别名称。
如果数据集标签格式不是Ultralytics YOLO格式,可以使用以下Python代码片段将流行的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框架进行自动标注,可以使用以下Python代码中的auto_annotate函数:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
auto_annotate函数接受图片路径以及可选参数,用于指定预训练的检测和SAM分割模型、运行模型的设备以及保存标注结果的输出目录。通过利用预训练模型的强大功能,自动标注可以显著减少创建高质量分割数据集所需的时间和努力。这个功能特别适合处理大量图像集合的研究人员和开发人员,因为它允许他们专注于模型开发和评估,而不是手动标注。
Q: Ultralytics YOLO支持哪些实例分割的数据集格式?
A: Ultralytics YOLO支持多种实例分割的数据集格式,主要是其自己的Ultralytics YOLO格式。每个图片需要一个对应的文本文件,其中包含分割成多行的对象信息(每个对象一行),列出类别索引和归一化的边界坐标。有关YOLO数据集格式的更多详细说明,请访问实例分割数据集概述。
Q: 如何将COCO数据集注释转换为YOLO格式?
A: 使用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模型。有关更多详细信息,请参考标签格式转换部分。
Q: 如何为训练Ultralytics YOLO模型准备YAML文件?
A: 要为训练YOLO模型准备YAML文件,需要定义数据集路径和类别名称。以下是一个示例YAML配置:
path:
../datasets/coco8-seg
# 数据集根目录
train:
images/train
# 训练图片(相对于'path')
val:
images/val
# 验证图片(相对于'path')
names:
0:
person
1:
bicycle
2:
car
# ...
请根据数据集更新路径和类别名称。有关更多信息,请查看数据集YAML格式部分。
Q: Ultralytics YOLO中的自动标注功能是什么?
A: Ultralytics YOLO中的自动标注允许使用预训练的检测模型为数据集生成分割注释。这大大减少了手动标记的需求。可以使用以下auto_annotate函数:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")