实例分割

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 数据集,语义模型预训练于 Cityscapes,而分类 (Classify) 模型预训练于 ImageNet 数据集。

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

模型大小
(像素)
mAPbox
50-95(e2e)
mAPmask
50-95(e2e)
速度
CPU ONNX
(毫秒)
速度
T4 TensorRT10
(毫秒)
参数
(百万)
FLOPs
(十亿)
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 进行复现
  • 速度是在 Amazon EC2 P4d 实例上使用 COCO val 图像平均计算得出的。
    通过 yolo val segment data=coco.yaml batch=1 device=0|cpu 进行复现
  • 参数FLOPs 值适用于 model.fuse() 之后融合的模型,该操作合并了 Conv 和 BatchNorm 层,对于端到端模型,还移除了辅助的一对多检测头。预训练检查点保留了完整的训练架构,因此计数值可能会更高。

训练 (Train)

在 COCO8-seg 数据集上训练 YOLO26n-seg,进行 100 个 epoch,图像大小为 640。有关可用参数的完整列表,请查看配置页面。

示例
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)

See full train mode details in the Train page. Segmentation models can also be trained on cloud GPUs through Ultralytics Platform.

数据集格式

有关 YOLO 分割数据集格式的详细信息,请参阅数据集指南。要将现有数据集从其他格式(如 COCO 等)转换为 YOLO 格式,请使用 Ultralytics 提供的 JSON2YOLO 工具。你也可以在 Ultralytics Platform 上使用多边形工具和 SAM 驱动的智能标注来创建分割掩码。

验证 (Val)

在 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 in polygon format
    xyn = result.masks.xyn  # normalized
    masks = result.masks.data  # mask in matrix format (num_objects x H x W)

See full predict mode details in the Predict page.

导出 (Export)

将 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。导出完成后,将显示模型的使用示例。

格式format 参数模型元数据参数
PyTorch-yolo26n-seg.pt-
TorchScripttorchscriptyolo26n-seg.torchscriptimgsz, half, dynamic, optimize, nms, batch, device
ONNXonnxyolo26n-seg.onnximgsz, half, dynamic, simplify, opset, nms, batch, device
OpenVINOopenvinoyolo26n-seg_openvino_model/imgsz, half, dynamic, int8, nms, batch, data, fraction, device
TensorRTengineyolo26n-seg.engineimgsz, half, dynamic, simplify, workspace, int8, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-seg.mlpackageimgsz, dynamic, half, int8, nms, batch, device
TF SavedModelsaved_modelyolo26n-seg_saved_model/imgsz, keras, int8, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-seg.pbimgsz, batch, device
TF Litetfliteyolo26n-seg.tfliteimgsz, half, int8, nms, batch, data, fraction, device
TF Edge TPUedgetpuyolo26n-seg_edgetpu.tfliteimgsz, int8, data, fraction, device
TF.jstfjsyolo26n-seg_web_model/imgsz, half, int8, nms, batch, data, fraction, device
PaddlePaddlepaddleyolo26n-seg_paddle_model/imgsz, batch, device
MNNmnnyolo26n-seg.mnnimgsz, batch, int8, half, device
NCNNncnnyolo26n-seg_ncnn_model/imgsz, half, batch, device
IMX500imxyolo26n-seg_imx_model/imgsz, int8, data, fraction, nms, device
RKNNrknnyolo26n-seg_rknn_model/imgsz, batch, name, device
ExecuTorchexecutorchyolo26n-seg_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-seg_axelera_model/imgsz, batch, int8, data, fraction, device
DeepXdeepxyolo26n-seg_deepx_model/imgsz, int8, data, optimize, device

See full export details in the Export page.

常见问题 (FAQ)

如何自定义数据集上训练 YOLO26 分割模型?

要在自定义数据集上训练 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 中的实例分割有什么区别?

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

为什么要使用 YOLO26 进行实例分割?

Ultralytics YOLO26 是一款最先进的模型,以其高准确度和实时性能而闻名,非常适合实例分割任务。YOLO26 Segment 模型在 COCO 数据集上进行了预训练,确保在各种对象上都能实现稳健的性能。此外,YOLO 支持训练、验证、预测和导出功能,并能实现无缝集成,使其在科研和行业应用中具有极高的通用性。

如何加载并验证预训练的 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 格式?

将 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")

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

评论