基于 OpenVINO, yolov5 推理

在这里插入图片描述

OpenVINO 是英特尔开发的一款功能强大的深度学习工具包,可实现跨多个硬件平台的优化神经网络推理。在本文中,我们讨论了 OpenVINO 的特性和优势,以及它如何与领先的计算机视觉平台 Viso Suite 集成,以构建和交付可扩展的应用程序。

​🇶🇦 什么是 OpenVINO?

OpenVINO 是英特尔开发的跨平台深度学习工具包。该名称代表“开放式视觉推理和神经网络优化”。OpenVINO 专注于通过面向英特尔硬件平台的一次写入、随处部署的方法优化神经网络推理。

该工具包在 Apache License 2.0 版下免费使用,有两个版本:

● OpenVINO 工具包,由开源社区支持
● Intel Distribution of OpenVINO toolkit,由 Intel 支持。

使用 OpenVINO 工具包,软件开发人员可以通过与应用逻辑集成的高级 C++ 推理引擎 API选择模型并部署预训练的深度学习模型(YOLO v3、ResNet 50等)。

因此,OpenVINO 提供集成功能来加快应用程序和解决方案的开发,这些应用程序和解决方案使用计算机视觉、自动语音识别、自然语言处理(NLP)、推荐系统、机器学习等解决多项任务。


🚢 安装 OpenVINO

  1. 安装地址: https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/download.html?VERSION=v_2022_3_1&ENVIRONMENT=RUNTIME&OP_SYSTEM=WINDOWS&DISTRIBUTION=ARCHIVE
  2. 这里我下载的是 2022.3.1 Runtime OpenVINO Archives 版本.
  3. 然后拷贝到 C:\Program Files (x86)\Intel 下。
  4. 使用 python 安装 openvino-env (别的根据需求来安装),详细安装步骤可参考: https://docs.openvino.ai/2023.2/openvino_docs_install_guides_installing_openvino_from_archive_windows.html
    pip install -r tools\requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
    pip install -r tools\requirements_onnx.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
    
  5. 使用 mo -h 来验证是否安装正确。

🚀 Export Model

  • pt convert to onnx
    python export.py --weights ./weights/yolov5s.pt --img 640 --batch 1 --include onnx
    
  • onnx convert to openvino
    # 这里我将归一化参数写入模型中了, 这样前处理可以不用做归一化处理了
    # data_type 32: FP32 16: FP16
    mo --input_model ./weights/yolov5s.onnx --output_dir ./weights --data_type FP16 --mean_values [0,0,0] --scale_values [255,255,255]
    
  • pt convert to openvino
    python export.py --weights ./weights/yolov5s.pt --img 640 --batch 1 --include openvino
    

🍋​ Yolov5

  • 获取当前支持的所有的AI硬件推理设备, 如果输出没有设备,则可尝试更新显卡驱动. https://www.intel.com/content/www/us/en/support/products/80939/graphics.html

    #include <openvino/openvino.hpp>
    #include <iostream>
    #include <vector>
    int main() {
         
        ov::Core ie;
        //获取当前支持的所有的AI硬件推理设备
        std::vector<std::string> devices = ie.get_available_devices();
        for (int i = 0; i < devices.size(); i++) {
         
            std::cout << devices[i] << std::endl;
        }
        system("pause");
        return 0;
    }
    
    // ----------------------- output -----------------------
    CPU
    GNA
    GPU
    
  • 推理

    1. 代码来自这位博主, 详细过程可参考博主博客 https://blog.csdn.net/weixin_45650500/article/details/134455535
    2. 如果感觉初始化时间等待过长,可尝试添加缓存,则第一次加载过后,再次初始化会很快. core.set_property(ov::cache_dir("cache"));
    #include <opencv2/dnn.hpp>
    #include <openvino/openvino.hpp>
    #include <opencv2/opencv.hpp>
    
    using namespace std;
    
    const float SCORE_THRESHOLD = 0.2;
    const float NMS_THRESHOLD = 0.4;
    const float CONFIDENCE_THRESHOLD = 0.4
    
    struct Detection
    {
         
        int class_id;
        float confidence;
        cv::Rect box
  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!关于使用YOLOv5OpenVINO进行C++推理的问题,我可以给你一些指导。 首先,确保你已经安装了OpenVINOOpenCV,并设置了相应的环境变量。接下来,你需要下载YOLOv5模型的权重文件,可以从YOLOv5的官方GitHub库中获取。 然后,你可以使用OpenVINO的Model Optimizer工具将YOLOv5的权重文件转换为OpenVINO的IR格式。在命令行中运行以下命令: ``` python mo.py --input_model yolov5s.pt --model_name yolov5s --data_type FP16 --output_dir <output_directory> ``` 其中,`yolov5s.pt`是YOLOv5权重文件的路径,`yolov5s`是模型名称,`FP16`是推理数据类型(可以根据需要选择FP32、FP16、INT8),`<output_directory>`是转换后的IR文件输出目录。 转换完成后,你将获得`.xml`和`.bin`文件,这些是OpenVINO所需的IR模型文件。接下来,你可以使用OpenVINO的C++ API进行推理。 在C++代码中,你需要加载IR模型并创建Inference Engine对象。然后,设置输入和输出的Blob对象,并将输入数据填充到输入Blob中。最后,调用推理引擎进行推理并获取输出结果。 以下是一个简单的示例代码: ```cpp #include <iostream> #include <inference_engine.hpp> int main() { // 加载Inference Engine插件 InferenceEngine::Core ie; // 读取IR模型文件 InferenceEngine::CNNNetwork network = ie.ReadNetwork("path_to_model.xml", "path_to_model.bin"); // 加载模型到设备 InferenceEngine::ExecutableNetwork execNetwork = ie.LoadNetwork(network, "device_name"); // 创建推理引擎 InferenceEngine::InferRequest inferRequest = execNetwork.CreateInferRequest(); // 设置输入和输出Blob对象 InferenceEngine::Blob::Ptr inputBlob = inferRequest.GetBlob("input_name"); InferenceEngine::Blob::Ptr outputBlob = inferRequest.GetBlob("output_name"); // 填充输入数据到输入Blob对象 // ... // 进行推理 inferRequest.Infer(); // 获取输出结果 // ... return 0; } ``` 以上代码中的`path_to_model.xml`和`path_to_model.bin`应替换为你转换后的IR模型文件的路径,`device_name`应替换为你想要使用的推理设备的名称(例如CPU、GPU等),`input_name`和`output_name`应替换为模型的输入和输出名称。 希望这些信息能帮到你!如果有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值