Ultralytics YOLO27:
Get Started

使用 Ultralytics YOLO 进行实例分割#

Ultralytics YOLO instance segmentation examples

实例分割比目标检测更进一步,涉及识别图像中的各个对象,并将它们与图像其余部分分割开来。

实例分割模型的输出是一组掩码或轮廓,用于勾勒图像中的每个对象,同时还包含每个对象的类别标签和置信度分数。当你不仅需要知道图像中对象的位置,还需要了解对象的精确形状时,实例分割就很有用。



观看: 在 Python 中使用预训练的 Ultralytics YOLO 模型进行分割。
提示

YOLO26 Segment 模型使用 -seg 后缀,例如 yolo26n-seg.pt,并在 COCO 上进行预训练。

模型#

下方展示了在 COCO 数据集上预训练的 YOLO26 Segment 模型。

首次使用时,模型会自动从 Ultralytics 最新版本下载。

模型尺寸
(像素)
mAP边界框
50-95(端到端)
mAP掩码
50-95(端到端)
速度
CPU ONNX
(毫秒)
速度
T4 TensorRT10
(ms)
参数
(M)
FLOPs
(B)
YOLO26n-seg64039.633.953.3 ± 0.52.1 ± 0.02.79.3
YOLO26s-seg64047.340.0118.4 ± 0.93.3 ± 0.010.434.5
YOLO26m-seg64052.544.1328.2 ± 2.46.7 ± 0.123.6121.7
YOLO26l-seg64054.445.5387.0 ± 3.78.0 ± 0.128.0140.1
YOLO26x-seg64056.547.0787.0 ± 6.816.4 ± 0.162.8314.0
  • mAPval 数值是在 COCO val2017 数据集上以单模型、单尺度方式测得的。
    使用 yolo segment val data=coco.yaml device=0 nms=False 复现
  • 速度是在 COCO val 图像上使用 ONNX(CPU)和 TensorRT10(NVIDIA T4 GPU)测得的平均值。
    使用 yolo segment val data=coco.yaml batch=1 device=0|cpu nms=False 复现
  • 参数量和 FLOPs 数值对应融合后的模型,该模型经过 Conv/BatchNorm 折叠并移除了未使用的检测分支。预训练检查点保留完整的训练架构,因此显示的数值可能更高。

这些检查点可分割 COCO 的 80 个类别。如需在不重新训练的情况下分割列表之外的类别,请参阅 YOLOE,它可以将类别作为文本提示、视觉示例或内置词汇表输入。

查看尚未发布的 YOLO27 预览版,了解初步的 COCO 边界框和掩码结果。

训练#

在 COCO8-seg 数据集上以 640 的图像尺寸训练 YOLO26n-seg,训练 100 个轮次。如需查看可用参数的完整列表,请参阅配置页面。

示例
from ultralytics import YOLO

# 加载模型
model = YOLO("yolo26n-seg.yaml")  # 从 YAML 构建新模型
model = YOLO("yolo26n-seg.pt")  # 加载预训练模型(推荐用于训练)
model = YOLO("yolo26n-seg.yaml").load("yolo26n-seg.pt")  # 从 YAML 构建模型并迁移权重

# 训练模型
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)

有关 train 模式的完整详情,请参阅训练页面。你也可以使用 Ultralytics Platform 云训练训练分割模型。

数据集格式#

YOLO 分割数据集格式的详细说明请参阅数据集指南。如需将现有 COCO JSON 数据集转换为 YOLO 格式,请使用内置的 convert_coco 函数和 use_segments=True,具体说明请参阅 COCO 转 YOLO 指南。你还可以使用 Ultralytics Platform 标注中的多边形工具和 SAM 驱动的智能标注功能创建分割掩码。

验证#

验证已训练的 YOLO26n-seg 模型精度。无需传入参数,因为 model 会将训练时的 data 和参数保留为模型属性:来自训练示例的 path/to/best.pt 会在 COCO8-seg 上进行验证。官方权重记录的训练数据集路径在你的计算机上不存在,因此会在发出警告后回退到任务默认值 coco8-seg.yaml。传入 data 可在其他数据集上验证。

示例
from ultralytics import YOLO

# 加载模型
model = YOLO("yolo26n-seg.pt")  # 加载官方模型
model = YOLO("path/to/best.pt")  # 加载自定义模型

# 验证模型
metrics = model.val()  # 无需参数,数据集和设置会自动记住
metrics.box.map  # map50-95(B)
metrics.box.map50  # map50(B)
metrics.box.map75  # map75(B)
metrics.box.maps  # 包含每个类别 mAP50-95(B) 的列表
metrics.box.image_metrics  # 每张图像的 det 指标字典,包含 precision、recall、F1、TP、FP 和 FN
metrics.seg.map  # map50-95(M)
metrics.seg.map50  # map50(M)
metrics.seg.map75  # map75(M)
metrics.seg.maps  # 包含每个类别 mAP50-95(M) 的列表
metrics.seg.image_metrics  # 每张图像的 seg 指标字典,包含 precision、recall、F1、TP、FP 和 FN

预测#

使用训练好的 YOLO26n-seg 模型对图像进行预测。

示例
from ultralytics import YOLO

# 加载模型
model = YOLO("yolo26n-seg.pt")  # 加载官方模型
model = YOLO("path/to/best.pt")  # 加载自定义模型

# 使用模型进行预测
results = model("https://ultralytics.com/images/bus.jpg")  # 对图像进行预测

# 访问结果
for result in results:
    xy = result.masks.xy  # 像素坐标中的掩码多边形
    xyn = result.masks.xyn  # 归一化掩码多边形
    masks = result.masks.data  # 二值掩码,形状为 (N,H,W),数据类型为 torch.uint8

请参阅预测页面,了解完整的 predict 模式详情。

结果输出#

YOLO 实例分割会为每张图像返回一个 Results 对象。每个结果都存储对象级预测,其中每个检测到的实例都有自己的二值掩码、类别、置信度和边界框。

属性类型形状说明
result.masksMasks(N)实例掩码。
result.masks.datatorch.uint8(N,H,W)二值掩码,取值为 0 或 1。
result.masks.xynp.float32list[(P,2)]像素多边形。
result.masks.xynnp.float32list[(P,2)]归一化多边形。
result.boxesBoxes(N)实例框/类别/置信度。
result.boxes.clstorch.float32(N,)类别 ID;转换为 int 可获取类别名称。

如需了解所有任务中特定于任务的 Results 字段,请参阅按任务查看预测结果部分。

实例分割与语义分割#

实例分割是在对象级别进行分割:两辆汽车会产生两个掩码、两个边界框和两个置信度分数。 语义分割是在像素级别进行分类:这两辆汽车会变成同一张图像大小的类别图中的同类像素,且不会为每个对象分别提供边界框、置信度或默认多边形列表。请参阅语义分割页面上的逐字段对比。

导出#

将 YOLO26n-seg 模型导出为 ONNX、CoreML 等其他格式。

示例
from ultralytics import YOLO

# 加载模型
model = YOLO("yolo26n-seg.pt")  # 加载官方模型
model = YOLO("path/to/best.pt")  # 加载自定义模型

# 导出模型
model.export(format="onnx")

下表列出了可用的 YOLO26-seg 导出格式。你可以使用 format 参数导出为任意格式,例如 format='onnx' 或 format='engine'。你可以直接使用导出的模型进行预测或验证,例如 yolo predict model=yolo26n-seg.onnx。导出完成后,系统会显示适用于你模型的用法示例。

注意

对于静态形状,CoreML 支持在检测、实例分割和姿态任务中嵌入 NMS(nms=True)。默认的分割导出(nms=None)会将 NMS 留给使用方处理。

格式format 参数模型元数据参数
PyTorch-yolo26n-seg.pt✅-
TorchScripttorchscriptyolo26n-seg.torchscript✅imgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-seg.onnx✅imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-seg_openvino_model/✅imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-seg.engine✅imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-seg.mlpackage✅imgsz, dynamic, quantize, nms, batch, device
Apple Core AIcoreaiyolo26n-seg.aimodel✅imgsz, batch, quantize
TF SavedModelsaved_modelyolo26n-seg_saved_model/✅imgsz, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-seg.pb❌imgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-seg_edgetpu.tflite✅imgsz, quantize, opset, data, fraction, device
LiteRTlitertyolo26n-seg.tflite✅imgsz, quantize, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-seg_paddle_model/✅imgsz, batch, device
MNNmnnyolo26n-seg.mnn✅imgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-seg_ncnn_model/✅imgsz, quantize, batch, device
IMX500imxyolo26n-seg_imx_model/✅imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-seg_rknn_model/✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-seg_executorch_model/✅imgsz, batch, device
Axeleraaxelerayolo26n-seg_axelera_model/✅imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-seg_deepx_model/✅imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-seg_qnn.onnx✅imgsz, batch, name, quantize, simplify, opset, data, fraction, device
Hailohailoyolo26n-seg_hailo_model/✅imgsz, name, quantize, data, fraction, simplify, conf, iou, device
Huawei Ascendascendyolo26n-seg_ascend_model/✅imgsz, batch, name, quantize, opset, simplify, nms, device
AMD Xilinxxilinxyolo26n-seg_xilinx_model/✅imgsz, name, quantize, data, fraction, opset, simplify, device

nms=None 默认输出原始结果,以供外部 NMS 使用。设置 nms=False 可选择可用的无 NMS 检测头;不支持的格式会回退到其原生输出路径。上方的 nms 条目表示可以通过 nms=True 嵌入 NMS 的格式。

请参阅 Export 页面,了解完整的 export 详情。

常见问题#

  • 要在自定义数据集上训练 YOLO26 分割模型,你首先需要按照 YOLO 分割格式准备数据集。你可以使用内置的 convert_coco 实用工具转换 COCO JSON 数据集。准备好数据集后,你可以使用 Python 或 CLI 命令训练模型:

    示例
    from ultralytics import YOLO
    
    # 加载预训练的 YOLO26 分割模型
    model = YOLO("yolo26n-seg.pt")
    
    # 训练模型
    results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=640)

    请查看配置页面,了解更多可用参数。

  • 目标检测通过在对象周围绘制边界框来识别并定位图像中的对象;而实例分割不仅能识别边界框,还能勾勒出每个对象的精确形状。YOLO26 实例分割模型会输出用于勾勒每个检测对象的掩码或轮廓。这对于需要了解对象精确形状的任务尤其有用,例如医学影像或自动驾驶。

  • Ultralytics YOLO26 是一款以高精度和实时性能著称的先进模型,非常适合实例分割任务。YOLO26 Segment 模型已在 COCO 数据集上预训练,可确保其在各种对象上的稳健表现。此外,YOLO 支持训练、验证、预测和导出功能,且集成流畅,因此在研究和工业应用中都具有很强的通用性。

  • 加载并验证预训练的 YOLO 分割模型很简单。下面介绍如何使用 Python 和 CLI 完成这些操作:

    示例
    from ultralytics import YOLO
    
    # 加载预训练模型
    model = YOLO("yolo26n-seg.pt")
    
    # 验证模型
    metrics = model.val()
    print("Mean Average Precision for boxes:", metrics.box.map)
    print("Mean Average Precision for masks:", metrics.seg.map)

    这些步骤会提供平均精度均值(mAP)等验证指标,这些指标对评估模型性能至关重要。

  • 将 YOLO 分割模型导出为 ONNX 格式很简单,可以使用 Python 或 CLI 命令完成:

    示例
    from ultralytics import YOLO
    
    # 加载预训练模型
    model = YOLO("yolo26n-seg.pt")
    
    # 将模型导出为 ONNX 格式
    model.export(format="onnx")

    如需了解将模型导出为各种格式的更多详情,请参阅导出页面。

评论