IntelのAIツール用ソフトウェア開発キット「OpenVINO」とスティック型デバイス「Neural Compute Stick2」で、Raspberry Piでの画像認識処理を試してみました。

チャレンジ&ナレッジ最終更新日: 20190927

OpenVINO × Neural Compute Stick 2 × Raspberry Piで画像認識

  • このエントリーをはてなブックマークに追加

IntelのAIツール用ソフトウェア開発キット「OpenVINO」と、同じくIntelのスティック型デバイス「Neural Compute Stick2」と一緒に用いることで、Raspberry Piでも画像認識系の推論処理を高速化することができます。
今回はNeural Compute Stick2をRaspberry Pi3に接続し、OpenVINOを用いて動画上に映った人の顔を認識させてみたいと思います。

Open VINOとは

OpenVINO(Open Visual Inference & Neural Network Optimization)はIntelから発表されたAIツール用ソフトウェア開発キット(SDK)です。名前のとおり機能としては画像系の推論(Visual Inference)に特化しており、様々なフォーマットの学習済みモデルに対応し、SDKにも学習済みモデルが含まれています。
これらの学習済みモデルを最適化するモデル・オプティマイザーと、Intel製のCPUや内蔵GPUに最適化された推論エンジンにより、インテル製ハードウェアで効率的に動作する画像認識ソフトウェアを短期間で開発することが可能になります。

Neural Compute Stick 2とは

Neural Computer Stick 2(NCS2)は、Intelから発売されているUSBスティック型のデバイスです。主にニュートラルネットワークにおける推論処理に特化しており、接続したPCなどの推論性能を上げることができます。初代のモデルから性能が8倍に向上されており、クラウドに依存することなくローカル環境でのリアルタイムな推論が可能となります。

Neural Computer Stick 2(NCS2)本体Neural Computer Stick 2(NCS2)本体

OpenVINOの環境を構築する

はじめに環境OpenVINOの環境を構築します。

OpenVINOのToolkitをダウンロードをするために下記のURLにアクセスします。

“01.org distribution(download.01.org)”.Intel.
https://download.01.org/opencv/2019/openvinotoolkit/

下図の部分からToolkitをダウンロードします。ここでダウンロードしたファイルのバージョンはあとから必要になるため、どのバージョンをダウンロードしたのか記載しておきます。
今回ダウンロードしたバージョンは「2019.1.094」です。

OpenVINOのToolkitのダウンロードページOpenVINOのToolkitのダウンロードページ

次にダウンロードしたファイルを解凍します。ターミナルを使用してダウンロードしたファイルを解凍するので「ターミナル」を起動して、下記のコマンドを実行してください。

sudo mkdir -p /opt/intel/openvino

sudo mkdir -p /opt/intel/openvino実行画面sudo mkdir -p /opt/intel/openvino実行画面

次のコマンドでダウンロードしたファイル「OpenVINO」を解凍します。

sudo tar -xf l_openvino_toolkit_raspbi_p_2019.1.094.tgz --strip 1 -C /opt/intel/openvino

「OpenVINO」を解凍する「OpenVINO」を解凍する

インストール先の設定にあたりsetupvars.shの書き換えを行う必要があるため、下記のコマンドを行います。

sudo sed -i “s||/opt/intel/openvino|” /opt/intel/openvino/bin/setupvars.sh

setupvars.shの書き換えをするコマンドの実行setupvars.shの書き換えをするコマンドの実行

サンプルコードをビルドするためには「cmake」をインストールします。
ターミナルで下記のコマンドを実行します。

sudo apt install cmake

ビルドするための「cmake」をインストールビルドするための「cmake」をインストール

setupvars.shを実行して、環境変数を設定します

source /opt/intel/openvino/bin/setupvars.sh

環境変数を設定環境変数を設定

コマンドの先頭に記載してある「source」コマンドとは、ファイルに書き込まれたコマンドを指定したシェルで実行するコマンドで、使い方としては主にシェルの設定ファイルを反映させるために使います。

続いて、下記のコマンドを実行してターミナルの起動時に自動的に環境変数を設定できるようにします。

echo “source /opt/intel/openvino/bin/setupvars.sh” >> ~/.bashrc

起動するたびに環境変数を設定するようにする起動するたびに環境変数を設定するようにする

ここで環境変数を設定できているか確認するためのテストを行うため、新しく「ターミナル」を開いてください。
問題なく環境変数を設定できていれば、下図のように表示されます。

[setupvars.sh] OpenVINO environment initialized

ターミナルを新しく開くたびに最初に表示するようになるターミナルを新しく開くたびに最初に表示するようになる

Raspberry PiでNeural Computer Stick 2を扱うための設定をする

続いて、Raspberry PiにNCS2を接続して実行するための設定コマンドを実行します。

sudo usermod -a -G users “$(whoami)”

whoamiコマンドは現在のユーザ名を取得して表示するwhoamiコマンドは現在のユーザ名を取得して表示する

NCS2をRaspberry PiのUSB端子に接続して認識させるため、Raspberry PiのUSB設定を適用します。下記のコマンドを実行します。

sh /opt/intel/openvino/install_dependencies/install_NCS_udev_rules.sh

USB設定をして認識できるようにするUSB設定をして認識できるようにする

続いてOpenVINOのツールキットにある顔検出のサンプルを使用して動作するかを確認します。

ここからの作業は作業ディレクトリーの中で行うため、まず作業ディレクトリーを作成します。

mkdir open_sample

作業ディレクトリーの作成作業ディレクトリーの作成

今回は「デスクトップ」画面に「sample」という作業ディレクトリーを作成しました。作業ディレクトリーを作成することができたら、作成したディレクトリーに移動します。

cd open_sample

作成した作業ディレクトリーに移動する作成した作業ディレクトリーに移動する

続いて顔検出用サンプルをビルドします。
OpenVINOツールキットのサイトでは、「静止画で顔認識をする」サンプルを動かしていましたので、今回は「動画で顔認識をする」サンプルを動作させてみます。

下記のコマンドを実行してサンプルをビルドします。

 cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS=”-march=armv7-a” /opt/intel/openvino/deployment_tools/inference_engine/samples

サンプルをビルドするサンプルをビルドする

続いて下記コマンドを実行します。

make -j2 interactive_face_detection_demo

今回はinteractive_face_detection_demoをビルドする今回はinteractive_face_detection_demoをビルドする

サンプルをビルドすることができたら、顔認識用の学習モデルをダウンロードします。
下図のコマンドを実行してください。

wget https://download.01.org/opencv/2019/open_model_zoo/R1/models_bin/face-detection-adas-0001/FP16/face-detection-adas-0001.bin

学習モデルは、FP16しか対応していない学習モデルは、FP16しか対応していない

wget https://download.01.org/opencv/2019/open_model_zoo/R1/models_bin/face-detection-adas-0001/FP16/face-detection-adas-0001.xml

先ほどのファイルとは拡張子が違うファイル先ほどのファイルとは拡張子が違うファイル

動画内の顔を認識してみる

動作確認するために「デスクトップ」に顔が写っている動画「sample.mp4」を用意します。

今回はRaspberry Piのカメラモジュールで撮影した動画を使用することにしました。
下記のコマンドでRaspberry Piのカメラモジュールでの撮影を開始します。

raspivid -o ~/デスクトップ/sample.mp4 -t 5000

コマンドの5000の部分の数値は撮影する時間を指定できるコマンドの5000の部分の数値は撮影する時間を指定できる

「sample.mp4」が用意できたら、下記コマンドで先ほど準備したサンプルをビルドして動作確認を行います。

./armv7l/Release/interactive_face_detection_demo -i ~/デスクトップ/sample.mp4 -m face-detection-adas-0001.xml -d MYRIAD

使用する動画のパスを指定してサンプルを実行する使用する動画のパスを指定してサンプルを実行する

ビルドを行うと別ウインドウが開き、用意した「sample.mp4」が再生されて顔が写っている部分に白い枠がつきました。また、顔を認識して顔の部分に枠が表示されました。

さらにUSBカメラをRaspberry Piに繋ぐとリアルタイムで顔認識をすることができるようですので、そちらも試してみます。

こちらも先ほどと同様にしっかり顔の部分を認識して、白い枠が出ています。

Raspberry Piでも動くNeural Compute Stick 2

今回はRaspberry PiにNeural Compute Stick 2を接続して、顔認識のプログラムを実際に動かしてみました。

導入が簡単で、Neural Compute Stick 2をRaspberry Piに接続してすぐに顔認識ができたことに感動しました。また、Raspberry Piのような低CPUパワー・低消費電力環境で使えるため、IoT用途の利用などで有力な選択肢だと思います。

今回はNeural Compute Stick 2を1本接続して動作をさせましたが、複数本使用することで処理速度が上がるかどうか、別の機会に検証してみたいと思います。

ライタープロフィール 合同会社 4D Pocket
石郷祐介

大学卒業後、公設研究機関勤務を経て、情報科学芸術大学院大学[IAMAS]に入学。インタラクティブ作品を作る傍ら、多数のメディアアート作品の実装を手がける。
近年は、開発イベント企画、勉強会講師、コミュニティ形成等も行っている。
合同会社4D Pocket 代表、日本総合ビジネス専門学校 講師。

記事を
シェア