当前位置: 首页 > news >正文

[C++]使用纯opencv部署yolov11-cls图像分类onnx模型

【算法介绍】

在C++中使用纯OpenCV部署YOLOv11-cls图像分类ONNX模型是一项具有挑战性的任务,因为YOLOv11通常是用PyTorch等深度学习框架实现的,而OpenCV本身并不直接支持加载和运行PyTorch模型。然而,可以通过一些间接的方法来实现这一目标,即将PyTorch模型转换为ONNX格式,然后使用OpenCV的DNN模块加载ONNX模型。

部署过程包括以下几个关键步骤:

  1. 确保开发环境已经安装了OpenCV 4.x(带有DNN模块)和必要的C++编译器。
  2. 将YOLOv11-cls模型从PyTorch转换为ONNX格式,这通常涉及使用PyTorch的torch.onnx.export函数。
  3. 使用OpenCV的DNN模块加载ONNX模型,并确保有模型的配置文件(描述模型架构)和类别名称文件。
  4. 预处理输入图像(如调整大小、归一化等),以符合模型的输入要求。
  5. 将预处理后的图像输入到模型中,并获取分类结果。
  6. 对分类结果进行后处理,包括解析输出等。

需要注意的是,由于YOLOv11是一个复杂的模型,其输出可能包含多个层的信息,因此需要仔细解析模型输出,并根据YOLOv11的具体实现进行后处理。此外,OpenCV的DNN模块对ONNX的支持可能有限,某些YOLOv11的特性可能无法在OpenCV中直接实现,此时可能需要寻找替代方案。

总之,使用纯OpenCV在C++中部署YOLOv11-cls图像分类模型需要深入理解YOLOv11的模型架构、OpenCV的DNN模块以及ONNX格式。

【效果展示】

【实现部分代码】

#include <iostream>
#include<opencv2/opencv.hpp>
#include<math.h>
#include<time.h>
#include "yolov11_cls.h"
using namespace std;
using namespace cv;
using namespace dnn;int main(int argc,char* argv[]) {if(argc==1){cout<<"please input the image path"<<endl;return 0;}string img_path = argv[1];string cls_model_path = "yolo11n-cls.onnx";Mat img = imread(img_path);Yolov11ClsOnnx cls_net;cls_net.LoadWeights(cls_model_path);auto result = cls_net.Inference(img);cout << result.class_name<<"===>"<<std::to_string(result.confidence) << endl;getchar();return 0;
}

【测试环境】

vs2019

cmake==3.24.3

opencv==4.8.0

【运行步骤】

通过cmake编译出exe后,执行

yolov11-cls.exe 【图片路径】即可

【完整源码下载】

https://download.csdn.net/download/FL1623863129/89853574

http://www.lryc.cn/news/455671.html

相关文章:

  • ​​​​​​​如何使用Immersity AI将图片转换成3D效果视频
  • 安全运营 -- GPO审计
  • thinkphp6入门(25)-- 分组查询 GROUP_CONCAT
  • 小米 MIX FOLD工程固件 更换字库修复分区 资源预览与刷写说明
  • Flutter全局统一自定义导航栏返回按钮
  • 微信图片的超能力:5大隐秘功能揭秘,让你成为信息处理大师
  • python实现RC4加解密算法
  • BLE MESH学习2——自定义MESH网络架构思考
  • 路由器的工作机制
  • Studying-多线程学习Part3 - condition_variable与其使用场景、C++11实现跨平台线程池
  • 开发自定义starter
  • Vue2电商平台(五)、加入购物车,购物车页面
  • 众数信科 AI智能体政务服务解决方案——寻知智能笔录系统
  • Redis篇(面试题 - 连环16炮)(持续更新迭代)
  • selenium元素定位
  • 美畅物联丨视频汇聚从“设”开始:海康威视摄像机设置详解
  • 聊天机器人羲和的代码04
  • Linux安装配置Jupyter Lab并开机自启
  • Java基础——`UUID.randomUUID()` 方法详细介绍
  • 前端面试常见手写代码题【详细篇】
  • 当代最厉害的哲学家改名大师颜廷利:北京、上海、广州和深圳房价精准预测
  • MySQL常用指令码
  • OpenHarmony(鸿蒙南向开发)——轻量系统内核(LiteOS-M)【扩展组件】
  • 官方ROM 免费下载! 王者归来! 华为秘盒media Q M310(续)
  • 【Docker】05-Docker部署前端项目
  • SQL进阶技巧:如何优化NULL值引发的数据倾斜问题?
  • 【09】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-Class类基础全解(属性、方法、继承复用、判断)
  • 快速提升波段交易技能:4种实用策略分享
  • LeetCode 11 Container with Most Water 解题思路和python代码
  • 【深度学习】损失函数