跳转至

实例分割

实例分割示例

实例分割比物体检测有所深入,它涉及到识别图像中的个别物体并将它们从图像的其余部分中分割出来。

实例分割模型的输出是一组蒙版或轮廓,用于勾画图像中每个物体,以及每个物体的类别标签和置信度分数。实例分割在您需要不仅知道图像中的物体位置,还需要知道它们确切形状时非常有用。



观看: 在Python中使用预训练的Ultralytics YOLOv8模型运行分割。

提示

YOLOv8分割模型使用-seg后缀,即yolov8n-seg.pt,并在COCO上进行预训练。

模型

这里展示了预训练的YOLOv8分割模型。Detect、Segment和Pose模型都是在COCO数据集上进行预训练的,而Classify模型则是在ImageNet数据集上进行预训练的。

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

模型 尺寸
(像素)
mAPbox
50-95
mAPmask
50-95
速度
CPU ONNX
(ms)
速度
A100 TensorRT
(ms)
参数
(M)
FLOPs
(B)
YOLOv8n-seg 640 36.7 30.5 96.1 1.21 3.4 12.6
YOLOv8s-seg 640 44.6 36.8 155.7 1.47 11.8 42.6
YOLOv8m-seg 640 49.9 40.8 317.0 2.18 27.3 110.2
YOLOv8l-seg 640 52.3 42.6 572.4 2.79 46.0 220.5
YOLOv8x-seg 640 53.4 43.4 712.1 4.02 71.8 344.1
  • mAPval 值针对COCO val2017数据集的单模型单尺度。
    通过yolo val segment data=coco.yaml device=0复现。
  • 速度 基于在Amazon EC2 P4d实例上运行的COCO val图像的平均值。
    通过yolo val segment data=coco128-seg.yaml batch=1 device=0|cpu复现。

训练

在COCO128-seg数据集上以640的图像尺寸训练YOLOv8n-seg模型共100个周期。想了解更多可用的参数,请查阅配置页面。

示例

from ultralytics import YOLO

# 载入一个模型
model = YOLO('yolov8n-seg.yaml')  # 从YAML构建一个新模型
model = YOLO('yolov8n-seg.pt')    # 载入预训练模型(推荐用于训练)
model = YOLO('yolov8n-seg.yaml').load('yolov8n.pt')  # 从YAML构建并传递权重

# 训练模型
results = model.train(data='coco128-seg.yaml', epochs=100, imgsz=640)
# 从YAML构建新模型并从头开始训练
yolo segment train data=coco128-seg.yaml model=yolov8n-seg.yaml epochs=100 imgsz=640

# 从预训练*.pt模型开始训练
yolo segment train data=coco128-seg.yaml model=yolov8n-seg.pt epochs=100 imgsz=640

# 从YAML构建新模型,传递预训练权重,开始训练
yolo segment train data=coco128-seg.yaml model=yolov8n-seg.yaml pretrained=yolov8n-seg.pt epochs=100 imgsz=640

数据集格式

可以在数据集指南中详细了解YOLO分割数据集格式。要将现有数据集从其他格式(如COCO等)转换为YOLO格式,请使用Ultralytics的JSON2YOLO工具。

验证

在COCO128-seg数据集上验证已训练的YOLOv8n-seg模型的准确性。不需要传递任何参数,因为model保留了其训练的data和作为模型属性的设置。

示例

from ultralytics import YOLO

# 载入一个模型
model = YOLO('yolov8n-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.seg.map    # map50-95(M)
metrics.seg.map50  # map50(M)
metrics.seg.map75  # map75(M)
metrics.seg.maps   # 各类别map50-95(M)列表
yolo segment val model=yolov8n-seg.pt  # 验证官方模型
yolo segment val model=path/to/best.pt  # 验证自定义模型

预测

使用已训练的YOLOv8n-seg模型在图像上进行预测。

示例

from ultralytics import YOLO

# 载入一个模型
model = YOLO('yolov8n-seg.pt')    # 载入官方模型
model = YOLO('path/to/best.pt')  # 载入自定义模型

# 使用模型进行预测
results = model('https://ultralytics.com/images/bus.jpg')  # 对一张图像进行预测
yolo segment predict model=yolov8n-seg.pt source='https://ultralytics.com/images/bus.jpg'  # 使用官方模型进行预测
yolo segment predict model=path/to/best.pt source='https://ultralytics.com/images/bus.jpg'  # 使用自定义模型进行预测

预测模式的完整详情请参见Predict页面。

导出

将YOLOv8n-seg模型导出为ONNX、CoreML等不同格式。

示例

from ultralytics import YOLO

# 载入一个模型
model = YOLO('yolov8n-seg.pt')    # 载入官方模型
model = YOLO('path/to/best.pt')  # 载入自定义训练模型

# 导出模型
model.export(format='onnx')
yolo export model=yolov8n-seg.pt format=onnx  # 导出官方模型
yolo export model=path/to/best.pt format=onnx  # 导出自定义训练模型

YOLOv8-seg导出格式的可用表格如下所示。您可以直接在导出的模型上进行预测或验证,例如yolo predict model=yolov8n-seg.onnx。导出完成后,示例用法将显示您的模型。

格式 format 参数 模型 元数据 参数
PyTorch - yolov8n-seg.pt -
TorchScript torchscript yolov8n-seg.torchscript imgsz, optimize
ONNX onnx yolov8n-seg.onnx imgsz, half, dynamic, simplify, opset
OpenVINO openvino yolov8n-seg_openvino_model/ imgsz, half
TensorRT engine yolov8n-seg.engine imgsz, half, dynamic, simplify, workspace
CoreML coreml yolov8n-seg.mlpackage imgsz, half, int8, nms
TF SavedModel saved_model yolov8n-seg_saved_model/ imgsz, keras
TF GraphDef pb yolov8n-seg.pb imgsz
TF Lite tflite yolov8n-seg.tflite imgsz, half, int8
TF Edge TPU edgetpu yolov8n-seg_edgetpu.tflite imgsz
TF.js tfjs yolov8n-seg_web_model/ imgsz
PaddlePaddle paddle yolov8n-seg_paddle_model/ imgsz
ncnn ncnn yolov8n-seg_ncnn_model/ imgsz, half

导出模式的完整详情请参见Export页面。


Created 2023-11-12, Updated 2023-11-18
Authors: glenn-jocher (2)

评论