今回から「手の動き」シリーズを開始します。
このシリーズでは、手の動きを検出して役立つツールを作ります。
#概要
- 今年の夏に「ディープラーニングガジェット品評会(仮)」を開催する予定です。
- この記事は、品評会のネタ作りの記事です。
- 肝心のネタの第一弾は「手の物体検出」のリポジトリをOpenVINO化して、高速化しました。
#謝辞
この記事は@PINTOさんのおかげで作成することができました。
というか、ほとんど、@PINTOさんの功績といって過言ではないです。
この場をお借りして御礼申し上げます。
本当に助かりました。ありがとうございました。
#品評会について
今年の夏頃に「ディープラーニングガジェット品評会(仮)」を開催する予定です。
開催場所は名古屋で、発表者枠を5名設ける予定です。
発表したいという方がいらっしゃいましたら、是非ご連絡ください。
発表者の事前予約を承っております。私のメールアドレスはプロフィールに書いてあります。
内容はディープラーニング✖画像に限定させていただきます。
今のところ、発表15分、質疑応答5分、デモ&雑談1時間を予定しております。
#品評会のネタ
私の品評会のネタは「手の物体検出」を使って何か作れないかと考えています。
「手の物体検出」は、既に先人の方が凄いものを作っています。
そこで、本稿ではこのリポジトリをOpenVINOで高速化してみました。
全体はこちらに置きました。
##実行結果
まずは、結果をご覧ください。
###環境
- Raspberry Pi 3
- USB camera
- NCS2(高速化後)
1FPSくらいで、リアルタイムの検出はできません。
10~15FPSの速度が出ています。
これならリアルタイムの処理ができそうです。
##使い方
python3 main.py -wd 640 -ht 480
##TensorFlowモデル --> OpenVINOモデルへの変換
本家のリポジトリでは、TensorFlowモデルが提供されています。
このモデルをOpenVINOモデルへ変換するには、以下のコードが必要でした。(@PINTOさんに感謝!)
run mo_tf.py \
--input_model frozen_inference_graph.pb \
--tensorflow_object_detection_api_pipeline_config pipeline.config \
--tensorflow_use_custom_operations_config ssd_v2_support.json \
--output=detection_boxes,detection_scores,num_detections \
--input_shape [1,300,300,3] \
--data_type FP16 \
--reverse_input_channels
後述しますが、Windows10では変換できなかったため、Colaboratory(Ubuntu)で実行しました。
#闇の世界
最後に失敗談を書いておきます。
##OpenVINOの罠 その1
OpenVINOモデルへの変換でバタバタしました。
一つ目はOpenVINO toolkit 2019 R1
の罠です。
こちらを使うと「変換」はできるのですが、「実行」は現在のバージョンで不可能のようです。
変換後のOpenVINOモデルを読み込ませたところ
[ ERROR ] Error reading network: cannot parse future versions: 5
と表示が・・・こちらによると、まだvesion 5は実行未対応とのこと。
「変換」は対応済で、「実行」は未対応って・・・
「順序が逆でしょ」
さすが、INTEL。やってくれるぜ!
##OpenVINOの罠 その2
二つ目は、Windows10を使うとOpenVINOへの変換ができませんでした。
既に問題として取り上げられているようですが、一部のモデルは変換可能なようで
混乱を招く要因となりました。
さすが、INTEL。闇が深いぜ!
handtrackingの罠
本家のリポジトリにはTensorFlowモデルが二つあります。
- hand_inference_graph/frozen_inference_graph.pb
- model-checkpoint/ssdlitemobilenetv2/frozen_inference_graph.pb
通常起動させると、一つ目のモデルが呼び出されるのですが、こちらは検出精度が
悪い気がします。こちらの記事で出た検出結果は、オリジナルの方が今回
(私が学習させたモデルの結果)より悪い気がします。
ただ、二つ目のモデルを使うと、検出精度がもの凄く良いです。
従って、精度としては以下の関係になっています。
二つ目 > 一つ目
本稿では二つ目のモデルをOpenVINO化していますので、ご安心ください。
ちなみに私のリポジトリにもssd-mobilenetV1-model/frozen_inference_graph.pbが
存在しますが、学習途中のものを諸事情によりアップして、消し方が分からなくて
放置してありますので、**絶対に使用しないでください。**精度は劣悪です。
#まとめ
- OpenVINOでhandtrackingを高速化しました。
- 10~15FPSの速度が出ます。