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

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

如果只需要opencv去部署yolov11分类模型可以参考博文:https://blog.csdn.net/FL1623863129/article/details/142734819?spm=1001.2014.3001.5501

本文和 opencv去部署yolov11分类模型区别是:opencv部署推理核心使用opencv自带api,而本文推理核心用的onnxruntime,opencv只是辅助作用即读取图片

【算法介绍】

ONNX Runtime是微软推出的一款高性能的机器学习推理引擎框架,专注于加速机器学习模型的预测阶段。它支持多种运行后端,包括CPU、GPU等,使得开发者可以灵活选择最适合其应用场景的硬件平台。使用C++和ONNX Runtime部署YOLOv11-CLS图像分类ONNX模型,涉及到以下几个关键步骤:

  1. 环境配置:首先,需要安装ONNX Runtime库,可以通过从ONNX Runtime的GitHub存储库中下载预编译的二进制文件来安装,或者通过源代码进行构建。同时,还需要安装OpenCV等图像处理库,以便对输入图像进行预处理。
  2. 模型加载:加载YOLOv11-CLS的ONNX模型文件,通常涉及到指定模型的路径,并创建一个InferenceSession对象,该对象将用于后续的推理。
  3. 数据预处理:使用OpenCV等库对输入图像进行预处理,包括调整图像大小、归一化像素值等,以满足模型输入的要求。
  4. 模型推理:将预处理后的数据传递给InferenceSession对象,并调用其Run方法来执行推理。这将返回模型的输出,通常是一个包含分类结果的张量。
  5. 结果处理:解析模型的输出,提取有用的信息(如分类标签和置信度),并根据需要进行进一步的处理或可视化。

通过以上步骤,可以在C++中使用ONNX Runtime成功部署YOLOv11-CLS图像分类模型,实现高效的图像分类任务。

【效果展示】

【实现部分代码】

#pragma once
#include <iostream>
#include <opencv2/core.hpp>
#include <fstream>
#include "inference.h"
#include <chrono>


using namespace std;

int main(int argc, char *argv[])
{

    if (argc == 1)
    {
        std::cout << "Usage: main.exe <image_path>" << std::endl;
        return 0;
    }
    DL_INIT_PARAM params;
    params.labelPath = "class_names.txt";
    params.modelPath = "yolo11n-cls.onnx";
    params.modelType = YOLO_CLS_V11;
    params.imgSize = {224, 224};
    params.rectConfidenceThreshold = 0.4;
    params.iouThreshold = 0.0001;
    params.cudaEnable = false;

    auto starttime_1 = std::chrono::high_resolution_clock::now();
    std::unique_ptr<YOLO_V11> yolo(new YOLO_V11);
    yolo->CreateSession(params);
    auto starttime_3 = std::chrono::high_resolution_clock::now();
    auto duration_ms4 = std::chrono::duration_cast<std::chrono::milliseconds>(starttime_3 - starttime_1).count();
    std::cout << "[YOLO_V11]: warm up: " << duration_ms4 << "ms" << std::endl;
    std::string imagepath = argv[1];
    cv::Mat image = cv::imread(imagepath);
    auto starttime_2 = std::chrono::high_resolution_clock::now();
    auto results = yolo->Inference(image);
    auto starttime_4 = std::chrono::high_resolution_clock::now();
    auto duration_ms3 = std::chrono::duration_cast<std::chrono::milliseconds>(starttime_4 - starttime_2).count();
    std::cout << "[YOLO_V11]: inference time: " << duration_ms3 << " ms" << std::endl;
    for (const auto &result : results)
    {
        std::cout << "[YOLO_V11]: label is: " << result.className << ", confidence is: " << result.confidence << std::endl;
        std::string text = result.className + " " + std::to_string(result.confidence).substr(0, 4);
        cv::putText(image, text, cv::Point(10, 30), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 255, 0), 2);
    }

    return 0;
}

【测试环境】

vs2019

cmake==3.24.3

opencv==4.8.0

onnxruntime==1.16.3

【运行步骤】

通过cmake编译出exe后,执行

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

【完整源码下载】

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


http://www.kler.cn/news/335872.html

相关文章:

  • CSS基础-盒子模型(三)
  • 远程调用的问题以及eureka原理
  • JAVA学习-练习试用Java实现“回文数”
  • 高性能、编译器编写语言、编程语言的高低贵贱
  • c#里氏替换
  • Leetcode: 0041-0050题速览
  • 数据结构:基本概念及术语
  • 【代码随想录Day30】贪心算法Part04
  • 计算机毕业设计 校内跑腿业务系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 小论插头DP
  • Golang | Leetcode Golang题解之第454题四数相加II
  • Stable Diffusion绘画 | AI 图片智能扩充
  • 01 从0开始搭建django环境
  • 用HTML CSS JS打造企业级官网-源码直接可用
  • HTML5 新元素
  • ubuntu切换源方式记录(清华源、中科大源、阿里源)
  • MVCC(多版本并发控制)
  • JVM类加载过程
  • 信息学奥赛一本通 2100:【23CSPJ普及组】一元二次方程(uqe) | 洛谷 P9750 [CSP-J 2023] 一元二次方程
  • Scrapy:简单使用、xpath语法