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

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

相关推荐
聚客AI17 小时前
🚫万能Agent兜底:当规划缺失工具时,AI如何自救
人工智能·llm·agent
JavaEdge在掘金17 小时前
掌握Spring IoC容器和Bean作用,轻松实现依赖注入!
python
Juchecar17 小时前
一文讲清 nn.Module 中 forward 函数被调用时机
人工智能
@鱼香肉丝没有鱼17 小时前
分布式推理与量化部署
ai·大模型·推理部署
七牛云行业应用17 小时前
深度解析强化学习(RL):原理、算法与金融应用
人工智能·算法·金融
说私域17 小时前
“开源AI智能名片链动2+1模式S2B2C商城小程序”在直播公屏引流中的应用与效果
人工智能·小程序·开源
程序员鱼皮17 小时前
AI 应用开发,不就是调个接口么?
计算机·ai·程序员·互联网·编程·网站
flysh0517 小时前
pyAutoGUI 模块主要功能介绍-(2)键盘功能
python·pyautogui
Hcoco_me18 小时前
深度学习和神经网络之间有什么区别?
人工智能·深度学习·神经网络
霍格沃兹_测试18 小时前
Ollama + Python 极简工作流
人工智能