【OpenVINOSharp】OpenVinoSharp を使用してインテル® 開発者キット Aix 開発ボードに Yolov8 モデルをデプロイする

OpenVINO™ツールキットの  インテル リリース バージョンは、oneAPI に基づいて開発されており、高性能コンピューター ビジョンおよびディープ ラーニング ビジョン アプリケーションの開発をスピードアップできます。このツールキットは、エッジからクラウドまでのさまざまなインテル プラットフォームに適しており、ユーザーがより多くのことを実現できるように支援します。迅速かつ正確に現実世界の結果が運用システムに展開されます。OpenVINO™ は、簡素化された開発ワークフローを通じて、開発者が高性能のアプリケーションとアルゴリズムを現実世界に展開できるようにします。

  C# は、C および C++ から派生した、安全で安定したシンプルかつエレガントなオブジェクト指向プログラミング言語です。C# は、VB のシンプルな視覚的操作と C++ の高い操作効率を組み合わせたもので、強力な操作能力、エレガントな構文スタイル、革新的な言語機能、便利なコンポーネント指向プログラミング サポートにより、.NET 開発に推奨される言語となっています。ただし、OpenVINO™ は C# 言語インターフェイスを提供していないため、C# で OpenVINO™ を使用する際に多くの問題が発生しています。 C#. Windows プラットフォームの実装うまく使用されていますこの記事では、Linux システムをベースとした AIxBoard 開発ボードに OpenVinoSharp を実装する方法を紹介します。

  プロジェクトで使用されるコードは OpenVinoSharp ウェアハウスにアップロードされており、GitHub URL は次のとおりです。

https://github.com/guojin-yan/OpenVINOSharp/blob/openvinosharp3.0/tutorial_examples/AlxBoard_deploy_yolov8/Program.cs

  技術文書の最初の Web サイト: Deploying the YOLOv8 model using OpenVINOSharp on the Intel® Developer Kit | Developer Practice

1. インテル開発キット AIxBoard の概要

1. 製品のポジショニング

  インテル開発キット AIxBoard は、エントリーレベルの人工知能アプリケーションおよびエッジスマートデバイス向けに設計されたインテル開発キットの公式シリーズのメンバーです。Xboard は、人工知能の学習、開発、トレーニング、アプリケーションなどのさまざまなアプリケーション シナリオで完全に競争できます。このキットにはインテル OpenVINO™ ツールキット、モデル リポジトリ、デモ ​​ケースがプリインストールされているため、アプリケーション開発を迅速かつ簡単に開始できます。

  キットのメインインターフェイスはJetson Nanoキャリアボードと互換性があり、GPIOはRaspberry Piと互換性があり、成熟した生態資源を最大限に再利用できます。これにより、このキットは人工知能製品の検証と開発を強力にサポートするエッジコンピューティングエンジンとして使用できると同時に、ロボット製品開発の技術サポートを提供するドメイン制御コアとしても使用できます。

  AIxBoard (AixBoard) 開発キットを使用すると、優れた人工知能アプリケーションを短期間で構築できます。科学研究、教育、ビジネスのいずれに使用される場合でも、X-Board は優れたサポートを提供します。OpenVINO™ ツールキットの助けにより、CPU と iGPU の両方が強力な AI 推論機能を備え、画像分類、物体検出、セグメンテーション、音声処理などのアプリケーションで複数のニューラル ネットワークの並列動作をサポートします。

2. 製品パラメータ

主制御装置 Intel Celeron N5105 2.0-2.9GHz (旧称 Jasper Lake)
メモリ オンボードLPDDR4x 2933MHz、4GB/6GB/8GB
ストレージ オンボード 64GB eMMC ストレージ
ストレージの拡張 1 M.2 Key-M 2242 拡張スロット、SATA&NVME プロトコルをサポート
BIOS AMI UEFI BIOS
システムサポート Ubuntu20.04 LTS
ウィンドウズ 10/11

3. AI推論ユニット

  OpenVINO ツールの助けを借りて、CPU+iGPU ヘテロジニアス コンピューティング推論を実現でき、IGPU のコンピューティング能力は約 0.6TOPS です。

CPU INT8/FP16/FP32
iGPU INT8/FP16 0.6TOPS
GNA ガウスおよびニューラル アクセラレータ

2..NET環境を構成する

  .NET は、さまざまなアプリケーションを構築するための、無料のクロスプラットフォームのオープンソース開発者プラットフォームです。以下は、AIxBoard が Ubuntu 20.04 に .NET 環境をインストールし、.NET Core 2.0 ~ 3.1 シリーズおよび .NET 5 ~ 8 シリーズをサポートする方法を示します。AIxBoard が他の Linux システムを使用している場合は、「Linuxディストリビューション .NETへのインストール」を参照してください。- .NET | Microsoft Learn

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

  次の図は、上記のコマンドを入力した後のコンソールの出力を示しています。

2.SDKをインストールする

  .NET SDK を使用すると、.NET を通じてアプリケーションを開発できます。.NET SDK をインストールする場合は、対応するランタイムをインストールする必要はありません。.NET SDK をインストールするには、次のコマンドを実行します。

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

  次の図は、インストール後のコンソール出力を示しています。

3. インストールをテストする

  コマンドラインからSDKのバージョンとランタイムのバージョンを確認できます。

dotnet --list-sdks
dotnet --list-runtimes

  次の図は、test コマンドを入力した後のコンソールの出力を示しています。

4. テストコンソールプロジェクト

  Linux 環境では、dotnetコマンドを使用してプロジェクトを作成およびコンパイルできます。プロジェクト作成コマンドは次のとおりです。

dotnet new <project_type> -o <project name>

  ここでは、単純なテスト コンソール プロジェクトを作成します。

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

  以下の図は、テスト コマンドを入力した後のコンソールとプロジェクト フォルダー ファイルの出力を示しています。C# プロジェクトは、プログラム実行エントリの main 関数を含むProgram.csプログラム ファイルを自動的に作成し、* も作成します。 **.csproj* * ファイル。プロジェクトのコンパイルで一部の構成を指定します。

  上記は、.NET 環境の構成手順です。お使いの環境がこの記事と一致しない場合は、.NET Documentation | Microsoft Learnから追加のインストール手順を入手できます。

3. OpenVINO ランタイムをインストールする

  OpenVINO™ をインストールするには、OpenVINO ランタイムと OpenVINO 開発ツールの 2 つの方法があります。OpenVINO Runtime には、プロセッサ デバイス上でモデル デプロイ推論を実行するためのコア ライブラリが含まれています。OpenVINO 開発ツールは、モデル オプティマイザー、OpenVINO ランタイム、モデル ダウンローダーなどを含む、OpenVINO および OpenVINO モデルを処理するためのツール セットです。ここでは、OpenVINO ランタイムをインストールするだけです。

1. OpenVINO ランタイムをダウンロードする

「Intel Distribution of OpenVINO Toolkit のダウンロード」ページ  にアクセスし、次の手順に従って、対応するインストール オプションを選択します。ダウンロード ページでは、デバイスがUbuntu20.04を使用しているため、ダウンロード時に指定されたコンパイル済みバージョンに従ってダウンロードします。

2. インストールパッケージを解凍します。

  ダウンロードした OpenVINO ランタイムは基本的に C++ 依存関係パッケージであるため、コンパイル中に設定されたシステム変数に従って依存関係が取得されるように、システム ディレクトリに配置します。まず、システム フォルダーの下にフォルダーを作成します。

sudo mkdir -p /opt/intel

  次に、ダウンロードしたインストール ファイルを解凍し、指定したフォルダーに移動します。

tar -xvzf l_openvino_toolkit_ubuntu20_2023.0.1.11005.fa1c41994f3_x86_64.tgz
sudo mv l_openvino_toolkit_ubuntu20_2023.0.1.11005.fa1c41994f3_x86_64 /opt/intel/openvino_2022.3.0

3. 依存関係をインストールする

  次に、OpenVINO ランタイムの依存関係をインストールする必要があります。コマンド ラインから次のコマンドを入力するだけです。

cd /opt/intel/openvino_2022.3.0/
sudo -E ./install_dependencies/install_openvino_dependencies.sh

4. 環境変数を設定する

  インストールが完了したら、システムが呼び出し時に対応するファイルを取得できるように環境変数を構成する必要があります。コマンド ラインから次のコマンドを入力します。

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

  上記は、OpenVINO ランタイム環境の構成手順です。お使いの環境がこの記事と一致しない場合は、「OpenVINO™ ランタイムのインストール - OpenVINO™ ドキュメント - バージョン (2023.0)」から追加のインストール手順を参照できます。

4. AlxBoard_deploy_yolov8 プロジェクトを構成する

プロジェクトで使用するコードは GitHub ウェアハウスAlxBoard_deploy_yolov8  に置かれているので、状況に応じて自分でダウンロードして使用してください。

1. AlxBoard_deploy_yolov8 プロジェクトを作成する

  このプロジェクトでは、現在 Ubutun プラットフォームで .NET Core 3.1 までをサポートしている OpenCvSharp を使用する必要があるため、ここで .NET Core 3.1 プロジェクトを作成し、ターミナルを使用して次のコマンドを入力してプロジェクト ファイルを作成して開きます。 :

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

  プロジェクトが作成されたら、AlxBoard_deploy_yolov8のコード コンテンツを、作成されたプロジェクトのProgram.csファイルに置き換えます。

2. OpenVINOSharp 依存関係を追加する

  OpenVINOSharp は現在開発段階にあり、Linux バージョンの NuGet パッケージが作成されていないため、プロジェクトのソース コードをダウンロードしてプロジェクト参照として使用する必要があります。

  • ソースコードをダウンロードする

    Git 経由でプロジェクトのソース コードをダウンロードし、新しいターミナルを作成し、次のコマンドを入力してリモート ウェアハウスのクローンを作成し、プロジェクトを AlxBoard_deploy_yolov8 と同じディレクトリに配置します。

    git clone https://github.com/guojin-yan/OpenVINOSharp.git
    cd OpenVINOSharp
    

    この記事のプロジェクト ディレクトリは次のとおりです。

    Program--
    		|-AlxBoard_deploy_yolov8
    		|-OpenVINOSharp
    
  • OpenVINO™ 依存関係を変更する

    OpenVINOSharp/src/OpenVINOSharp/native_methods/ov_base.csプロジェクトのソースコードのOpenVINO™依存関係が本記事の設定と異なるため、主にファイルの修正によりOpenVINO™依存関係のパスを変更する必要があります。

    private const string dll_extern = "./openvino2023.0/openvino_c.dll";
    ---修改为--->
    private const string dll_extern = "libopenvino_c.so";
    
  • プロジェクトの依存関係を追加する

    ターミナルに次のコマンドを入力して、OpenVINOSharp を AlxBoard_deploy_yolov8 プロジェクト参照に追加します。

    dotnet add reference ./../OpenVINOSharp/src/OpenVINOSharp/OpenVINOSharp.csproj
    
  • 環境変数を追加する

    このプロジェクトは OpenVINO™ ダイナミック リンク ライブラリを呼び出す必要があるため、OpenVINO™ ダイナミック リンク ライブラリのパスを現在の環境に追加する必要があります。

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

3. OpenCvSharpを追加する

  • NuGet パッケージをインストールする

    OpenCvSharp は NuGet パッケージを通じてインストールでき、ターミナルで次のコマンドを入力するだけです。

    dotnet add package OpenCvSharp4_.runtime.ubuntu.20.04-x64
    dotnet add package OpenCvSharp4
    
  • 環境変数を追加する

    次のパスを環境変数に追加します。

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

    /bin/Debug/netcoreapp3.1/runtimes/ubuntu.20.04-x64/nativeAlxBoard_deploy_yolov8 をコンパイルした後に生成されるパスで、このパスにカプセル化された OpenCV 内の主に各種インターフェースとなるlibOpenCvSharpExtern.soファイルが格納されます。ファイルをプロジェクトの実行パスにコピーすることもできます。

  • libOpenCvSharpExtern 依存関係を検出する

    libOpenCvSharpExtern.so は他の環境でコンパイルされたダイナミック リンク ライブラリであるため、ローカル コンピューターには対応する依存関係がない可能性があるため、lddコマンドによって検出できます。

    ldd libOpenCvSharpExtern.so
    

    出力に何も表示されない場合はno found、不足している依存関係がないことを意味します。存在する場合は、正常に使用する前に不足している依存関係をインストールする必要があります。

  プロジェクトの依存関係と NuGet パッケージを追加した後のプロジェクト構成ファイルの内容は次のようになります。

<Project Sdk="Microsoft.NET.Sdk">

  <ItemGroup>
    <ProjectReference Include="..\OpenVINOSharp\src\OpenVINOSharp\OpenVINOSharp.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 プロジェクトを実行します。

プロジェクトのテストで使用されるモデルとファイルは OpenVINOSharp にあるので、OpenVINOSharp ウェアハウスの下にあるモデルとファイルをテストしてみましょう。

  ドットネットを介して実行するには、次のコマンドを実行するだけです。

dotnet run <args>

<args> パラメータ設定は、モデル予測タイプ、モデル パス、および画像ファイル パス パラメータを参照します。予測タイプ入力には、「det」、「seg」、「pose」、および「cls」の 4 つのタイプが含まれます。デフォルトの推論デバイスは「AUTO」に設定されています。「det」、「seg」予測の場合、<path_to_lable> パラメータを設定できます。このパラメータが設定されている場合、結果は画像上に描画され、設定されていない場合は印刷されます。コンソールから外へ

1. Yolov8-det モデルをコンパイルして実行します

コンパイルして実行するコマンドは次のとおりです。

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

モデル推論の出力は次のとおりです。

---- OpenVINO INFO----
Description : OpenVINO Runtime
Build number: 2023.0.1-11005-fa1c41994f3-releases/2023/0
Set inference device  GPU.0.
[INFO] Loading model files: /home/ygj/Program/OpenVINOSharp/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/OpenVINOSharp/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: 27 0.72   (x:435 y:433 width:98 height:284)

2. Yolov8-cls モデルをコンパイルして実行します。

コンパイルして実行するコマンドは次のとおりです。

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

モデル推論の出力は次のとおりです。

---- OpenVINO INFO----
Description : OpenVINO Runtime
Build number: 2023.0.1-11005-fa1c41994f3-releases/2023/0
Set inference device  GPU.0.
[INFO] Loading model files: /home/ygj/Program/OpenVINOSharp/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/OpenVINOSharp/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

3. Yolov8-pose モデルをコンパイルして実行します

コンパイルして実行するコマンドは次のとおりです。

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

モデル推論の出力は次のとおりです。

---- OpenVINO INFO----
Description : OpenVINO Runtime
Build number: 2023.0.1-11005-fa1c41994f3-releases/2023/0
Set inference device  GPU.0.
[INFO] Loading model files: /home/ygj/Program/OpenVINOSharp/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/OpenVINOSharp/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) 

4. Yolov8 セグメント モデルをコンパイルして実行する

コンパイルして実行するコマンドは次のとおりです。

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

モデル推論の出力は次のとおりです。

---- OpenVINO INFO----
Description : OpenVINO Runtime
Build number: 2023.0.1-11005-fa1c41994f3-releases/2023/0
Set inference device  GPU.0.
[INFO] Loading model files: /home/ygj/Program/OpenVINOSharp/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/OpenVINOSharp/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)

6. モデルの実行時間

  AIxBoard 開発ボードには、Intel Celeron N5105 CPU と Intel 第 11 世代統合グラフィックス カードが搭載されており、ここでは、主にモデル推論時間を検出するために、CPU と GPU の推論に関する簡単なテストが行​​われ、Intel Phantom Canyon を使用して、同期テスト テスト結果を表に示します。

デバイス CPU:N5105 GPU: Intel 11th Integrated Graphics CPU:i7-1165G7 GPU: lntel® Iris® Xe グラフィックス
Yolov8-it 586.3ミリ秒 83.1ミリ秒 127.1ミリ秒 19.5ミリ秒
Yolov8セグ 795.6ミリ秒 112.5ミリ秒 140.1ミリ秒 25.0ミリ秒
Yolov8-ポーズ 609.8ミリ秒 95.1ミリ秒 117.2ミリ秒 23.3ミリ秒
Yolov8-cls 33.1ミリ秒 9.2ミリ秒 6.1ミリ秒 2.7ミリ秒

  Intel Celeron N5105 CPU のモデル推論パフォーマンスは非常に強力で、それに対応する Intel 第 11 世代統合グラフィックス カードにより推論速度が約 6 倍向上し、Yolov8 モデルの場合、平均処理速度は 10FP に達することがわかります。Phantom Canyon の推論速度と比較すると、AIxBoard 開発ボードの推論性能は約 5 分の 1 ですが、通常の開発ボードと比較すると、AIxBoard 開発ボードの計算能力は依然として非常に強力です。

7. まとめ

  このプロジェクトでは、Ubutn 20.04 システムに基づいて、C# 環境で OpenVINO™ を呼び出すことでディープ ラーニング モデルのデプロイメントを正常に実装し、Linux 環境での OpenVINOSharp プロジェクトの実現可能性を検証しました。これは開発に非常に役立ちます。 Linux 環境における OpenVINOSharp の重要性。

  さらに、OpenVINOSharp を使用して、AIxBoard 開発ボードのモデル推論能力をテストしました。最後に、Yolov8 モデルの平均処理速度は 10FP に達し、現在のほとんどの開発ボードでは非常に高い推論速度に達しました。今後も OpenVINOSharp を使用して、AIxBoard 開発ボードにさらに多くの深層学習モデルをデプロイする予定です。

おすすめ

転載: blog.csdn.net/grape_yan/article/details/132379563