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

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

相关推荐
聚客AI13 分钟前
PyTorch玩转CNN:卷积操作可视化+五大经典网络复现+分类项目
人工智能·pytorch·神经网络
程序员岳焱16 分钟前
深度剖析:Spring AI 与 LangChain4j,谁才是 Java 程序员的 AI 开发利器?
java·人工智能·后端
有风南来17 分钟前
算术图片验证码(四则运算)+selenium
自动化测试·python·selenium·算术图片验证码·四则运算验证码·加减乘除图片验证码
wangjinjin18017 分钟前
Python Excel 文件处理:openpyxl 与 pandas 库完全指南
开发语言·python
柠檬味拥抱18 分钟前
AI智能体在金融决策系统中的自主学习与行为建模方法探讨
人工智能
智驱力人工智能28 分钟前
智慧零售管理中的客流统计与属性分析
人工智能·算法·边缘计算·零售·智慧零售·聚众识别·人员计数
workflower1 小时前
以光量子为例,详解量子获取方式
数据仓库·人工智能·软件工程·需求分析·量子计算·软件需求
壹氿1 小时前
Supersonic 新一代AI数据分析平台
人工智能·数据挖掘·数据分析
张较瘦_1 小时前
[论文阅读] 人工智能 | 搜索增强LLMs的用户偏好与性能分析
论文阅读·人工智能
我不是小upper1 小时前
SVM超详细原理总结
人工智能·机器学习·支持向量机