
英特爾發行版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.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
下圖為輸入上面命令后控制臺的輸出:

圖21.2.1添加Microsoft包存儲庫輸出

2.2 安裝 SDK
.NET SDK使你可以通過.NET開發應用。如果安裝.NET SDK,則無需安裝相應的運行時。若要安裝.NET SDK,請運行以下命令:
sudo apt-get update
sudo apt-get install -y dotnet-sdk-3.1
下圖為安裝后控制臺的輸出:

圖3安裝SDK輸出

2.3 測試安裝
通過命令行可以檢查SDK版本以及 Runtime 時版本。
dotnet --list-sdks
dotnet --list-runtimes
下圖為輸入測試命令后控制臺的輸出:

圖4SDK版本以及 Runtime 版本

2.4 測試控制臺項目
在 linux 環境下,我們可以通過 dotnet 命令來創建和編譯項目,項目創建命令為:
dotnet new -o
此處我們創建一個簡單測試控制臺項目:
dotnet new console -o test_net6.0
cd test_net6.0
dotnet 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,因此下載時按照指定的編譯版本下載即可。


圖6OpenVINO Runtime下載

3.2 解壓安裝包
我們所下載的OpenVINO Runtime本質是一個 C++ 依賴包,因此我們把它放到我們的系統目錄下,這樣在編譯時會根據設置的系統變量獲取依賴項。首先在系統文件夾下創建一個文件夾:
sudo mkdir -p /opt/intel
然后解壓縮我們下載的安裝文件,并將其移動到指定文件夾下:
tar -xvzf l_openvino_toolkit_ubuntu20_2022.3.1.9227.cf2c7da5689_x86_64.tgz
sudo 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_yolov8
cd AlxBoard_deploy_yolov8

圖81.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.git
cd 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-x64
dotnet 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 后,項目的配置文件內容為:
"Microsoft.NET.Sdk" >
"..OpenVINO-CSharp-APIsrcCSharpAPICSharpAPI.csproj" />
"OpenCvSharp4" Version="4.8.0.20230708" />
"OpenCvSharp4_.runtime.ubuntu.20.04-x64" Version="4.8.0.20230708" />
Exe
netcoreapp3.1
5. 運行 AlxBoard_deploy_yolov8項目
該項目測試所使用的模型與文件都可以在 OpenVINO-CSharp-API 中找到,因此下面我們通過 OpenVINO-CSharp-API 倉庫下的模型與文件進行測試。
通過 dotnet 運行,只需要運行以下命令即可。
dotnet run

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 Runtime
Build number: 2023.1.0-12185-9e6b00e51cd-releases/2023/1
Set 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)
3:270.72(x:435y:433width:98height:284)

圖10Yolov8-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 Runtime
Build number: 2023.1.0-12185-9e6b00e51cd-releases/2023/1
Set 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.992173
269 0.002861
296 0.002111
295 0.000714
270 0.000546
276 0.000432
106 0.000159
362 0.000147
260 0.000078
272 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 Runtime
Build number: 2023.1.0-12185-9e6b00e51cd-releases/2023/1
Set 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)

圖11Yolov8-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 Runtime
Build number: 2023.1.0-12185-9e6b00e51cd-releases/2023/1
Set inference device GPU.0.
[INFO] Loading model files: /home/ygj/Program/OpenVINO-CSharp-API/model/yolov8/yolov8s-seg.xml
47
[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)

圖12Yolov8-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 部署更多的深度學習模型。
-
英特爾
+關注
關注
61文章
10185瀏覽量
174218 -
API
+關注
關注
2文章
1566瀏覽量
63690 -
深度學習
+關注
關注
73文章
5557瀏覽量
122610
原文標題:英特爾開發套件使用 OpenVINO? C# API 部署 Yolov8 模型 | 開發者實戰
文章出處:【微信號:英特爾物聯網,微信公眾號:英特爾物聯網】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
基于C#和OpenVINO?在英特爾獨立顯卡上部署PP-TinyPose模型
英特爾BOOT Loader開發套件-高級嵌入式開發基礎

三種主流模型部署框架YOLOv8推理演示
使用OpenVINO優化并部署訓練好的YOLOv7模型

基于OpenVINO在英特爾開發套件上實現眼部追蹤
用OpenVINO C# API在intel平臺部署YOLOv10目標檢測模型

【轉載】英特爾開發套件“哪吒”快速部署YoloV8 on Java | 開發者實戰

C#中使用OpenVINO?:輕松集成AI模型!

評論