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-seg64036.730.596.11.213.412.6
YOLOv8s-seg64044.636.8155.71.4711.842.6
YOLOv8m-seg64049.940.8317.02.1827.3110.2
YOLOv8l-seg64052.342.6572.42.7946.0220.5
YOLOv8x-seg64053.443.4712.14.0271.8344.1

其中,mAPval 值是在 COCO val2017 数据集上的单模型单尺度评估结果。

训练模型

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

示例

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)

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

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

验证模型

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

示例

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)

python path/to/val.py
运行预测

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

示例

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)

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

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

示例

Python

from ultralytics import YOLO

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

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

命令行接口 (CLI)

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-
TorchScripttorchscriptyolov8n-seg.torchscriptimgsz, optimize, batch
ONNXonnxyolov8n-seg.onnximgsz, half, dynamic, simplify, opset, batch
OpenVINOopenvinoyolov8n-seg_openvino_model/imgsz, half, int8, batch
TensorRTengineyolov8n-seg.engineimgsz, half, dynamic, simplify, workspace, int8, batch
CoreMLcoremlyolov8n-seg.mlpackageimgsz, half, int8, nms, batch
TF SavedModelsaved_modelyolov8n-seg_saved_model/imgsz, keras, int8, batch
TF GraphDefpbyolov8n-seg.pb×imgsz, batch
TF Litetfliteyolov8n-seg.tfliteimgsz, half, int8, batch
TF Edge TPUedgetpuyolov8n-seg_edgetpu.tfliteimgsz
TF.jstfjsyolov8n-seg_web_model/imgsz, half, int8, batch
PaddlePaddlepaddleyolov8n-seg_paddle_model/imgsz, batch
NCNNncnnyolov8n-seg_ncnn_model/imgsz, half, batch
常见问题解答

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

要在自定义数据集上训练 YOLOv8 分割模型,首先需要准备数据集以符合 YOLO 分割格式的要求。可以使用 JSON2YOLO 工具来转换来自其他格式的数据集。一旦数据集准备好,就可以使用 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)

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

from ultralytics import YOLO

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

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

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

命令行接口 (CLI)

python path/to/val.py

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

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

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

示例

Python

from ultralytics import YOLO

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

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

命令行接口 (CLI)

python path/to/export.py --weights yolov8n-seg.pt --format onnx

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

  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿利同学

一角两角不嫌少

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值