基于OpenVINOTM2023在LabVIEW中部署YOLOv8目标检测模型

作者:英特尔物联网行业创新大使 王立奇

目录

1.1  什么是LabVIEW

1.2 准备开发环境

1.2.1 安装LabVIEW

​编辑1.2.2 安装OpenVINO

1.2.3  安装Visual Studio 2022 Community

1.2.4  安装Ultralytics并导出YOLOv8模型

1.3 为LabVIEW调用编写OpenVINO dll封装函数

1.3.1 定义结构体lv_ov_engine

1.3.2  创建create_ir()函数

1.3.3 创建IE_Run函数

1.3.4 创建getResult()函数

1.3.5​​​​ 创建release函数

1.4  使用LabVIEW OpenVINO VI实现YOLOv8目标检测

1.5 结论


1.1  什么是LabVIEW

LabVIEW是测试测量与自动化行业常用的图形化开发环境,其优点有:

  1. 学习容易入门快,开发计算机视觉应用程序简单方便
  2. 自带机器视觉函数库(Vision Development模块),并提供支持GigE、USB3 Vision等标准总线的第三方相机的图像采集驱动程序(NI-IMAQdx),和OpenCV接口工具包(NIVision OpenCV Utilities),完全满足AI机器视觉应用程序的开发要求。

LabVIEW详细介绍,请参考:https://www.ni.com/zh-cn/shop/labview.html。

使用LabVIEW调用OpenVINO IR模型,可以快速完成深度学习项目开发与交付

1.2 准备开发环境

要完成在LabVIEW中调用OpenVINO格式的YOLOv8模型,需要安装:

  1. LabVIEW、Vision Development模块和NI-IMAQdx
  2. OpenVINO 2023.0
  3. Visual Studio 2022 Community
  4. Ultralytics YOLOv8

1.2.1 安装LabVIEW

LabVIEW请从https://www.ni.com/zh-cn/support/downloads/software-products/download.labview.html,下载LabVIEW安装文件。需要注意的是:请选择LabVIEW 64版本,并勾选Vision Development模块和NI-IMAQdx。

1.2.2 安装OpenVINO

OpenVINO分为OpenVINO™ 运行库(OpenVINO™ Runtime)和OpenVINO™开发工具集(OpenVINO™ Development Tools)。

  1. OpenVINO™运行库:一个提供C/C++/Python API的C++函数库。
  2. OpenVINO™开发工具集:一套包含模型优化器(Model Optimizer)、基准测试工具(Benchmark Tool)、训练后优化工具(Post-Training Optimization Tool)、模型下载器(Model Downloader)等工具的开发工具集。

请先用命令:pip install openvino-dev,安装OpenVINO™开发工具集。该命令在安装OpenVINO™开发工具集时,会同时将提供Python API的OpenVINO™运行库作为依赖项进行安装。

然后从OpenVINO官网,官网链接如下:

https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/overview.html。

下载并解压Windows版的OpenVINOTM 运行库,如下图所示:

本文将OpenVINO™运行库压缩包解压到了C:\Program Files (x86)\Intel\openvino,如下图所示。

1.2.3  安装Visual Studio 2022 Community

安装Visual Studio 2022 Community详细步骤请参考《在Windows中基于Visual Studio配置OpenVINO C++开发环境》。

1.2.4  安装Ultralytics并导出YOLOv8模型

YOLOv8是Ultralytics公司基于YOLO框架,发布的一款面向物体检测与跟踪、实例分割、图像分类和姿态估计任务的SOTA(State-Of-The-Art)模型工具套件。

首先,使用命令:pip install ultralytics,完成ultralytics软件包安装。

然后,使用命令:yolo export model=yolov8n.pt format=openvino half=True,导出yolov8n OpenVINO格式模型,如下图所示。

1.3 为LabVIEW调用编写OpenVINO dll封装函数

为了满足LabVIEW调用C++ dll函数的规则,需要编写OpenVINO dll封装函数。整个封装工作包括一个数据结构体和四个API函数:

  1. 结构体lv_ov_engine:定义OpenVINO推理时需要传递的数据结构
  2. create_ir():初始化OpenVINO Core对象并创建推理请求
  3. infer():输入预处理后的图像数据,执行推理计算
  4. getResult():获得推理计算结果
  5. release():释放资源

1.3.1 定义结构体lv_ov_engine

     定义OpenVINO推理时需要传递的数据结构,如下所示:

//定义OpenVINO推理时需要传递的数据结构

typedef struct lv_ov_engine {

    ov::Core ovCore;

    ov::InferRequest infer_request;

} OvEngineStruct;

1.3.2  创建create_ir()函数

    创建create_ir()函数,实现将OpenVINO IR模型载入指定的计算设备,并返回初始化好的推理请求,如下所示:

//将OpenVINO IR模型载入指定的推理设备

extern "C" __declspec(dllexport) OvEngineStruct * create_ir(char* xml_file, char* device_name)

{

    OvEngineStruct* p = new OvEngineStruct();

    auto compiled_model = p->ovCore.compile_model(xml_file, device_name);

    p->infer_request = compiled_model.create_infer_request();

    return p;

}

1.3.3 创建IE_Run函数

创建infer()函数,输入预处理后的图像数据,执行推理计算,如下所示:

//输入预处理后的图像数据,执行推理计算

extern "C" __declspec(dllexport) void infer(OvEngineStruct * p, float* inputData)

{

    ov::Tensor input_tensor0 = p->infer_request.get_input_tensor(0);

    auto data0 = input_tensor0.data<float>();

    memcpy(data0, inputData, 1 * 3 * 640 * 640 * sizeof(float));

    p->infer_request.infer();

}

​​​​​​​1.3.4 创建getResult()函数

创建getResult()函数,用于获取推理结果,如下所示:

//获取推理后的结果(yolov8输出张量的大小为1*84*8400)

extern "C" __declspec(dllexport) void getResult(OvEngineStruct * p, float* data)

{

    auto output = p->infer_request.get_output_tensor(0);

    const float* f = output.data<float>();

    memcpy(data, f, sizeof(float) * 1 * 84 * 8400);

}

1.3.5​​​​ 创建release函数

创建release函数,用于释放推理引擎资源,如下所示。

//释放推理引擎

extern "C" __declspec(dllexport) void release(OvEngineStruct * p)

{

    delete p;

}

完整代码请参考:openvino_vi_wrapper.cpp,在Visual Studio中将openvino_vi_wrapper.cpp编译为dll,然后在LabVIEW中调用并封装为4个VI,如下图所示。

1.4  使用LabVIEW OpenVINO VI实现YOLOv8目标检测

请读者先克隆本文的源代码到本地:

git clone https://github.com/wangstoudamire/lv_yolov8_openvino

按照README.md文档安装相关工具包,然后运行LabVIEW_OpenVINO_Demo.vi(运行之前请确保电脑已联网),运行结果如下图所示。

1.5 结论

基于OpenVINO,创建LabVIEW 推理计算VI,实现AI推理计算简单方便。结合LabVIEW图形化开发环境,可以快速开发AI应用程序。更多AI推理计算功能,可以参考VIRoboticsLabVIEW AI工具包

猜你喜欢

转载自blog.csdn.net/gc5r8w07u/article/details/131085402