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

[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.kler.cn/news/337266.html

相关文章:

  • Composer入门详解
  • C++中类和对象的基本概念
  • C#-委托delegate
  • 云计算Openstack Horizon
  • 前端推荐书单
  • 图解IP分类及子网掩码计算实例
  • AI学习指南深度学习篇-生成对抗网络(GAN)简介
  • Llama 3.2 视觉能力评估
  • RabbitMQ事务模块
  • vue3中el-input在form表单按下回车刷新页面
  • 销售秘籍:故事+观点+结论
  • 面试--Eurake
  • C#开发中如何在不破坏封装性下调用控件
  • python 实现最小路径和算法
  • HarmonyOS NEXT:实现电影列表功能展示界面
  • Python数据分析-远程办公与心理健康分析
  • 借助ChatGPT校对学术论文的10 个有效提示词指令
  • 【STM32开发之寄存器版】(五)-窗口看门狗WWDG
  • 利用大规模语言模型提高生物医学 NER 性能的新方法
  • 【Redis入门到精通九】Redis中的主从复制