实例分割
实例分割 比目标检测更进一步,涉及在图像中识别单个对象并将其从图像的其他部分分割出来。
实例分割模型的输出是一组掩码或轮廓,勾勒出图像中的每个对象,以及每个对象的类别标签和置信度分数。当你不仅需要知道图像中对象的位置,还需要知道它们的精确形状时,实例分割非常有用。
观看: 在Python中使用预训练的Ultralytics YOLO模型进行分割。
Tip
YOLO11分割模型使用-seg
后缀,例如yolo11n-seg.pt
,并在COCO数据集上进行了预训练。
模型
这里展示了YOLO11预训练的分割模型。检测、分割和姿态模型在COCO数据集上进行了预训练,而分类模型在ImageNet数据集上进行了预训练。
模型在首次使用时会自动从Ultralytics的最新发布中下载。
模型 | 尺寸 (像素) |
mAP框 50-95 |
mAP掩码 50-95 |
速度 CPU ONNX (毫秒) |
速度 T4 TensorRT10 (毫秒) |
参数 (M) |
FLOPs (B) |
---|---|---|---|---|---|---|---|
YOLO11n-seg | 640 | 38.9 | 32.0 | 65.9 ± 1.1 | 1.8 ± 0.0 | 2.9 | 10.4 |
YOLO11s-seg | 640 | 46.6 | 37.8 | 117.6 ± 4.9 | 2.9 ± 0.0 | 10.1 | 35.5 |
YOLO11m-seg | 640 | 51.5 | 41.5 | 281.6 ± 1.2 | 6.3 ± 0.1 | 22.4 | 123.3 |
YOLO11l-seg | 640 | 53.4 | 42.9 | 344.2 ± 3.2 | 7.8 ± 0.2 | 27.6 | 142.2 |
YOLO11x-seg | 640 | 54.7 | 43.8 | 664.5 ± 3.2 | 15.8 ± 0.7 | 62.1 | 319.0 |
- mAPval 值是在COCO val2017数据集上单模型单尺度的结果。
通过yolo val segment data=coco-seg.yaml device=0
复现。 - 速度 在Amazon EC2 P4d实例上对COCO val图像进行平均。
通过yolo val segment data=coco-seg.yaml batch=1 device=0|cpu
复现。
训练
在图像尺寸为640的COCO8-seg数据集上训练YOLO11n-seg模型100个epoch。有关可用参数的完整列表,请参阅配置页面。
Example
# 从YAML构建新模型并从头开始训练
yolo segment train data=coco8-seg.yaml model=yolo11n-seg.yaml epochs=100 imgsz=640
# 从预训练的*.pt模型开始训练
yolo segment train data=coco8-seg.yaml model=yolo11n-seg.pt epochs=100 imgsz=640
# 从YAML构建新模型,转移预训练权重并开始训练
yolo segment train data=coco8-seg.yaml model=yolo11n-seg.yaml pretrained=yolo11n-seg.pt epochs=100 imgsz=640
数据集格式
YOLO分割数据集格式可以在数据集指南中找到详细信息。要将现有数据集从其他格式(如COCO等)转换为YOLO格式,请使用Ultralytics的JSON2YOLO工具。
验证
在COCO8-seg数据集上验证训练好的YOLO11n-seg模型的准确性。不需要参数,因为model
保留了训练时的data
和参数作为模型属性。
Example
```python from ultralytics import YOLO
加载模型
model = YOLO("yolo11n-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)的列表
bash
yolo segment val model=yolo11n-seg.pt # 验证官方模型
yolo segment val model=path/to/best.pt # 验证自定义模型
预测
使用训练好的 YOLO11n-seg 模型对图像进行预测。
示例
```python from ultralytics import YOLO
加载模型
model = YOLO("yolo11n-seg.pt") # 加载官方模型 model = YOLO("path/to/best.pt") # 加载自定义模型
使用模型进行预测
results = model("https://ultralytics.com/images/bus.jpg") # 对图像进行预测 ```
bash
yolo segment predict model=yolo11n-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
模式详情。
导出
将 YOLO11n-seg 模型导出为不同的格式,如 ONNX、CoreML 等。
示例
```python from ultralytics import YOLO
加载模型
model = YOLO("yolo11n-seg.pt") # 加载官方模型 model = YOLO("path/to/best.pt") # 加载自定义训练的模型
导出模型
model.export(format="onnx") ```
bash
yolo export model=yolo11n-seg.pt format=onnx # 导出官方模型
yolo export model=path/to/best.pt format=onnx # 导出自定义训练的模型
下表列出了可用的 YOLO11-seg 导出格式。您可以使用 format
参数导出到任何格式,例如 format='onnx'
或 format='engine'
。您可以直接在导出的模型上进行预测或验证,例如 yolo predict model=yolo11n-seg.onnx
。导出完成后,将显示您的模型的使用示例。
格式 | format 参数 |
模型 | 元数据 | 参数 |
---|---|---|---|---|
PyTorch | - | yolo11n-seg.pt |
✅ | - |
TorchScript | torchscript |
yolo11n-seg.torchscript |
✅ | imgsz , optimize , batch |
ONNX | onnx |
yolo11n-seg.onnx |
✅ | imgsz , half , dynamic , simplify , opset , batch |
OpenVINO | openvino |
yolo11n-seg_openvino_model/ |
✅ | imgsz , half , int8 , batch |
TensorRT | engine |
yolo11n-seg.engine |
✅ | imgsz , half , dynamic , simplify , workspace , int8 , batch |
CoreML | coreml |
yolo11n-seg.mlpackage |
✅ | imgsz , half , int8 , nms , batch |
TF SavedModel | saved_model |
yolo11n-seg_saved_model/ |
✅ | imgsz , keras , int8 , batch |
TF GraphDef | pb |
yolo11n-seg.pb |
❌ | imgsz , batch |
TF Lite | tflite |
yolo11n-seg.tflite |
✅ | imgsz , half , int8 , batch |
TF Edge TPU | edgetpu |
yolo11n-seg_edgetpu.tflite |
✅ | imgsz |
TF.js | tfjs |
yolo11n-seg_web_model/ |
✅ | imgsz , half , int8 , batch |
PaddlePaddle | paddle |
yolo11n-seg_paddle_model/ |
✅ | imgsz , batch |
NCNN | ncnn |
yolo11n-seg_ncnn_model/ |
✅ | imgsz , half , batch |
在 导出 页面查看完整的 export
详情。
常见问题
如何在自定义数据集上训练 YOLO11 分割模型?
要在自定义数据集上训练 YOLO11 分割模型,您首先需要将数据集准备为 YOLO 分割格式。您可以使用 JSON2YOLO 等工具将其他格式的数据集转换。一旦数据集准备就绪,您可以使用 Python 或 CLI 命令训练模型:
示例
```python from ultralytics import YOLO
加载预训练的 YOLO11 分割模型
model = YOLO("yolo11n-seg.pt")
训练模型
results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=640) ```
bash
yolo segment train data=path/to/your_dataset.yaml model=yolo11n-seg.pt epochs=100 imgsz=640
在 配置 页面查看更多可用参数。
目标检测 和 YOLO11 中的实例分割有什么区别?
目标检测通过在图像中绘制边界框来识别和定位物体,而实例分割不仅识别边界框,还描绘每个物体的精确形状。YOLO11 实例分割模型提供掩码或轮廓,勾勒出每个检测到的物体,这对于需要了解物体精确形状的任务特别有用,如医学成像或自动驾驶。
为什么使用 YOLO11 进行实例分割?
Ultralytics YOLO11 是一个先进的模型,以其高精度和实时性能著称,非常适合实例分割任务。YOLO11 分割模型在 COCO 数据集 上进行了预训练,确保在各种物体上表现出色。此外,YOLO 支持无缝集成的训练、验证、预测和导出功能,使其在研究和工业应用中非常通用。
如何加载和验证预训练的 YOLO 分割模型?
加载和验证预训练的 YOLO 分割模型非常简单。以下是如何使用 Python 和 CLI 进行操作:
示例
```python from ultralytics import YOLO
加载预训练模型
model = YOLO("yolo11n-seg.pt")
验证模型
metrics = model.val()
print("边界框的平均精度均值:", metrics.box.map)
print("掩码的平均精度均值:", metrics.seg.map)
bash
yolo segment val model=yolo11n-seg.pt
这些步骤将为您提供验证指标,如平均精度均值(mAP),这对于评估模型性能至关重要。
如何将YOLO分割模型导出为ONNX格式?
将YOLO分割模型导出为ONNX格式非常简单,可以使用Python或CLI命令完成:
Example
```python from ultralytics import YOLO
加载预训练模型
model = YOLO("yolo11n-seg.pt")
将模型导出为ONNX格式
model.export(format="onnx") ```
bash
yolo export model=yolo11n-seg.pt format=onnx
有关导出到各种格式的更多详细信息,请参阅导出页面。