开发者实战 | 英特尔开发套件使用 OpenVINO™ C# API 部署 Yolov8 模型

2023/10/19 17:00
阅读数 32

点击蓝字

关注我们,让开发变得更有趣

作者:颜国进 英特尔边缘计算创新大使


英特尔® 发行版 OpenVINO™ 工具套件[1] 基于 oneAPI 而开发,可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,适用于从边缘到云的各种英特尔平台上,帮助用户更快地将更准确的真实世界结果部署到生产系统中。通过简化的开发工作流程, OpenVINO™ 可赋能开发者在现实世界中部署高性能应用程序和算法。


C# 是由 C 和 C++ 衍生出来的一种安全的、稳定的、简单的、优雅的面向对象编程语言。C# 综合了 VB 简单的可视化操作和 C++ 的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为 .NET 开发的首选语言。然而 OpenVINO™ 未提供 C# 语言接口,这对在 C# 中使用 OpenVINO™ 带来了很多麻烦,在之前的工作中,我们推出了 OpenVINO™ C# API[2] ,旨在推动 OpenVINO™在 C# 领域的应用,目前已经成功在 Window 平台实现使用。在本文中,我们将介绍如何在 英特尔开发套件 AlxBoard 上基于 Linux 系统实现 OpenVINO™ C# API。


项目中所使用的代码已上传至 OpenVINO™ C# API 仓库中,GitHub 网址为:


https://github.com/guojin-yan/OpenVINO-CSharp-API/blob/csharp3.0/tutorial_examples/AlxBoard_deploy_yolov8/Program.cs

(复制链接到浏览器打开)


1. 英特尔开发套件 AlxBoard 介绍

图 1 英特尔开发套件 AlxBoard 介绍


1.1 产品定位


英特尔开发套件 AlxBoard 是英特尔开发套件官方序列中的一员,专为入门级人工智能应用和边缘智能设备而设计。英特尔开发套件 AlxBoard 能完美胜人工智能学习、开发、实训、应用等不同应用场景。该套件预装了英特尔 OpenVINO™ 工具套件、模型仓库和演示。


套件主要接口与 Jetson Nano 载板兼容,GPIO 与树莓派兼容,能够最大限度地复用成熟的生态资源。这使得套件能够作为边缘计算引擎,为人工智能产品验证和开发提供强大支持;同时,也可以作为域控核心,为机器人产品开发提供技术支撑。


使用英特尔开发套件 AlxBoard,您将能够在短时间内构建出一个出色的人工智能应用应用程序。无论是用于科研、教育还是商业领域,英特尔开发套件 AlxBoard 都能为您提供良好的支持。借助 OpenVINO™ 工具套件,CPU、iGPU 都具备强劲的 AI 推理能力,支持在图像分类、目标检测、分割和语音处理等应用中并行运行多个神经网络。


1.2 产品参数



1.3 AI 推理单元


借助 OpenVINO 工具,能够实现 CPU+iGPU 异构计算推理,IGPU 算力约为 0.6TOPS



2. 配置 .NET 环境


.NET 是一个免费的跨平台开源开发人员平台 ,用于构建多种应用程序。下面将演示英特尔开发套件 AlxBoard 如何在 Ubuntu 20.04 上安装 .NET 环境,支持 .NET Core 2.0-3.1 系列以及.NET 5-8 系列,如果你的英特尔开发套件 AlxBoard 使用的是其他 Linux 系统,你可以参考在 Linux 发行版上安装 .NET - .NET | Microsoft Learn[3]


2.1 添加 Microsoft 包存储库


使用 APT 进行安装可通过几个命令来完成。 安装 .NET 之前,请运行以下命令,将 Microsoft 包签名密钥添加到受信任密钥列表,并添加包存储库。


打开终端并运行以下命令:

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.debsudo dpkg -i packages-microsoft-prod.debrm packages-microsoft-prod.deb

左滑查看更多


下图为输入上面命令后控制台的输出:

图 2 1.2.1 添加 Microsoft 包存储库输出


2.2 安装 SDK


.NET SDK 使你可以通过 .NET 开发应用。 如果安装 .NET SDK,则无需安装相应的运行时。 若要安装 .NET SDK,请运行以下命令:

sudo apt-get updatesudo apt-get install -y dotnet-sdk-3.1

左滑查看更多


下图为安装后控制台的输出:

图 3 安装 SDK 输出


2.3 测试安装


通过命令行可以检查 SDK 版本以及 Runtime 时版本。

dotnet --list-sdksdotnet --list-runtimes

左滑查看更多


下图为输入测试命令后控制台的输出:

图 4 SDK 版本以及 Runtime 版本


2.4 测试控制台项目


在 linux 环境下,我们可以通过 dotnet 命令来创建和编译项目,项目创建命令为:

dotnet new <project_type> -o <project name>

左滑查看更多


此处我们创建一个简单测试控制台项目:

dotnet new console -o test_net6.0cd test_net6.0dotnet run

左滑查看更多


下图为输入测试命令后控制台的输出以及项目文件夹文件情况,C# 项目会自动创建一个 Program.cs 程序文件,里面包含了程序运行入口主函数,同时还会创建一个 *.csproj 文件,负责指定项目编译中的一些配置。


图 5 控制台项目


以上就是 .NET 环境的配置步骤,如果你的环境与本文不匹配,可以通过 .NET 文档 | Microsoft Learn[4] 获取更多安装步骤。


3. 安装 OpenVINO™ Runtime


OpenVINO™ 有两种安装方式: OpenVINO™ Runtime 和OpenVINO™ Development Tools。OpenVINO™ Runtime 包含用于在处理器设备上运行模型部署推理的核心库。OpenVINO™ Development Tools 是一组用于处理 OpenVINO™ 和 OpenVINO™ 模型的工具,包括模型优化器、OpenVINO™ Runtime、模型下载器等。在此处我们只需要安装 OpenVINO™ Runtime 即可。


3.1 下载 OpenVINO™ Runtime


访问 Download the Intel Distribution of OpenVINO™ Toolkit[5] 页面,按照下面流程选择相应的安装选项,在下载页面,由于我们的设备使用的是 Ubuntu20.04,因此下载时按照指定的编译版本下载即可。


图 6 OpenVINO™ Runtime 下载


3.2 解压安装包


我们所下载的 OpenVINO™ Runtime 本质是一个 C++ 依赖包,因此我们把它放到我们的系统目录下,这样在编译时会根据设置的系统变量获取依赖项。首先在系统文件夹下创建一个文件夹:

sudo mkdir -p /opt/intel

左滑查看更多


然后解压缩我们下载的安装文件,并将其移动到指定文件夹下:

tar -xvzf l_openvino_toolkit_ubuntu20_2022.3.1.9227.cf2c7da5689_x86_64.tgzsudo mv l_openvino_toolkit_ubuntu20_2022.3.1.9227.cf2c7da5689_x86_64 /opt/intel/openvino_2023.1

左滑查看更多


3.3 安装依赖


接下来我们需要安装 OpenVINO™ Runtime 所有的依赖项,通过命令行输入以下命令即可:

cd /opt/intel/openvino_2022.3.1/sudo -E ./install_dependencies/install_openvino_dependencies.sh
左滑查看更多


图 7 安装 OpenVINO™ Runtime 依赖项


3.4 配置环境变量


安装完成后,我们需要配置环境变量,以保证在调用时系统可以获取对应的文件,通过命令行输入以下命令即可:

source /opt/intel/openvino_2022.3.1/setupvars.sh

左滑查看更多


以上就是 OpenVINO™ Runtime 环境的配置步骤,如果你的环境与本文不匹配,可以通过 Install OpenVINO™ Runtime on Linux — OpenVINO™ documentation — Version(2023.1) [6]获取更多安装步骤。


配置 AlxBoard_deploy_yolov8 项目


项目中所使用的代码已经放在 GitHub 仓库 AlxBoard_deploy_yolov8[7],大家可以根据情况自行下载和使用,下面我将会从头开始一步步构建 AlxBoard_deploy_yolov8 项目。


4.1 创建 AlxBoard_deploy_yolov8 项目


在该项目中,我们需要使用 OpenCvSharp,该依赖目前在 Ubutun 平台最高可以支持 .NET Core 3.1,因此我们此处创建一个 .NET Core 3.1 的项目,使用 Terminal 输入以下指令创建并打开项目文件:

dotnet new console --framework "netcoreapp3.1" -o AlxBoard_deploy_yolov8cd AlxBoard_deploy_yolov8

左滑查看更多


图 8 1.4.1 创建 AlxBoard_deploy_yolov8 项目


创建完项目后,将 AlxBoard_deploy_yolov8 的代码内容替换到创建的项目中的 Program.cs 文件中.


4.2 添加 OpenVINO™ C# API 依赖


由于 OpenVINO™ C# API 当前正处于开发阶段,还未创建 Linux 版本的 NuGet Package,因此需要通过下载项目源码以项目引用的方式使用。


下载源码


通过 Git 下载项目源码,新建一个 Terminal,并输入以下命令克隆远程仓库,将该项目放置在 AlxBoard_deploy_yolov8 同级目录下。

git clone https://github.com/guojin-yan/OpenVINO-CSharp-API.gitcd OpenVINO-CSharp-API

左滑查看更多


本文的项目目录为:

Program--|-AlxBoard_deploy_yolov8--|-OpenVINO-CSharp-API

左滑查看更多


 修改 OpenVINO™ 依赖


由于项目源码的 OpenVINO™ 依赖与本文设置不同,因此需要修改 OpenVINO™ 依赖项的路径,主要通过修改OpenVINO-CSharp-API/src/CSharpAPI/native_methods/ov_base.cs 文件即可,修改内容如下:

rivate const string dll_extern = "./openvino2023.1/openvino_c.dll";---修改为--->private const string dll_extern = "libopenvino_c.so";

左滑查看更多


添加项目依赖


在 Terminal 输入以下命令,即可将 OpenVINO™ C# API 添加到 AlxBoard_deploy_yolov8 项目引用中。

dotnet add reference ./../OpenVINO-CSharp-API/src/CSharpAPI/CSharpAPI.csproj

左滑查看更多


添加环境变量


该项目需要调用 OpenVINO™ 动态链接库,因此需要在当前环境下增加 OpenVINO™ 动态链接库路径:

export LD_LIBRARY_PATH=/opt/intel/openvino_2023.0/runtime/lib/intel64

左滑查看更多


4.3 添加 OpenCvSharp


安装 NuGet Package


OpenCvSharp 可以通过 NuGet Package 安装,只需要在 Terminal 输入以下命令:

dotnet add package OpenCvSharp4_.runtime.ubuntu.20.04-x64dotnet add package OpenCvSharp4

左滑查看更多


添加环境变量


将以下路径添加到环境变量中:

export LD_LIBRARY_PATH=/home/ygj/Program/OpenVINO-CSharp-API/tutorial_examples/AlxBoard_deploy_yolov8/bin/Debug/netcoreapp3.1/runtimes/ubuntu.20.04-x64/native

左滑查看更多


/bin/Debug/netcoreapp3.1/runtimes/ubuntu.20.04-x64/native 是 AlxBoard_deploy_yolov8 编译后生成的路径,该路径下存放了 libOpenCvSharpExtern.so 文件,该文件主要是封装的 OpenCV 中的各种接口。也可以将该文件拷贝到项目运行路径下。


检测 libOpenCvSharpExtern 依赖


由于 libOpenCvSharpExtern.so 是在其他环境下编译好的动态链接库,本机电脑可能会缺少相应的依赖,因此可以通过 ldd 命令检测。

ldd libOpenCvSharpExtern.so

左滑查看更多


图 9 检测 libOpenCvSharpExtern 依赖


如果输出内容中没有 no found 的,说明不缺少依赖,如果存在,则需要安装缺少的依赖项才可以正常使用。


添加完项目依赖以及 NuGet Package 后,项目的配置文件内容为:

<Project Sdk="Microsoft.NET.Sdk">  <ItemGroup>    <ProjectReference Include="..\OpenVINO-CSharp-API\src\CSharpAPI\CSharpAPI.csproj" />  </ItemGroup>  <ItemGroup>    <PackageReference Include="OpenCvSharp4" Version="4.8.0.20230708" />    <PackageReference Include="OpenCvSharp4_.runtime.ubuntu.20.04-x64" Version="4.8.0.20230708" />  </ItemGroup>  <PropertyGroup>    <OutputType>Exe</OutputType>    <TargetFramework>netcoreapp3.1</TargetFramework>  </PropertyGroup></Project>

左滑查看更多


5. 运行 AlxBoard_deploy_yolov8 项目


该项目测试所使用的模型与文件都可以在 OpenVINO-CSharp-API 中找到,因此下面我们通过 OpenVINO-CSharp-API 仓库下的模型与文件进行测试。


通过 dotnet 运行,只需要运行以下命令即可。

dotnet run <args>

左滑查看更多


<args> 参数设指的是模型预测类型、模型路径、图片文件路径参数,预测类型输入包括: 'det'、'seg'、'pose'、'cls' 四种类型;默认推理设备设置为'AUTO',对于'det'、'seg'预测,可以设置参数,如果设置该参数,会将结果绘制到图片上,如果未设置,会通过控制台打印出来。


5.1 编译运行 Yolov8-det 模型


编译运行命令为:

dotnet run det /home/ygj/Program/OpenVINO-CSharp-API/model/yolov8/yolov8s.xml /home/ygj/Program/OpenVINO-CSharp-API/dataset/image/demo_2.jpg GPU.0 /home/ygj/Program/OpenVINO-CSharp-API/dataset/lable/COCO_lable.txt

左滑查看更多


模型推理输出结果为:

---- OpenVINO INFO----Description : OpenVINO RuntimeBuild number: 2023.1.0-12185-9e6b00e51cd-releases/2023/1Set inference device GPU.0.[INFO] Loading model files: /home/ygj/Program/OpenVINO-CSharp-API/model/yolov8/yolov8s.xml[INFO] model name: torch_jit[INFO]   inputs:[INFO]     input name: images[INFO]     input type: f32[INFO]     input shape: Shape : [1, 3, 640, 640][INFO]   outputs:[INFO]     output name: output0[INFO]     output type: f32[INFO]     output shape: Shape : [1, 84, 8400][INFO] Read image files: /home/ygj/Program/OpenVINO-CSharp-API/dataset/image/demo_2.jpg
Detection result :
1: 0 0.89   (x:744 y:43 width:388 height:667)2: 0 0.88   (x:149 y:202 width:954 height:507)327 0.72   (x:435 y:433 width:98 height:284)

左滑查看更多


图 10 Yolov8-det 模型预测输出


5.2  编译运行 Yolov8-cls 模型


编译运行命令为:

dotnet run cls /home/ygj/Program/OpenVINO-CSharp-API/model/yolov8/yolov8s-cls.xml /home/ygj/Program/OpenVINO-CSharp-API/dataset/image/demo_7.jpg GPU.0

左滑查看更多


模型推理输出结果为:

--- OpenVINO INFO----Description : OpenVINO RuntimeBuild number: 2023.1.0-12185-9e6b00e51cd-releases/2023/1Set inference device GPU.0.[INFO] Loading model files: /home/ygj/Program/OpenVINO-CSharp-API/model/yolov8/yolov8s-cls.xml[INFO] model name: torch_jit[INFO]   inputs:[INFO]     input name: images[INFO]     input type: f32[INFO]     input shape: Shape : [1, 3, 224, 224][INFO]   outputs:[INFO]     output name: output0[INFO]     output type: f32[INFO]     output shape: Shape : [1, 1000][INFO] Read image files: /home/ygj/Program/OpenVINO-CSharp-API/dataset/image/demo_7.jpg

Classification Top 10 result :
classid probability------- -----------294     0.992173269     0.002861296     0.002111295     0.000714270     0.000546276     0.000432106     0.000159362     0.000147260     0.000078272     0.000070

左滑查看更多


5.3 编译运行 Yolov8-pose 模型


编译运行命令为:

dotnet run pose /home/ygj/Program/OpenVINO-CSharp-API/model/yolov8/yolov8s-pose.xml /home/ygj/Program/OpenVINO-CSharp-API/dataset/image/demo_9.jpg GPU.0

左滑查看更多


模型推理输出结果为:

---- OpenVINO INFO----Description : OpenVINO RuntimeBuild number: 2023.1.0-12185-9e6b00e51cd-releases/2023/1Set inference device GPU.0.[INFO] Loading model files: /home/ygj/Program/OpenVINO-CSharp-API/model/yolov8/yolov8s-pose.xml[INFO] model name: torch_jit[INFO]   inputs:[INFO]     input name: images[INFO]     input type: f32[INFO]     input shape: Shape : [1, 3, 640, 640][INFO]   outputs:[INFO]     output name: output0[INFO]     output type: f32[INFO]     output shape: Shape : [1, 56, 8400][INFO] Read image files: /home/ygj/Program/OpenVINO-CSharp-API/dataset/image/demo_9.jpg

Classification result :
1: 1   0.94   (x:104 y:22 width:152 height:365) Nose: (188 ,60 ,0.93) Left Eye: (192 ,53 ,0.83) Right Eye: (180 ,54 ,0.90) Left Ear: (196 ,53 ,0.50) Right Ear: (167 ,56 ,0.76) Left Shoulder: (212 ,92 ,0.93) Right Shoulder: (151 ,93 ,0.94) Left Elbow: (230 ,146 ,0.90) Right Elbow: (138 ,142 ,0.93) Left Wrist: (244 ,199 ,0.89) Right Wrist: (118 ,187 ,0.92) Left Hip: (202 ,192 ,0.97) Right Hip: (168 ,193 ,0.97) Left Knee: (184 ,272 ,0.96) Right Knee: (184 ,276 ,0.97) Left Ankle: (174 ,357 ,0.87) Right Ankle: (197 ,354 ,0.88)

左滑查看更多


图 11 Yolov8-pose 模型预测输出


5.4 运行 Yolov8-seg 模型


编译运行命令为:

dotnet run seg /home/ygj/Program/OpenVINO-CSharp-API/model/yolov8/yolov8s-seg.xml /home/ygj/Program/OpenVINO-CSharp-API/dataset/image/demo_2.jpg GPU.0 /home/ygj/Program/OpenVINO-CSharp-API/dataset/lable/COCO_lable.txt

左滑查看更多


模型推理输出结果为:

---- OpenVINO INFO----Description : OpenVINO RuntimeBuild number: 2023.1.0-12185-9e6b00e51cd-releases/2023/1Set inference device GPU.0.[INFO] Loading model files: /home/ygj/Program/OpenVINO-CSharp-API/model/yolov8/yolov8s-seg.xml47[INFO] model name: torch_jit[INFO]   inputs:[INFO]     input name: images[INFO]     input type: f32[INFO]     input shape: Shape : [1, 3, 640, 640][INFO]   outputs:[INFO]     output name: output0[INFO]     output type: f32[INFO]     output shape: Shape : [1, 116, 8400][INFO] Read image files: /home/ygj/Program/OpenVINO-CSharp-API/dataset/image/demo_2.jpg

Segmentation result :
1: 0 0.90   (x:745 y:42 width:403 height:671)2: 0 0.86   (x:121 y:196 width:1009 height:516)3: 27 0.69   (x:434 y:436 width:90 height:280)

左滑查看更多


图 12  Yolov8-seg 模型预测输出


6. 模型运行时间


英特尔开发套件 AlxBoard 板载了英特尔赛扬 N5105 CPU 以及英特尔 11 代集成显卡,此处对 CPU、GPU 的推理情况做了一个简单测试,主要检测了模型推理时间,并使用英特尔幻影峡谷进行了同步测试,测试结果如表所示。



可以看出,英特尔赛扬 N5105 CPU 在模型推理性能是十分强大的,且搭配的英特尔 11 代集成显卡,将推理速度提升了 6 倍左右,针对 Yolov8 模型,平均处理速度可以达到 10FPs。而相比于幻影峡谷的推理速度,英特尔开发套件 AlxBoard 推理性能大约为其五分之一,这相比一般的开发板,英特尔开发套件 AlxBoard 的算力还是十分强大的。


总结


在该项目中,我们基于 Ubutn 20.04 系统,成功实现了在 C# 环境下调用 OpenVINO™ 部署深度学习模型,验证了在 Linux 环境下 OpenVINO™ C# API 项目的的可行性,这对后面在 Linux 环境下开发 OpenVINO™ C# API 具有很重要的意义。


除此之外,我们还使用 OpenVINO™ C# API 检验了英特尔开发套件 AlxBoard 的模型推理能力,最总针对 Yolov8模型,平均处理速度可以达到 10FPs,这对目前大多数开发板来说,已经达到了很高的推理速度。后续我还会将继续使用 OpenVINO™ C# API 在 英特尔开发套件 AlxBoard 部署更多的深度学习模型。


[1] OpenVINO™ 工具套件:

www.openvino.ai

[2] OpenVINO™ C# API:

https://github.com/guojin-yan/OpenVINO-CSharp-API.git

[3]在 Linux 发行版上安装 .NET - .NET | Microsoft Learn: 

https://learn.microsoft.com/zh-cn/dotnet/core/install/linux

[4] .NET 文档 | Microsoft Learn:

https://learn.microsoft.com/zh-cn/dotnet/

[5] Download the Intel Distribution of OpenVINO™ Toolkit:

https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/download.html?ENVIRONMENT=DEV_TOOLS&OP_SYSTEM=WINDOWS&VERSION=v_2023_0_1&DISTRIBUTION=PIP

[6] Install OpenVINO™ Runtime on Linux — OpenVINO™ documentation — Version(2023.1):

https://docs.openvino.ai/2023.1/openvino_docs_install_guides_installing_openvino_linux_header.html

[7] AlxBoard_deploy_yolov8: 

https://github.com/guojin-yan/OpenVINO-CSharp-API/tree/csharp3.0/tutorial_examples/AlxBoard_deploy_yolov8

OpenVINO™

--END--


               
               
               
你也许想了解(点击蓝字查看)⬇️
➡️ 开发者实战 | 介绍OpenVINO™ 2023.1:在边缘端赋能生成式AI
➡️ 基于 ChatGLM2 和 OpenVINO™ 打造中文聊天助手
➡️ 基于 Llama2 和 OpenVINO™ 打造聊天机器人
➡️ OpenVINO™ DevCon 2023重磅回归!英特尔以创新产品激发开发者无限潜能
➡️ 5周年更新 | OpenVINO™  2023.0,让AI部署和加速更容易
➡️ OpenVINO™5周年重头戏!2023.0版本持续升级AI部署和加速性能
➡️ OpenVINO™2023.0实战 | 在 LabVIEW 中部署 YOLOv8 目标检测模型
➡️ 开发者实战系列资源包来啦!
➡️  以AI作画,祝她节日快乐;简单三步,OpenVINO™ 助你轻松体验AIGC
➡️  还不知道如何用OpenVINO™作画?点击了解教程。
➡️   几行代码轻松实现对于PaddleOCR的实时推理,快来get!
➡️   使用OpenVINO 在“端—边—云”快速实现高性能人工智能推理


              
              
              

扫描下方二维码立即体验 

OpenVINO™ 工具套件 2023.1


点击 阅读原文 立即体验OpenVINO 2023.1
文章这么精彩,你有没有“在看”?

本文分享自微信公众号 - OpenVINO 中文社区(openvinodev)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部