yolov8语义分割训练-验证-推理-转化-数据集(代码+教程)

实例分割概述

实例分割是计算机视觉任务的一种,它超越了简单的物体检测,能够识别图像中的单个物体并将其从图像的其余部分分割出来。这种高级别的分割技术不仅能定位物体的位置,还能精确描绘出每个物体的实际形状。

实例分割模型的输出

实例分割模型的输出是一组掩码(mask)或轮廓线,这些掩码或轮廓线勾勒出了图像中每个物体的确切边界,并且每个物体都附带类别标签和置信度分数。当需要了解图像中物体不仅"在哪里",而且"具体是什么形状"时,实例分割就显得尤为重要。

示例:使用预训练的 Ultralytics YOLOv8 模型进行分割

观看:使用预训练的 Ultralytics YOLOv8 模型进行分割

YOLOv8 的实例分割模型使用 -seg 后缀,例如 yolov8n-seg.pt,这些模型是在 COCO 数据集上预训练的。

模型

YOLOv8 预训练的实例分割模型如下所示。检测、分割和姿态估计模型在 COCO 数据集上进行了预训练,而分类模型则在 ImageNet 数据集上进行了预训练。模型会在首次使用时自动从 Ultralytics 的最新发布中下载。

模型 大小(像素) mAPbox(50-95) mAPmask(50-95) 速度(CPU ONNX,毫秒) 速度(A100 TensorRT,毫秒) 参数(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 数据集上的单模型单尺度评估结果。

训练模型

要使用 YOLOv8n-seg 在 COCO128-seg 数据集上进行训练,可以设置图像大小为 640 像素,训练周期为 100 轮。

示例

Python

python 复制代码
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="coco8-seg.yaml", epochs=100, imgsz=640)

命令行接口 (CLI)

shell 复制代码
python path/to/train.py --data coco8-seg.yaml --epochs 100 --imgsz 640
数据集格式

YOLO 分割数据集的具体格式可以在数据集指南中找到。要将现有数据集(如 COCO 等格式)转换为 YOLO 格式,请使用 Ultralytics 提供的 JSON2YOLO 工具。

验证模型

验证训练好的 YOLOv8n-seg 模型在 COCO128-seg 数据集上的准确性。无需传递任何参数,因为模型会保留其训练数据和参数作为属性。

示例

Python

python 复制代码
from ultralytics import YOLO

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

# 验证模型
metrics = model.val()  # 不需要参数,数据集和设置会被记住

# 获取指标
metrics.box.map     # mAP(50-95) 对于边界框
metrics.box.map50   # mAP50 对于边界框
metrics.box.map75   # mAP75 对于边界框
metrics.box.maps    # 每个类别的 mAP(50-95) 列表
metrics.seg.map     # mAP(50-95) 对于分割
metrics.seg.map50   # mAP50 对于分割
metrics.seg.map75   # mAP75 对于分割
metrics.seg.maps    # 每个类别的 mAP(50-95) 列表

命令行接口 (CLI)

shell 复制代码
python path/to/val.py
运行预测

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

示例

Python

python 复制代码
from ultralytics import YOLO

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

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

命令行接口 (CLI)

shell 复制代码
python path/to/predict.py --source https://ultralytics.com/images/bus.jpg
导出模型

可以将 YOLOv8n-seg 模型导出为不同的格式,例如 ONNX、CoreML 等。

示例

Python

python 复制代码
from ultralytics import YOLO

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

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

命令行接口 (CLI)

shell 复制代码
python path/to/export.py --weights yolov8n-seg.pt --format onnx
可用的 YOLOv8-seg 导出格式

下表列出了可用的 YOLOv8-seg 导出格式。你可以使用 format 参数导出到任何格式,例如 format='onnx'format='engine'。完成导出后,你可以直接在导出的模型上进行预测或验证,例如 yolo predict model=yolov8n-seg.onnx

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

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

要在自定义数据集上训练 YOLOv8 分割模型,首先需要准备数据集以符合 YOLO 分割格式的要求。可以使用 JSON2YOLO 工具来转换来自其他格式的数据集。一旦数据集准备好,就可以使用 Python 或者命令行接口进行训练。

示例

Python

python 复制代码
from ultralytics import YOLO

# 加载预训练的 YOLOv8 分割模型
model = YOLO("yolov8n-seg.pt")

# 训练模型
results = model.train(data="path/to/your_dataset.yaml", epochs=100, imgsz=640)

命令行接口 (CLI)

shell 复制代码
python path/to/train.py --data path/to/your_dataset.yaml --epochs 100 --imgsz 640

更多可用的参数选项,请参阅配置页面。

物体检测与实例分割的区别是什么?

物体检测的任务是在图像中识别并定位物体,通过绘制边界框来标记它们的位置;而实例分割则不仅要确定边界框,还要精确描绘每个物体的确切形状。YOLOv8 的实例分割模型提供了勾勒每个检测到物体的掩码或轮廓,这对于需要知道物体精确形状的任务来说非常重要,例如医学成像或自动驾驶等。

为什么选择 YOLOv8 进行实例分割?

Ultralytics YOLOv8 是一种最先进的模型,以其高准确性和实时性能而闻名,这使得它非常适合实例分割任务。YOLOv8 的分割模型在 COCO 数据集上进行了预训练,确保了模型对于多种物体的强大性能。此外,YOLOv8 支持训练、验证、预测以及导出功能,易于集成,因此非常适合研究和工业应用。

如何加载并验证预训练的 YOLOv8 分割模型?

加载并验证预训练的 YOLOv8 分割模型非常简单,下面是如何使用 Python 和命令行接口进行操作的示例。

示例

Python

python 复制代码
from ultralytics import YOLO

# 加载预训练模型
model = YOLO("yolov8n-seg.pt")

# 验证模型
metrics = model.val()

# 打印指标
print("边界框的平均精度(mAP):", metrics.box.map)
print("掩码的平均精度(mAP):", metrics.seg.map)

命令行接口 (CLI)

shell 复制代码
python path/to/val.py

这些步骤将为你提供诸如平均精度(mAP)等验证指标,这些指标对于评估模型性能至关重要。

如何将 YOLOv8 分割模型导出为 ONNX 格式?

将 YOLOv8 分割模型导出为 ONNX 格式很容易,可以通过 Python 或者命令行接口完成。

示例

Python

python 复制代码
from ultralytics import YOLO

# 加载预训练模型
model = YOLO("yolov8n-seg.pt")

# 将模型导出为 ONNX 格式
model.export(format="onnx")

命令行接口 (CLI)

shell 复制代码
python path/to/export.py --weights yolov8n-seg.pt --format onnx

有关导出到各种格式的更多细节,请参阅导出页面。

相关推荐
七牛云行业应用14 分钟前
OpenCode 安装与配置模型完整指南:终端 AI 编码 Agent 上手教程
ai·ai编程
IT_陈寒35 分钟前
React的setState竟然不是立刻生效的,害我调试半天
前端·人工智能·后端
腾讯云大数据41 分钟前
腾讯云大数据计算智能:从结构化 SQL 到多模态 AI Workload 的融合范式
大数据·人工智能·腾讯云
AI职业加油站1 小时前
大数据采集工程师:技术栈全景图与实战路径
大数据·人工智能·数据分析
code 旭1 小时前
不会编程也能做AI 量化交易工具:基于 MCP 协议的自然语言交易思路不会编程也能做AI 量化交易工具:基于 MCP 协议的自然语言交易思路
人工智能·ai·量化交易·mcp
AI服务老曹1 小时前
视觉算法模型管理完整流程:多版本上线、灰度发布与回滚的落地实践
人工智能·docker·音视频
机器之心2 小时前
Anthropic发现Claude「类意识工作台」!神秘J空间藏着没说出口的想法
人工智能·openai
AI实践录2 小时前
大模型架构:理解大模型预测输出文本的底层逻辑
人工智能
Lifangyun_WD2 小时前
昇腾910B vs NVIDIA A100/H100:国产GPU算力租赁选型与迁移实践
人工智能·gpu算力·ai算力·算力租赁·gpu云主机
卡卡罗特AI2 小时前
GPT5.6 今晚全量开发?Codex上线史上最强Coding模型!
人工智能·ai编程