YOLO Vision 2026:

使用 Ultralytics YOLO 进行实例分割#

Ultralytics YOLO instance segmentation examples

实例分割比目标检测更进一步,它包括识别图像中的单个对象并将其从图像的其余部分中分割出来。

实例分割模型的输出是一组勾勒出图像中每个对象轮廓的掩码或轮廓,以及每个对象的类标签和置信度分数。当你不仅需要知道对象在图像中的位置,还需要知道它们的精确形状时,实例分割非常有用。



Watch: Run Segmentation with Pretrained Ultralytics YOLO Model in Python.
提示

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

模型#

此处展示了 YOLO26 预训练 Segment 模型。Detect、Segment 和 Pose 模型在 COCO 数据集上进行预训练,Semantic 模型在 Cityscapes 上进行预训练,Classify 模型在 ImageNet 数据集上进行预训练。

模型会在首次使用时从最新的 Ultralytics 发布版本中自动下载。

模型尺寸
(像素)
mAPbox
50-95(e2e)
mAPmask
50-95(e2e)
速度
CPU ONNX
(ms)
速度
T4 TensorRT10
(ms)
参数量
(M)
FLOPs
(B)
YOLO26n-seg64039.633.953.3 ± 0.52.1 ± 0.02.79.1
YOLO26s-seg64047.340.0118.4 ± 0.93.3 ± 0.010.434.2
YOLO26m-seg64052.544.1328.2 ± 2.46.7 ± 0.123.6121.5
YOLO26l-seg64054.445.5387.0 ± 3.78.0 ± 0.128.0139.8
YOLO26x-seg64056.547.0787.0 ± 6.816.4 ± 0.162.8313.5
  • mAPval 值适用于 COCO val2017 数据集上的单模型单尺度。
    通过 yolo val segment data=coco.yaml device=0 复现
  • Speed 是在 Amazon EC2 P4d 实例上对 COCO val 图像取平均计算得出的。
    通过 yolo val segment data=coco.yaml batch=1 device=0|cpu 复现
  • **参数量(Params)**和 FLOPs 值适用于 model.fuse() 之后的融合模型,该模型合并了 Conv 和 BatchNorm 层,并且对于端到端模型,移除了辅助的一对多检测头。预训练检查点保留了完整的训练架构,可能会显示更高的数值。

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

训练#

在 COCO8-seg 数据集上以图像大小 640 训练 YOLO26n-seg 100 个轮次。有关可用参数的完整列表,请参见配置页面。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-seg.yaml")  # build a new model from YAML
model = YOLO("yolo26n-seg.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo26n-seg.yaml").load("yolo26n-seg.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)

训练页面中查看完整的 train 模式详情。分割模型也可以通过 Ultralytics Platform 云端训练进行训练。

数据集格式#

YOLO 分割数据集格式可以在数据集指南中找到详细说明。要将你现有的数据集从其他格式(如 COCO 等)转换为 YOLO 格式,请使用 Ultralytics 的 JSON2YOLO 工具。你还可以使用多边形工具和 SAM 驱动的智能标注通过 Ultralytics Platform 标注创建分割掩码。

验证#

在 COCO8-seg 数据集上验证训练好的 YOLO26n-seg 模型准确率。不需要任何参数,因为 model 会将其训练 data 和参数保留为模型属性。

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-seg.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered
metrics.box.map  # map50-95(B)
metrics.box.map50  # map50(B)
metrics.box.map75  # map75(B)
metrics.box.maps  # a list containing mAP50-95(B) for each category
metrics.box.image_metrics  # per-image metrics dictionary for det with precision, recall, F1, TP, FP, and FN
metrics.seg.map  # map50-95(M)
metrics.seg.map50  # map50(M)
metrics.seg.map75  # map75(M)
metrics.seg.maps  # a list containing mAP50-95(M) for each category
metrics.seg.image_metrics  # per-image metrics dictionary for seg with precision, recall, F1, TP, FP, and FN

预测#

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

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-seg.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Predict with the model
results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image

# Access the results
for result in results:
    xy = result.masks.xy  # mask polygons in pixel coordinates
    xyn = result.masks.xyn  # normalized mask polygons
    masks = result.masks.data  # binary masks, shape (N,H,W), dtype torch.uint8

查看完整的 predict 模式详情,请访问 Predict 页面。

结果输出#

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

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

有关所有任务特定于任务的 Results 字段,请参阅按任务划分的预测结果部分。

它与语义分割有何不同#

实例分割是对象级分割:两辆车会产生两个掩码、两个边界框和两个置信度得分。 语义分割是像素级分类:同一辆车在单个图像大小的类别图中变成具有相同类别 ID 的像素,没有每个对象的边界框、置信度或默认多边形列表。

导出#

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

示例
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-seg.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
model.export(format="onnx")

可用的 YOLO26-seg 导出格式见下表。你可以使用 format 参数(即 format='onnx'format='engine')导出为任何格式。你可以直接对导出的模型进行预测或验证,即 yolo predict model=yolo26n-seg.onnx。导出完成后会为你的模型显示使用示例。

注意

CoreML 嵌入式 NMS 流水线(nms=True)仅支持目标检测模型。分割导出到 CoreML 时会发出警告并强制使用 nms=False,从而生成没有 NMS 的原始模型。

格式format 参数模型元数据参数
PyTorch-yolo26n-seg.pt-
TorchScripttorchscriptyolo26n-seg.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-seg.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-seg_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-seg.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-seg.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-seg_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-seg.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-seg_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-seg_paddle_model/imgsz, batch, device
MNNmnnyolo26n-seg.mnnimgsz, 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.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-seg.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-seg_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-seg_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms
Apple Core AIcoreaiyolo26n-seg.aimodelimgsz, batch, quantize

查看完整的 export 详情,请访问 Export 页面。

常见问题解答#

  • 要在自定义数据集上训练 YOLO26 分割模型,你需要首先准备 YOLO 分割格式的数据集。你可以使用诸如 JSON2YOLO 之类的工具从其他格式转换数据集。数据集准备好后,你可以使用 Python 或 CLI 命令训练模型:

    示例
    from ultralytics import YOLO
    
    # Load a pretrained YOLO26 segment model
    model = YOLO("yolo26n-seg.pt")
    
    # Train the model
    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
    
    # Load a pretrained model
    model = YOLO("yolo26n-seg.pt")
    
    # Validate the model
    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
    
    # Load a pretrained model
    model = YOLO("yolo26n-seg.pt")
    
    # Export the model to ONNX format
    model.export(format="onnx")

    有关导出到各种格式的更多详情,请参考导出页面。

评论