はじめに
株式会社ProsCons (https://proscons.co.jp/) のエンジニアチームです。
弊社では、エッジAIデバイスとして注目されているJetson Nanoを用いて製造業等向けに提供しております。本体価格1万円強と廉価かつ手のひらサイズという極小スケールのデバイスでディープラーニングをも動作させることが可能です。
今回はこのJetson Nanoを容易に環境設定する方法と基本的な画像認識・骨格姿勢検知を動作させる方法を公開いたします。
参考動画URL
教師なし異常検知:https://www.youtube.com/watch?v=-NMPNE5-sco
骨格姿勢検知:https://www.youtube.com/watch?v=IVLhe_cjYwE
手順
弊社githubより、以下のリポジトリをcloneします。
https://github.com/ProsConsInc/jetson-nano
00〜13番までの手順を順番に踏めば、
一通りJetson Nanoが動作する感動を味わえるはずです!
始めに補足と注意事項を挙げておきます。
補足:shellスクリプトは失敗したらエラーで落ちるように設定しております。
他に不具合等発生しましたら、想定外の動作となりますので、
弊社githubへ issue を上げて頂けますと幸いです。
注意事項1:電源はmicro USBでは無く、5V 4Aの電源を使用するようにして下さい。
そうでないと、電源供給が不十分になり意図しない電源OFFが起きます。
注意事項2:マイクロSDカードは16GBが最小の構成になりますが、最低でも32GBは欲しいです(the larger the better)。
●以下shellスクリプト概要
00_init.sh
gitリポジトリのsubmoduleをcloneします。
thirdpartyディレクトリ配下にダウンロードされます。
cmakeのみversionを指定しております。これは、現時点で動作確認が取れているものに固定したいが為です(他のsubmoduleも本来は固定すべきかもしれません)。
01_run_power_up.sh
Jetson Nanoは初めは5Wモードで動作しています。
ですので、10Wで動作するように変更し、ハイパフォーマンスで動作するようにします(Jetson Nanoは 5W/10W をコマンドで簡単に切り替える事が出来る仕様です)。
02_install_swapfile_and_reboot.sh
Jetson Nanoは搭載メモリが LPDDR4 4GBと貧弱な為、スワップ領域を作ってあげる必要があります。再起動しないと有効にならないようですので、スクリプト内でrebootするようにしてあります。
03_install_deps_for_openpose.sh
Jetson Nano向けに色々と依存パッケージを入れてくれて便利なので、openposeの組み込みスクリプトを採用しました。
お茶でも飲みながら、終わるのを待ちます。
04_test_pi_camera.sh
Raspberry Pi カメラモジュール v2を繋いであれば、画面にカメラの画像が映るはずです。ここでカメラのエラーが起きる場合は、カメラの接触の不具合を疑う、若しくは電源ケーブルを挿し直す(電源OFF→ON)と映るようになるケースがあります。
Ctrl + c で終了します。
05_install_cmake.sh
cmakeをソースからインストールします。ビルドする際にPPAからインストールしたcmakeだとバージョンが低いと怒られるアプリケーションが存在する為です。
お茶受けでも頂きながら、終わるのを待ちます。
06_install_tensorflow.sh
公式のJetson Nano対応のTensorFlow v1.13.1をインストールします。
テレビでも見ながら、終わるのを待ちます。
07_install_tf_pose.sh
tf-pose-estimationをインストールします。これは骨格・姿勢検知を行うものです。
動画サイトでも見ながら、終わるのを待ちます。
08_prepare_for_webcam_and_reboot.sh
カメラの映像をストリームとして受け取る為に必要なので、インストールするものです。ここで機能を有効にする為、再起動させています。
09_build_darknet.sh
darknetをビルドします。主にGPUの力を引き出す為にpatchを当てたりもしています。
まとめサイトでも見ながら、終わるのを待ちます。
10_run_darknet.sh
darknetでYOLO v3 Tinyモデルを利用して、Object Detectionを行います。
15FPS 前後になるはずです。Raspberry Pi カメラモジュール v2のフレームレートは21FPS なので、ほぼ性能を出し切っていると言えると思います。
Ctrl + c で終了します。
11_build_openpose.sh
お試しとして、本家のopenposeをビルドします。
お酒でも飲みながら、終わるのを待ちます。
12_run_openpose.sh
サンプルの動画に対して、openposeによる骨格・姿勢検知を行います。手持ちのMacbookではレンダリングに 66 分ほど掛かりました。
Jetson Nanoでは7、8分で処理が完了し、動画が生成されるはずです。
軽く運動でもしながら、終わるのを待ちます。
13_run_tf_pose.sh
tf-pose-estimationを用いて、骨格・姿勢検知を行います。10FPS前後のフレームレートとなることが期待されます。Escで終了します。
※終了する際は必ず Escキー を押して終了させるようにして下さい。理由はTensorFlowがリソースを掴んだ状態になり、カメラモジュールが検出出来なくなったり、メモリ不足に陥ったり、と不具合が起きます。
おわりに
お疲れ様でした。
以上で、このリポジトリの説明を終了します。
なお、この環境を整備する際に多くの先人の知恵にお世話になりました。この場を借りて御礼申し上げます。