32 ビット Debian OS 向け構成済みの Dockerfile を使用した、OpenVINO™・ツールキットと NCS2 プラグインのクロスコンパイル
ノート |
|
OpenVINO™・ツールキットは、人間のビジョンをエミュレートするアプリケーションやソリューションを迅速に導入します。このツールキットは、畳み込みニューラル・ネットワーク (CNN) をベースにしたインテルの®ハードウェア全体でコンピューター・ビジョン (CV) のワークロードを拡張し、パフォーマンスを最大化します。これらの手順は、一般的 に利用可能なARM CPUプラグインを構築する方法に 従います。しかし、Raspberry Pi 4* ですべてを実行するには、特定の変更が必要です。このガイドでは、クロスコンパイル方法を使用して Raspbian* 32 ビット OS 向けOpenVINO™・ツールキットのオープンソース・ディストリビューションを構築する手順を説明します。
トピックをクリックして詳細を参照してください。
システム要件
メモ | このガイドは、お使いの Raspberry Pi* ボードを以下のオペレーティング・システムで稼働していることを前提としています。 |
ハードウェア
- Raspberry Pi* 4 (Raspberry Pi* 3 モデル B+ が動作します。)
- 16GB microSD カード以上
- インテル® ニューラル・コンピュート・スティック 2
- イーサネット・インターネット接続または互換性のあるワイヤレス・ネットワーク
- docker コンテナーがインストールされたホストマシン
ターゲット・オペレーティング・システム
- Raspbian* バスター、32 ビット
ビルド環境の設定
メモ | このガイドには、正しくインストールするために root または sudo アクセスとして実行する必要があるコマンドが含まれています。 |
お使いのデバイス・ソフトウェアが最新の状態であることを確認します。
sudo apt update && sudo apt upgrade -y
Docker コンテナーのインストール
メモ | docker の公式ドキュメントに基づくインストール手順に従って作業できます。 https://docs.docker.com/engine/install |
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo groupadd docker
sudo usermod -aG docker ${USER}
sudo systemctl restart docker
リポジトリー openvino_contribクローン
メモ | この記事のopenvino_contribおよびOpenVINO・ツールキットのバージョンは、2022.1 をベースにしています。 |
ソースコードをダウンロードして構成ファイルを変更します。
git clone --recurse-submodules --single-branch --branch=2022.1 https://github.com/openvinotoolkit/openvino_contrib.git
arm_plugin・ディレクトリーに移動します。
cd openvino_contrib/modules/arm_plugin
エディター ツールを使用して、Dockerfile.RPi32_buster ファイルの内容を以下のように変更します。
vim dockerfiles/Dockerfile.RPi32_buster
下図のように、114 行目に「RUN pip install protobuf==3.20.0」を追加します。
編集したファイルを保存します。
以下に示すように、 arm_cpu_plugin_build.sh ファイルの内容をエディター・ツールで変更します。
vim scripts/arm_cpu_plugin_build.sh
行 77、78、79、136 を編集し、下 に太字 で示されているように変更を追加します。
77 checkSrcTree $OPENCV_HOME https://github.com/opencv/opencv.git 4.5.5-openvino-2022.1 4.x
78 checkSrcTree $OPENVINO_HOME https://github.com/openvinotoolkit/openvino.git 2022.1.0 releases/2022/1
81 checkSrcTree $OMZ_HOME https://github.com/openvinotoolkit/open_model_zoo.git 2022.1.0 releases/2022/1
136 -DENABLE_INTEL_MYRIAD=ON -DCMAKE_BUILD_TYPE=$BUILD_TYPE \
編集したファイルを保存します。
Docker コンテナー環境でのクロスコンパイルOpenVINO™・ツールキット
このステップでは、Docker コンテナー環境で、OpenVINO™・ツールキットやその他のコンポーネント (OpenCV* など) をダウンロードしてクロスコンパイルするスクリプトを実行します。
ARM CPU プラグイン・ディレクトリーに移動します。
cd openvino_contrib/modules/arm_plugin
Docker* イメージの構築:
docker image build -t arm-plugin -f dockerfiles/Dockerfile.RPi32_buster .
Docker* コンテナーでプラグインをビルドします。
ビルドプロセスは、/arm_cpu_pluginディレクトリ内で実行されるスクリプト/arm_cpu_plugin_build.shによって実行されます (実行するデフォルトのコンテナコマンド)。すべての中間結果とビルド・アーティファクトは、作業ディレクトリー内に保存されます。
そのため、作業ディレクトリー全体をマウントして、すべての結果をコンテナの外に保存することができます。
mkdir build
docker container run --rm -ti -v $PWD/build:/arm_cpu_plugin arm-plugin
メモ | スクリプト・エグゼキューション /arm_cpu_plugin_build.sh 制御する環境変数がいくつかあります。
|
ビルドフォルダーに、OV_ARM_package.tar.gz が生成されます。
ls build
OV_ARM_package.tar.gz を目的のデバイスに転送 (Raspberry Pi 4* 32 ビット・バスター)
パッケージをターゲットデバイス(Raspberry Pi 4*)に転送するさまざまな方法があり、対象デバイスに直接安全なコピーをコピーし、パッケージをUSBサムドライブにコピーして転送します。
この記事では、USB サムドライブをホストマシンにマウントし、ビルドパッケージをマウントされた thumb ドライブにコピーする方法について説明します。
システムの USB ポートに USB サムドライブを挿入し、以下のコマンドを使用してデバイスの起動を確認します。
sudo fdisk -l
デバイスの起動が確認したら、デバイスブート ( /dev/sdaなど) を /mntにマウントします。
sudo mount /dev/sda /mnt
次に、OpenVINOパッケージを USB サムドライブにコピーします。
sudo cp -rf build/OV_ARM_package.tar.gz /mnt/
ビルドパッケージの検証
クロスコンパイルが完了し、 OV_ARM_package.tar.gz をターゲットデバイスに正常にコピーしました (Raspberry Pi 4*)。
コンパイルツールのインストール
sudo apt update
sudo apt install cmake -y
OV_ARM_package.tar.gzpackage を展開します。
mkdir ~/openvino_dist/
tar -xvzf OV_ARM_package.tar.gz -C ~/openvino_dist/
設定変数をソース
source ~/openvino_dist/setupvars.sh
サンプルコードのコンパイル
cd ~/openvino_dist/samples/cpp
./build_samples.sh
ツールキットとインテル® ニューラル・コンピュート・スティック 2と ARM* プラグインがデバイスで動作することを確認するには、以下の手順を完了します。
- サンプル・アプリケーション・hello_query_deviceを実行して、すべてのライブラリーが正しくロードされていることを確認します。
- トレーニング済みのモデルをダウンロードします。
- ニューラル・ネットワーク (画像ファイルなど) の入力を選択します。
- インテル® ニューラル・コンピュート・スティック 2 Linux* USB ドライバーを設定します。
- 選択したモデルと入力でbenchmark_appを実行します。
サンプル・アプリケーション
インテル® OpenVINO™・ツールキットには、推論エンジンとインテル® ニューラル・コンピュート・スティック 2を使用したサンプル・アプリケーションが含まれています。アプリケーションの 1 つはhello_query_deviceで、以下のディレクトリーに記載されています。
~/inference_engine_cpp_samples_build/armv7l/Release
以下のコマンドを実行して、hello_query_deviceをテスト します。
cd ~/inference_engine_cpp_samples_build/armv7l/Release
./hello_query_device
システムに存在する推論で利用可能なデバイスを説明するダイアログを印刷する必要があります。
モデルのダウンロード
アプリケーションには、入力をパススルーするモデルが必要です。インテル® OpenVINO™・®ツールキットのモデルは、次の方法で IR 形式で入手できます。
- モデル・オプティマイザーを使用して、サポートされているフレームワークの 1 つから既存のモデルを推論エンジンの IR 形式に変換します。モデル・オプティマイザー・パッケージは Raspberry Pi* では利用できません。
- モデルダウンローダツールを使用して、Open Model Zoo からダウンロードします。事前トレーニング済みの公開モデルのみ。
- STORAGE.OPENVINOTOOKIT.ORG から直接 IR ファイルをダウンロード
インテルの目的では、直接ダウンロードが最も簡単です。次のコマンドを使用して、人と車両-バイクの検知モデルを取得します。
wget https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/3/person-vehicle-bike-detection-crossroad-0078/FP16/person-vehicle-bike-detection-crossroad-0078.bin -O ~/Downloads/person-vehicle-bike-detection-crossroad-0078.bin
wget https://storage.openvinotoolkit.org/repositories/open_model_zoo/2022.1/models_bin/3/person-vehicle-bike-detection-crossroad-0078/FP16/person-vehicle-bike-detection-crossroad-0078.xml -O ~/Downloads/person-vehicle-bike-detection-crossroad-0078.xml
メモ | このインテル® ニューラル・コンピュート・スティック 2には、FP16 として知られる 16 ビット浮動小数点フォーマットに最適化されたモデルが必要です。例と異なる場合、モデル・オプティマイザーが Raspberry Pi* でサポートされていないため、モデル・オプティマイザーを使用して別のマシンで FP16 に変換する必要がある場合があります。 |
ニューラル・ネットワークの入力
必要な最後の項目は、ニューラル・ネットワークに入力されます。ダウンロードしたモデルには、3 つのカラーチャンネルの画像が必要です。必要なファイルをボードにダウンロードします。
wget https://cdn.pixabay.com/photo/2018/07/06/00/33/person-3519503_960_720.jpg -O ~/Downloads/person.jpg
インテル® ニューラル・コンピュート・スティック 2 Linux USB ドライバーの構成
システムが USB デバイスを認識できるようにするために、いくつかの udev ルールインテル® NCS2追加する必要があります。
メモ | 現在のユーザーがユーザーのグループのメンバーでない場合は、次のコマンドを実行してデバイスを再起動します。 |
sudo usermod -a -G users "$(whoami)"
OpenVINO™環境を設定します。
source /home/pi/openvino_dist/setupvars.sh
インテル® ニューラル・コンピュート・スティック 2で推論を実行するには、 install_NCS_udev_rules.sh スクリプトを実行して USB ルールをインストールします。
sh /home/pi/openvino_dist/install_dependencies/install_NCS_udev_rules.sh
これで USB ドライバーが正しくインストールされます。デモの実行中にインテル® ニューラル・コンピュート・スティック 2が検出されない場合は、デバイスを再起動してもう一度お試しください。
benchmark_appの実行
モデルをダウンロードすると、入力イメージが利用可能になり、インテル® ニューラル・コンピュート・スティック 2が USB ポートに接続されたら、次のコマンドを使用して benchmark_appを実行します。
cd ~/inference_engine_cpp_samples_build/armv7l/Release
./benchmark_app -i ~/Downloads/person.jpg -m ~/Downloads/person-vehicle-bike-detection-crossroad-0078.xml -d MYRIAD
これにより、選択したオプションを使用してアプリケーションが実行されます。 -d フラグは、推論に使用するデバイスをプログラムに指示します。 MYRIAD を指定すると MYRIAD プラグインが 起動し、インテル® ニューラル・コンピュート・スティック 2を利用します。コマンドが正常に実行されると、端末は推論の統計を表示します。また、 CPU プラグインを使用して Raspberry Pi 4* デバイスの ARM CPU で推論を実行することもできます。この例で使用しているモデルは ARM* プラグインでサポートされていないため、動作サポートについては ARM* プラグイン操作セット仕様 を参照してください。
[ INFO ] First inference took 410.75 ms
[Step 11/11] Dumping statistics report
[ INFO ] Count: 388 iterations
[ INFO ] Duration: 60681.72 ms
[ INFO ] Latency:
[ INFO ] Median: 622.99 ms
[ INFO ] Average: 623.40 ms
[ INFO ] Min: 444.03 ms
[ INFO ] Max: 868.18 ms
[ INFO ] Throughput: 6.39 FPS
インテル® NCS2でアプリケーションが正常に実行された場合、OpenVINO™・ツールキットとインテル® ニューラル・コンピュート・スティック 2はデバイスで使用するために正しく設定されます。
環境変数
OpenVINO・ツールキット・アプリケーションをコンパイルして実行する前に、複数の環境変数を更新する必要があります。以下のスクリプトを実行して、環境変数を一時的に設定します。
source /home/pi/openvino_dist/setupvars.sh
**(オプション)** OpenVINO™環境変数は、シェルを閉じると削除されます。オプションとして、環境変数を以下のように永続的に設定できます。
echo "source /home/pi/openvino_dist/setupvars.sh" >> ~/.bashrc
変更をテストするには、新しいターミナルを開きます。以下の内容が表示されます。
[setupvars.sh] OpenVINO environment initialized
これで、Raspbian OS 向けOpenVINO™・ツールキットのオープンソース・ディストリビューション向けのクロスコンパイルとビルド手順、およびインテル® ニューラル・コンピュート・スティック 2および ARM* プラグインでの使用が完了します。
関連トピック |
Raspberry Pi* で Open Model Zoo デモを構築 |
OpenVINO™・ツールキット・オープン・モデル Zoo |
コミュニティー・フォーラムとテクニカルサポート |