什么是OpenVino?以及如何使用OpenVino运行yolo

这篇具有很好参考价值的文章主要介绍了什么是OpenVino?以及如何使用OpenVino运行yolo。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是OpenVino?以及如何使用OpenVino运行yolo

目录

Openvino简介

如何使用它?

构建源代码

Openvino IR模型

第一个Openvino示例

C语言示例

C++示例

使用OpenVino跑Yolo模型


Openvino简介

Openvino是由Intel开发的专门用于优化和部署人工智能推理的半开源的工具包,主要用于对深度推理做优化

Openvino内部集成了OpencvTensorFlow模块,除此之外它还具有强大的Plugin开发框架,允许开发者在Openvino之上对推理过程做优化。

Openvino整体框架为:Openvino前端→ Plugin中间层→ Backend后端

什么是OpenVino?以及如何使用OpenVino运行yolo

 Openvino的优点在于它屏蔽了后端接口,提供了统一操作的前端API,开发者可以无需关心后端的实现,例如后端可以是TensorFlow、Keras、ARM-NN,通过Plugin提供给前端接口调用,也就意味着一套代码在Openvino之上可以运行在多个推理引擎之上,Openvino像是类似聚合一样的开发包。

如何使用它?

构建源代码

1. 首先你需要在github上下载到它的源代码

git clone https://github.com/openvinotoolkit/openvino

2. 下载完成之后进入到openvino的目录,然后拉取openvino的子模块源代码

cd openvino
git submodule update --init --recursive

NOTE:如果你的网络不好,可以使用gitee方式拉取

chmod +x scripts/submodule_update_with_gitee.sh
./scripts/submodule_update_with_gitee.sh

3. 使用Openvino自带的脚本安装依赖

chmod +x install_build_dependencies.sh
sudo ./install_build_dependencies.sh

4. 从源码构建Openvino

首先创建一个build目录并进入

mkdir build && cd build

通过Cmake构建Openvino

cmake -DCMAKE_BUILD_TYPE=Release ..
make --jobs=$(nproc --all)

Openvino项目比较大,构建过程可能需要一定时间。

5. 环境配置

编译完成之后执行make install命令进行脚本自动化配置

安装完成之后会存放到/usr/local/runtime目录下

make install

Openvino IR模型

Openvino使用IR文件格式作为神经网络数据处理格式,IR文件格式是Openvino官方自己定义的,IR模型由两个文件组成:

XML文件

描述网络拓扑结构

BIN文件

包含网络权重数据,以IR文件格式存储

Openvino提供了工具来将任意模型格式转化为IR文件格式:mo.py

你可以在Openvino的源代码目录里找到:

tools/mo/openvino/tools/mo/mo.py

使用示例

tools/mo/openvino/tools/mo/mo.py --input_model your_model.pb --output_dir output_dir

执行之后会在输出目录下生成两个文件:xml、bin文件,需要值得注意的是Openvino不支持动态输入维度,你可以通过模型check工具来查看你的模型是否是动态输入

什么是OpenVino?以及如何使用OpenVino运行yolo

如果维度里显示?,代表是动态输入,大小是可变的,Openvino不支持动态输入,有两种方法可以修改,第一种是通过mo.py或IR文件格式指定,第二种是在代码里指定。

在使用mo.py时指定它的维度:

--input: 指定输入端口名称

--input_shape: 指定维度

tools/mo/openvino/tools/mo/mo.py --input_model your_model.pb --input Input:0 --input_shape [1,1]--output_dir output_dir

如果你的模型已经转化为IR文件格式则可以直接在xml里修改:

<layers>
                <layer id="0" name="Input" type="Parameter" version="opset1">
                        <data shape="?,1" element_type="f32" /> #修改这里将?改成1
                        <output>
                                <port id="0" precision="FP32" names="Input:0">
                                        <dim>-1</dim>
                                        <dim>1</dim>
                                </port>
                        </output>
                </layer>
</layers>

除此之外在xml里你还可以修改输入维度的类型,这些配置在compile模型时会Openvino会根据xml描述来分配不同的类型存储以及运算。

Openvino本身已经支持PB、ONNX格式,你可以不用转换成IR文件格式在Openvino里直接使用,在Compile阶段Openvino会自动将其转换成IR文件格式。

第一个Openvino示例

Openvino底层是使用C语言实现的,所以它可以提供给多个语言的使用。

C语言示例

首先包含Openvino基础头文件

#include <openvino/c/openvino.h>

初始化ov

ov_core_t* core = NULL;
ov_core_create(&core);
if(core == NULL) {
        printf("can't create core object\n");
        return -1;
}

读取模型到内存

ov_model_t* model = NULL; 
ov_core_read_model(core, "test.xml", NULL, &model);
if (model == NULL) {
          printf("can't read a model.\n");
          return -1;
}

编译模型,这一步需要指定要使用的Plugin

ov_compiled_model_t* compiled_model = NULL;
ov_core_compile_model(core, model, "CPU", 0, &compiled_model);
if (compiled_model == NULL) {
        printf("can't compile model.\n");
        return -1;
}

创建推理引擎

ov_infer_request_t* infer_request = NULL;
ov_compiled_model_create_infer_request(compiled_model, &infer_request);
if(infer_request == NULL) {
       printf("can't create infer request.\n");
       return -1;
}

获取输入Input

ov_tensor_t* input_tensor1 = NULL;
ov_infer_request_get_tensor(infer_request, "Input:0", &input_tensor1);
if (input_tensor1 == NULL) {
         printf("can't get tensor.\n");
         return -1;
}

获取输入tensor

void* data = NULL;
ov_tensor_data(input_tensor1, &data);
if (data == NULL) {
         printf("can't i642i32.\n");
         return -1;
}
float* data1 = (float*)data;

输入数据

data1[0] = 20.f;

开始推理

ov_infer_request_infer(infer_request);

获取推理结果并打印

ov_tensor_t* output_tensor = NULL;
void* data_out = NULL;
ov_infer_request_get_output_tensor(infer_request, &output_tensor);
if(output_tensor == NULL) {
          printf("can't get output tensor.\n");
          return -1;
}
ov_tensor_data(output_tensor, &data_out);
if(data_out == NULL) {
            printf("can't out i642i32.\n");
            return -1;
 }
float* out_data = (float*)data_out;
printf("%f\n", out_data[0]);

C++示例

初始化OpenVINO运行时核心

ov::Core core;

读取模型

std::shared_ptr<ov::Model> model = core.read_model("./Face.xml");

加载模型到内存并指定Plugin

ov::CompiledModel compiled_model = core.compile_model(model, "cpu");

获取模型的输入端口

auto input_port = compiled_model.input();

创建推理引擎

ov::InferRequest infer_request = compiled_model.create_infer_request();

输入数据

ov::Tensor input_tensor1 = infer_request.get_input_tensor(0);
auto data1 = input_tensor1.data<float>();
data1[0] = 60.f

开始推理

infer_request.infer();

获取输出并打印

auto output_tensor = infer_request.get_output_tensor(0);
const float *result = output_tensor_p8.data<const float>();
cout << result[0] << endl;

使用OpenVino跑Yolo模型

Openvino官方提供了YoloV7模型的示例,可以直接在Github上下载

git clone https://github.com/OpenVINO-dev-contest/YOLOv7_OpenVINO_cpp-python.git

除此之外你需要一个YoloV7的模型,你可以在这里下载到:YoloV7

下载一个你需要的模型,然后在将Yolo源码拉下来

git clone https://github.com/WongKinYiu/yolov7.git

OpenVino支持onnx模型,使用yolov7自带的导出py代码,将pt文件导出成onnx

python export.py --weights yolov7.pt

会在当前目录下生成一个yolov7.onnx的文件

然后进入到YOLOv7_OpenVINO_cpp-python目录下编译CPP代码

cd YOLOv7_OpenVINO_cpp-python
cd cpp
mkdir build
cmake ..
make

yolov7.onnxCopy到build目录下然后执行:

yolov7 yolov7.onnx ../data/horses.jpg 'CPU'

运行结果:

什么是OpenVino?以及如何使用OpenVino运行yolo文章来源地址https://www.toymoban.com/news/detail-425685.html

到了这里,关于什么是OpenVino?以及如何使用OpenVino运行yolo的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【OpenVINO™】在 MacOS 上使用 OpenVINO™ C# API 部署 Yolov5

    在 MacOS 上使用 OpenVINO™ C# API 部署 Yolov5 项目介绍 YOLOv5 是革命性的 \\\"单阶段\\\"对象检测模型的第五次迭代,旨在实时提供高速、高精度的结果,是世界上最受欢迎的视觉人工智能模型,代表了Ultralytics对未来视觉人工智能方法的开源研究,融合了数千小时研发中积累的经验教训

    2024年02月19日
    浏览(37)
  • OpenVINO2023使用简介

    先在anaconda中创建一个虚拟环境,该环境的python版本为3.7,之所以使用python3.7,是因为我在3.9上安装过程中出现不少bug,后面新建了一个3.7的环境才解决,我不知道是否由于和我已有环境中某些包不兼容,还是python3.9版本的问题,总是折腾了很久都没解决,最后新建了一个虚

    2024年02月10日
    浏览(29)
  • 使用OpenVINO™在算力魔方上加速stable diffusion模型

    作者:武卓博士 英特尔AI布道师            刘力        英特尔物联网行业创新大使 什么是 stable diffusion 模型? Stable Diffusion是stability.ai开源的AI图像生成模型,实现输入文字,生成图像的功能。Stable Diffusion将AI图像生成提升到了全新高度,将引发媒体创作领域的革命。

    2024年02月11日
    浏览(91)
  • OpenVINO 2022.3之二:Windows安装OpenVINO

    OpenVINO 2022.3之二:Windows安装OpenVINO 安装下载页 Download Intel® Distribution of OpenVINO™ Toolkit OpenVINO安装包分为两个选项: OpenVINO Runtime 和 OpenVINO Development Tools 。 OpenVINO Runtime包含用于在处理器设备上运行机器学习模型推理的核心库。 OpenVINO Development Tools是一组用于处理OpenVINO和O

    2024年02月11日
    浏览(217)
  • 【OpenVINO 】在 MacOS 上编译 OpenVINO C++ 项目

    前言 英特尔公司发行的模型部署工具OpenVINO™模型部署套件,可以实现在不同系统环境下运行,且发布的OpenVINO™ 2023最新版目前已经支持MacOS系统并同时支持在苹果M系列芯片上部署模型。在该项目中,我们将向大家展示如何在MacOS系统、M2芯片的Macbook Air电脑上,展示使用Op

    2024年02月02日
    浏览(40)
  • 使用Optimum-Intel OpenVINO™轻松文生图——几行代码加速Stable Diffusion

    作者 :武卓博士 英特尔AI布道师 随着AIGC模型越来越强大,并取得了更惊人的结果,任意运行AIGC模型, 比如Stable Diffusion,对于开发人员来说仍然面临一些挑战。首先,GPU的安装设置需要我们处理复杂的配置和兼容性问题,这可能既耗时又令人沮丧。此外,如果运行Stable Diff

    2024年02月08日
    浏览(44)
  • OpenVINO 2022.3之七:OpenVINO 预处理API提升模型推理性能

    OpenVINO™ 2022.3 提供OpenVINO™ Runtime原生的用于数据预处理的API函数。 如果没有预处理API,那么输入数据的预处理操作只能放在CPU上实现,CPU完成数据预处理后,再将预处理后的数据传给iGPU、VPU等AI加速计算设备进行推理计算。 有了预处理API后,就能将预处理操作集成到在模型

    2024年02月04日
    浏览(211)
  • 【OpenVINO】基于 OpenVINO C++ API 部署 RT-DETR 模型

      RT-DETR是在DETR模型基础上进行改进的,一种基于 DETR 架构的实时端到端检测器,它通过使用一系列新的技术和算法,实现了更高效的训练和推理,在前文我们发表了《基于 OpenVINO™ Python API 部署 RT-DETR 模型 | 开发者实战》,在该文章中,我们基于OpenVINO™ Python API 向大家展

    2024年01月22日
    浏览(56)
  • 【OpenVINO】基于 OpenVINO Python API 部署 RT-DETR 模型

    目录 1. RT-DETR 2.OpenVINO 3.环境配置 3.1模型下载环境 3.2模型部署环境 4.模型下载与转换 4.1PaddlePaddle模型下载 4.2IR模型转换 5.Python代码实现 5.1模型推理流程实现 6.预测结果展示 7.总结   RT-DETR是在DETR模型基础上进行改进的,一种基于 DETR 架构的实时端到端检测器,它通过使用一

    2024年02月02日
    浏览(80)
  • 【OpenVINO】基于 OpenVINO C# API 部署 RT-DETR 模型

      RT-DETR是在DETR模型基础上进行改进的,一种基于 DETR 架构的实时端到端检测器,它通过使用一系列新的技术和算法,实现了更高效的训练和推理,在前文我们发表了《基于 OpenVINO™ Python API 部署 RT-DETR 模型 | 开发者实战》和《基于 OpenVINO™ C++ API 部署 RT-DETR 模型 | 开发者实

    2024年01月23日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包