首页 > 其他分享 >yolov8旋转目标检测从原理到模型训练、部署、验证、推理(附代码)

yolov8旋转目标检测从原理到模型训练、部署、验证、推理(附代码)

时间:2024-11-01 19:15:31浏览次数:3  
标签:验证 OBB 模型 YOLO obb yolov8 yolov8n model 推理

定向边界框目标检测

img

在这里插入图片描述

导言

定向目标检测是在传统目标检测的基础上更进一步的技术,它引入了一个额外的角度参数,以更精确地定位图像中的物体。传统的目标检测算法通常使用轴对齐的矩形包围框来框定物体,而定向目标检测则使用旋转的边界框,这些边界框能够更好地适应物体的实际方向和形状,从而提供更准确的定位信息。

输出

定向目标检测器的输出是一系列旋转的边界框,它们精确地包围着图像中的物体,并为每个边界框提供类别标签和置信度得分。当您需要识别场景中的物体,而且还需要了解物体的确切位置和方向时,定向目标检测就显得尤为重要。

Ultralytics YOLOv8-OBB

YOLOv8-OBB 是 Ultralytics 开发的面向定向目标检测的模型。它通过在 DOTAv1 数据集上进行预训练,能够处理具有特定方向的物体。这些模型的文件名后缀带有 -obb,例如 yolov8n-obb.pt。

示例

  • 船舶检测使用 OBB:在航空或卫星图像中,船舶往往呈现出非正交的方向,使用定向边界框可以更准确地检测和定位这些船只。
  • 车辆检测使用 OBB:在复杂的城市环境中,车辆可能会出现各种倾斜角度,定向边界框能够更好地捕捉这些角度变化。

模型

YOLOv8 预训练的 OBB 模型是在 DOTAv1 数据集上进行训练的,它们自动从 Ultralytics 最新的发布版本中下载。

模型大小 (像素)mAPtest 50速度 CPU ONNX (ms)速度 A100 TensorRT (ms)参数 (M)FLOPs (B)
YOLOv8n-obb102478.0204.773.573.123.3
YOLOv8s-obb102479.5424.884.0711.476.3
YOLOv8m-obb102480.5763.487.6126.4208.6
YOLOv8l-obb102480.71278.4211.8344.5433.8
YOLOv8x-obb102481.361759.1013.2369.5676.7

mAPtest 值是基于 DOTAv1 测试数据集的单模型多尺度评估得出的。为了重现结果,可以使用 yolo val obb data=DOTAv1.yaml device=0 split=test 命令,并将合并的结果提交给 DOTA 评估系统。速度指标是在 Amazon EC2 P4d 实例上对 DOTAv1 验证图像的平均值。

训练

在 640 像素大小的图像上,使用 dota8.yaml 数据集训练 YOLOv8n-obb 模型 100 个周期。更多可用的训练参数请参见配置页面。

from ultralytics import YOLO

# 加载模型
model = YOLO("yolov8n-obb.yaml")  # 从 YAML 构建新模型
model = YOLO("yolov8n-obb.pt")  # 加载预训练模型(推荐用于训练)
model = YOLO("yolov8n-obb.yaml").load("yolov8n.pt")  # 从 YAML 构建并转移权重

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

数据集格式

OBB 数据集的详细格式可以在数据集指南中找到。

验证

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

from ultralytics import YOLO

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

# 验证模型
metrics = model.val(data="dota8.yaml")  # 不需要参数,数据集和设置被记住
metrics.box.map  # map50-95(B)
metrics.box.map50  # map50(B)
metrics.box.map75  # map75(B)
metrics.box.maps  # 包含每个类别的 map50-95(B) 的列表

预测

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

from ultralytics import YOLO

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

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

更多预测模式的详细信息可以在预测页面中查看。

导出

将 YOLOv8n-obb 模型导出到其他格式,如 ONNX、CoreML 等。

from ultralytics import YOLO

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

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

YOLOv8-OBB 可用的导出格式如下表所示。您可以使用 format 参数导出到任何格式,例如 format=‘onnx’ 或 format=‘engine’。您可以在导出后的模型上直接进行预测或验证,例如 yolo predict model=yolov8n-obb.onnx。在导出完成之后,会显示您模型的使用示例。

格式format 参数模型元数据参数
PyTorch-yolov8n-obb.pt-
TorchScripttorchscriptyolov8n-obb.torchscriptimgsz, optimize, batch
ONNXonnxyolov8n-obb.onnximgsz, half, dynamic, simplify, opset, batch
OpenVINOopenvinoyolov8n-obb_openvino_model/imgsz, half, int8, batch
TensorRTengineyolov8n-obb.engineimgsz, half, dynamic, simplify, workspace, int8, batch
CoreMLcoremlyolov8n-obb.mlpackageimgsz, half, int8, nms, batch
TF SavedModelsaved_modelyolov8n-obb_saved_model/imgsz, keras, int8, batch
TF GraphDefpbyolov8n-obb.pbimgsz, batch
TF Litetfliteyolov8n-obb.tfliteimgsz, half, int8, batch
TF Edge TPUedgetpuyolov8n-obb_edgetpu.tfliteimgsz
TF.jstfjsyolov8n-obb_web_model/imgsz, half, int8, batch
PaddlePaddlepaddleyolov8n-obb_paddle_model/imgsz, batch
NCNNncnnyolov8n-obb_ncnn_model/imgsz, half, batch

更多导出详情请参阅导出页面。

img

在这里插入图片描述

常见问题解答

  • 什么是定向边界框 (OBB),它们与常规边界框有何不同?

定向边界框 (OBB) 包括一个额外的角度参数,以提高图像中物体定位的准确性。与常规的轴对齐矩形包围框不同,OBB 可以旋转以更好地匹配物体的方向。这对于需要精确物体定位的应用尤其有用,例如航空或卫星影像中的物体检测。

  • 如何使用自定义数据集训练 YOLOv8n-obb 模型?

要使用自定义数据集训练 YOLOv8n-obb 模型,您可以使用以下示例:

```python from ultralytics import YOLO

# 加载预训练模型 model = YOLO(“yolov8n-obb.pt”)

# 训练模型 results = model.train(data=“path/to/custom_dataset.yaml”, epochs=100, imgsz=640) ```

更多训练参数,请查阅配置章节。

  • 我可以使用哪些数据集来训练 YOLOv8-OBB 模型?

YOLOv8-OBB 模型是在 DOTAv1 数据集上进行预训练的,但您也可以使用任何适合 OBB 的数据集。关于 OBB 数据集格式的详细信息可以在数据集指南中找到。

  • 如何将 YOLOv8-OBB 模型导出为 ONNX 格式?

将 YOLOv8-OBB 模型导出为 ONNX 格式非常简单,无论是使用 Python 还是 CLI 命令:

```python from ultralytics import YOLO

# 加载模型 model = YOLO(“yolov8n-obb.pt”)

# 导出模型 model.export(format=“onnx”) ```

更多导出格式和详情,请参阅导出页面。

  • 如何验证 YOLOv8n-obb 模型的准确性?

要验证 YOLOv8n-obb 模型,您可以使用 Python 或 CLI 命令:

```python from ultralytics import YOLO

# 加载模型 model = YOLO(“yolov8n-obb.pt”)

# 验证模型 metrics = model.val(data=“dota8.yaml”) ```

Ov8n-obb 模型,您可以使用 Python 或 CLI 命令:

```python from ultralytics import YOLO

# 加载模型 model = YOLO(“yolov8n-obb.pt”)

# 验证模型 metrics = model.val(data=“dota8.yaml”) ```

更多验证详情,请参阅验证章节。

标签:验证,OBB,模型,YOLO,obb,yolov8,yolov8n,model,推理
From: https://blog.csdn.net/QQ_1309399183/article/details/143419798

相关文章

  • 实干派!网易易盾增强版滑块验证码,全方位讲解识别思路(含源码)
    注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路如有侵犯,请联系作者下架某盾的增强版滑块已经上线很久了,最近心血来潮想看一下这个验证码是骡子是马,我也翻阅了很多市面上的教程,都对该验证码有一定的简介,部分还停留在理论层面,本文将从浅到深......
  • 手机号 座机 正则验证
    座机可能的号码为:(1)12345678(2)1234567(3)010-12345678(4)0357-53608463(5)15200000000(11位的手机号)表达式为:^(((\d{3,4}-)?[0-9]{7,8})|(1(3|4|5|6|7|8|9)\d{9}))$表达式前半部分为座机号:(\d{3,4}-)?[0-9]{7,8})\d表示数字中的任意一个,\d{3,4}表示出现3或4个数字,-表示“-”,[......
  • SQL Server身份验证模式
            SQLServer是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQLServer身份验证。理解这些身份验证方式的概念与更改方式的操作,对于数据库管理员和开发者至关重要。本文将详细介绍身份验证方式的概念以及如何更改SQLServer的身......
  • 集合竞价逐笔数据,level2行情接口统计验证
    最近做集合竞价的策略,用的level2数据。集合竞价阶段推送数据量很大,但是不确定有没有因为网络原因的数据纰漏,所以需要验证一下。把今天所有的数据记录了日志,其中筛选了09:25集合竞价的推送:grep'2024/07/2909:25'quotes.log|greplv2level2行情结果如下:2024/07/2909:......
  • 京东最新旋转验证码识别代码
     今天京东旋转验证又又又更新了,样例如下:更新了很多新图片,我们再次进行了大量数据标记,完成了这款验证码的更新。现在正确率可以达到99%左右。下边是这款验证码的识别代码:importbase64importrequestsimportdatetimeimportnumpyasnpfromioimportBytesIOfrom......
  • <项目代码>YOLOv8 钢索缺陷检测<目标检测>
     YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如FasterR-CNN),YOLOv8具有更高的检测速度和实时性。1.数据集介绍数据集详情可以参考博主写的文章<数据集>钢索缺陷检测......
  • 正则表达式验证连续字符和数字
    functionverifyCompany(company){//不能连续字符(如123、abc)连续3位或3位以上if(!LxStr(company)){$.ecCommon.ecAlert({msg:'不允许录入3个连续或者重复数字、字母',});returnfalse;}//不能相同字符(如111、aaa)连续3位或3位以上varre=/......
  • 验证IP地址
    验证IP地址题目链接:牛客描述编写一个函数来验证输入的字符串是否是有效的IPv4或IPv6地址IPv4地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为0-255,用(".")分割。比如,172.16.254.1;同时,IPv4地址内的数不会以0开头。比如,地址172.16.254.01是不合法的......
  • BitNet.cpp:革新性的1比特LLM推理框架,让CPU也能驾驭百亿参数大模型!
    ......
  • 5分钟搞定:Java实现验证码智能识别_java_验证码识别
    24年12月截止了,赶紧来拿奖金!总计30万,SpringAIAlibaba应用框架挑战赛开赛点此了解利用大模型提高Java验证码识别的效率与精度在Java场景中,java识别验证码的需求非常普遍。传统的OCR方法虽然被广泛使用,但其效果并不总是稳定。现在,借助大模型的力量,java识别验证码变得更加......