yolov8 opencv dnn部署自己的模型

news/2024/7/11 1:19:45 标签: YOLO, opencv, dnn

源码地址

  1. 本人使用的opencv c++ github代码,代码作者非本人

使用github源码结合自己导出的onnx模型推理自己的视频

推理条件

windows 10
Visual Studio 2019
Nvidia GeForce GTX 1070
opencv4.7.0 (opencv4.5.5在别的地方看到不支持yolov8的推理,所以只使用opencv4.7.0)

导出yolov8模型

yolov8版本: version = ‘8.0.110’
首先将default.yaml中的一些配置修改以下,将只修改的部分贴上去,注意下面的batch一定要设置为1

task: detect  # YOLO task, i.e. detect, segment, classify, pose
mode: export  # YOLO mode, i.e. train, val, predict, export, track, benchmark

# Train settings -------------------------------------------------------------------------------------------------------
# model: C:\Users\HUST\Desktop\yolov8_ultralytics\ultralytics\models\v8\yolov8.yaml # path to model file, i.e. yolov8n.pt, yolov8n.yaml
model: C:\Users\Administrator\Desktop\yolov8_ultralytics\runs\detect\yolov8n\weights\best.pt # path to model file, i.e. yolov8n.pt, yolov8n.yaml
data: C:\Users\Administrator\Desktop\yolov8_ultralytics/ultralytics/datasets/custom.yaml # path to data file, i.e. coco128.yaml
weights: yolov8n.pt
epochs: 1  # number of epochs to train for
patience: 50  # epochs to wait for no observable improvement for early stopping of training
batch: 1  # number of images per batch (-1 for AutoBatch)

default.yaml中的export部分的配置也需要修改

# Export settings ------------------------------------------------------------------------------------------------------
format: onnx  # format to export to
keras: False  # use Keras
optimize: False  # TorchScript: optimize for mobile
int8: False  # CoreML/TF INT8 quantization
dynamic: False  # ONNX/TF/TensorRT: dynamic axes
simplify: False  # ONNX: simplify model
opset: 12 # ONNX: opset version (optional)
workspace: 4  # TensorRT: workspace size (GB)
nms: False  # CoreML: add NMS

然后直接运行ultralytics/yolo/engine/exporter.py
在这里插入图片描述
测试一下导出的best.onnx可不可用,直接正常的val即可
在这里插入图片描述
将best.onnx模型放入netron中,onnx的输入和输出如下图1所示
在这里插入图片描述
在这里插入图片描述 图 1 图1 1

c++部署

先将源码复制到下图位置中
在这里插入图片描述

环境和代码的大致步骤跟yolov5 opencv dnn部署 github代码一样

由于源码中使用的输入尺寸如图2是640 * 480的,我导出模型时使用的模型的输入如图1是640 * 640,所以需要对尺寸的那一部分需要进行修改,修改为640 * 640

const float INPUT_WIDTH = 640.0;
const float INPUT_HEIGHT = 640.0;
const float SCORE_THRESHOLD = 0.45;
const float NMS_THRESHOLD = 0.5;
const float CONFIDENCE_THRESHOLD = 0.25;

在这里插入图片描述
在这里插入图片描述 图 2 图2 2在进行修改之后,就可以直接运行yolo.cpp

c++推理结果

yolov8_deploy_fire


http://www.niftyadmin.cn/n/5343355.html

相关文章

队列及其操作(c++题解)

题目描述 队列(queue):在线性表的一端插入元素,在另一端删除元素,所以遵循先进先出( **FIFO**)原则,元素从队尾进,队首出,不允许插队! 其中删除…

✨JavaScript 第十一章(深入理解null与undefined)

在JavaScript的世界里,null和undefined是两个表示“没有值”的概念,但它们之间有着微妙的差别。undefined是当一个变量被声明了,但没有被赋值时,它的默认值。这是JavaScript引擎的工作,我们通常不会手动设置一个变量为…

05-使用结构体构建相关数据

上一篇: 04-了解所有权 结构体(struct)是一种自定义数据类型,可以将多个相关值打包命名,组成一个有意义的组。如果你熟悉面向对象的语言,那么结构体就像是对象的数据属性。在本章中,我们将对元组…

8-Docker网络命令之rm

1.rm介绍 Docker网络命令rm是用来默认或自定义创建的网络 2.rm用法 docker network rm [参数] NETWORK [root@centos79 ~]# docker network rm --helpUsage: docker network rm NETWORK [NETWORK...]Remove one or more networksAliases:docker network rm, docker networ…

python爬虫——抓取表格pandas当爬虫用超简单

pandas还能当爬虫用&#xff0c;你敢信吗&#xff1f;而且超级简单&#xff0c;两行代码就趴下来 只要想提取的表格是属于<table 标签内&#xff0c;就可以使用pd.read_html()&#xff0c;它可以将网页上的表格都抓取下来&#xff0c;并以DataFrame的形式装在一个列表中返回…

Java线程池七大参数详解和配置(面试重点!!!)

一、corePoolSize核心线程数 二、maximunPoolSize最大线程数 三、keepAliveTime空闲线程存活时间 四、unit空闲线程存活时间的单位 五、workQueue线程工作队列 1、ArrayBlockingQueue FIFO有界阻塞队列 2、LinkedBlockingQueue FIFO无限队列 3、PriorityBlockingQueue V…

DAY08_SpringBoot—整合Mybatis-Plus

目录 1 MybatisPlus1.1 MP介绍1.2 MP的特点1.3 MybatisPlus入门案例1.3.1 导入jar包1.3.2 编辑POJO对象1.3.3 编辑Mapper接口1.3.4 编译YML配置文件1.3.5 编辑测试案例 1.4 MP核心原理1.4.1 需求1.4.2 原理说明1.4.3 对象转化Sql原理 1.5 MP常规操作1.5.1 添加日志打印1.5.2 测…

Django入门,十分钟学会登录网页

我们假定你已经阅读了 安装 Django。你能知道 Django 已被安装&#xff0c;且安装的是哪个版本&#xff0c;通过在命令提示行输入命令 cmd黑窗口运行&#xff0c;不懂cmd百度一下 python -m django --version 如果没出现版本&#xff0c;就是没安装&#xff0c;那么用pip安装…