Ubuntu Mate 20.04 on Raspberry Pi 4 Model B上のOpenVINOでPoseEstimationのデモを動作させる


用意した物

  1. Raspberry Pi 4 Model B (メモリ4GB)
  2. Ubuntu Mate 20.04とOpenVINO/OpenModelZooを導入済みのmicroSDカード(https://qiita.com/yohama/items/c62ede31f28b7dd05ddc)
  3. Intel Neural Compute Stick 2

前準備

学習済みモデルをOpenVINOで実行できるIR形式に変換するために必要な依存ライブラリがあるので、インストールしておきます。

sudo apt install -y protobuf-compiler
pip3 install onnx torch

onnxのインストールには、内部でビルドプロセスが動いていたらしく、10分弱かかりました。

学習済みモデルのダウンロード

OpenModelZooを利用して、PoseEstimation用の学習済みモデルsingle-human-pose-estimation-0001と、ObjectDetection用の学習済みモデルmobilenet-ssdをダウンロードします。

cd ~/open_model_zoo/tools/downloader
./downloader.py --name single-human-pose-estimation-0001 --precisions=FP16
./downloader.py --name mobilenet-ssd --precisions=FP16

学習済みモデルをIR形式に変換

ダウンロードした学習済みモデルを、OpenVINOで実行できるIR形式に変換します。

cd ~/open_model_zoo/tools/downloader
./converter.py --name single-human-pose-estimation-0001 --precisions=FP16
./converter.py --name mobilenet-ssd --precisions=FP16

IR形式への変換には、3分半程度かかりました。

動作確認

まず、動作確認用の動画ファイルを用意します。

ここでは、Intelのサンプル動画をダウンロードしてきます。

wget https://github.com/intel-iot-devkit/sample-videos/raw/master/face-demographics-walking.mp4

次に、OpenModelZooのインストールディレクトリの中に、PoseEstimationのサンプルコードsingle_human_pose_estimation_demo.pyが入っているので、先ほどIR形式に変換したsingle-human-pose-estimation-0001とmobilenet-ssdをモデルに指定し、ダウンロードしたサンプル動画を入力動画として、実行します。

python3 ~/open_model_zoo/demos/python_demos/single_human_pose_estimation_demo/single_human_pose_estimation_demo.py -m_od ~/open_model_zoo/tools/downloader/public/mobilenet-ssd/FP16/mobilenet-ssd.xml -m_hpe ~/open_model_zoo/tools/downloader/public/single-human-pose-estimation-0001/FP16/single-human-pose-estimation-0001.xml -d MYRIAD -i ~/face-demographics-walking.mp4

しばらくすると、以下のように動画像中の人物付近に、single-human-pose-estimation-0001によるPoseEstimation結果である顔特徴と関節の位置(赤・青・緑の点群)と、mobilenet-ssdによるObjectDetection結果である青い矩形が重畳描画されます。

ObjectDetectionは25-30FPS程度でほぼリアルタイムで回りますが、PoseEstimationは1FPS程度なので、動画像中に人物が映ると、急にスローモーションのようになります。

参考サイト