LoginSignup
22
15

More than 3 years have passed since last update.

「手の動き」を高速検出 -OpenVINOモデルへの変換ー

Last updated at Posted at 2019-04-18

今回から「手の動き」シリーズを開始します。
このシリーズでは、手の動きを検出して役立つツールを作ります。

gif1.gif

概要

  • 今年の夏に「ディープラーニングガジェット品評会(仮)」を開催する予定です。
  • この記事は、品評会のネタ作りの記事です。
  • 肝心のネタの第一弾は「手の物体検出」のリポジトリをOpenVINO化して、高速化しました。

謝辞

この記事は@PINTOさんのおかげで作成することができました。
というか、ほとんど、@PINTOさんの功績といって過言ではないです。

この場をお借りして御礼申し上げます。
本当に助かりました。ありがとうございました。

品評会について

今年の夏頃に「ディープラーニングガジェット品評会(仮)」を開催する予定です。
開催場所は名古屋で、発表者枠を5名設ける予定です。

発表したいという方がいらっしゃいましたら、是非ご連絡ください。
発表者の事前予約を承っております。私のメールアドレスはプロフィールに書いてあります。

内容はディープラーニング✖画像に限定させていただきます。
今のところ、発表15分、質疑応答5分、デモ&雑談1時間を予定しております。

品評会のネタ

私の品評会のネタは「手の物体検出」を使って何か作れないかと考えています。
「手の物体検出」は、既に先人の方が凄いものを作っています。

そこで、本稿ではこのリポジトリをOpenVINOで高速化してみました。
全体はこちらに置きました。

実行結果

まずは、結果をご覧ください。

環境

  • Raspberry Pi 3
  • USB camera
  • NCS2(高速化後)

高速化前

gif1.gif

1FPSくらいで、リアルタイムの検出はできません。

高速化後

gif1.gifgif3.gif
(NCS2を装着)

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

通常起動させると、一つ目のモデルが呼び出されるのですが、こちらは検出精度が
悪い気がします。こちらの記事で出た検出結果は、オリジナルの方が今回
(私が学習させたモデルの結果)より悪い気がします。

sum1.png

ただ、二つ目のモデルを使うと、検出精度がもの凄く良いです。
従って、精度としては以下の関係になっています。

二つ目 > 一つ目

本稿では二つ目のモデルをOpenVINO化していますので、ご安心ください。

ちなみに私のリポジトリにもssd-mobilenetV1-model/frozen_inference_graph.pbが
存在しますが、学習途中のものを諸事情によりアップして、消し方が分からなくて
放置してありますので、絶対に使用しないでください。精度は劣悪です。

まとめ

  • OpenVINOでhandtrackingを高速化しました。
  • 10~15FPSの速度が出ます。
22
15
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
15