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

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

相关推荐
野蛮的大西瓜11 分钟前
开源呼叫中心中,如何将ASR与IVR菜单结合,实现动态的IVR交互
人工智能·机器人·自动化·音视频·信息与通信
CountingStars61935 分钟前
目标检测常用评估指标(metrics)
人工智能·目标检测·目标跟踪
tangjunjun-owen43 分钟前
第四节:GLM-4v-9b模型的tokenizer源码解读
人工智能·glm-4v-9b·多模态大模型教程
冰蓝蓝1 小时前
深度学习中的注意力机制:解锁智能模型的新视角
人工智能·深度学习
橙子小哥的代码世界1 小时前
【计算机视觉基础CV-图像分类】01- 从历史源头到深度时代:一文读懂计算机视觉的进化脉络、核心任务与产业蓝图
人工智能·计算机视觉
黄公子学安全1 小时前
Java的基础概念(一)
java·开发语言·python
新加坡内哥谈技术2 小时前
苏黎世联邦理工学院与加州大学伯克利分校推出MaxInfoRL:平衡内在与外在探索的全新强化学习框架
大数据·人工智能·语言模型
程序员一诺2 小时前
【Python使用】嘿马python高级进阶全体系教程第10篇:静态Web服务器-返回固定页面数据,1. 开发自己的静态Web服务器【附代码文档】
后端·python
小木_.2 小时前
【Python 图片下载器】一款专门为爬虫制作的图片下载器,多线程下载,速度快,支持续传/图片缩放/图片压缩/图片转换
爬虫·python·学习·分享·批量下载·图片下载器
fanstuck2 小时前
Prompt提示工程上手指南(七)Prompt编写实战-基于智能客服问答系统下的Prompt编写
人工智能·数据挖掘·openai