Upgrade to Pro — share decks privately, control downloads, hide ads and more …

エッジデバイスによる動画像AI推論

 エッジデバイスによる動画像AI推論

FutureCon2022での登壇資料です。
エッジデバイスのような計算リソースの限られた環境上でDeepLearningモデルを可能な限り高速で動作させる工夫についてお話しました。 主なトピックとしては、TFLiteによるモデルの量子化手法と推論、Intel Neural Compute Stick2を用いた推論の2本立てになり、動作検証にはRaspberry Piを用います。

Yusuke Kishishista

July 20, 2022
Tweet

Other Decks in Programming

Transcript

  1. Copyright © 2022 by Future Architect, Inc. Copyright © 2022

    by Future Architect, Inc. 自己紹介 広島大学大学院 博士課程 (2017.4 – 2020.3) AIベンチャー企業 (2020.4 – 2022.1) Future (2022.2 –) ⚫ 人間工学(筋肉・触覚) ⚫ HCI・人間拡張 ⚫ 位置推定アプリ ⚫ 監視カメラ ⚫ 警備ロボット ⚫ Google Cloud ⚫ インフラ周り 趣味 キャリア #筋肉 #自動車 #電子工作 岸下 名前 岸下 優介(きしした ゆうすけ) 出身 福井県 NPCJ西日本大会 フィジーク部門にて 千葉県 鋸山にて 好きなトレーニング ベンチプレス 嫌いなトレーニング スクワット BIG3 BP:130kg, SQ: 145kg, DL: 170kg
  2. Copyright © 2022 by Future Architect, Inc. エッジデバイス エッジデバイスとは •

    システムのEdge(末端)に存在するデバイスを指す • 各種情報を収集するセンサなどの制御部分(マイコン)となる • センサでデータを集約し、クラウドやオンプレのサーバーへデータを飛ばす ◦ リアルタイムの情報 • センサのデータから二次データに変換 ◦ CPUを搭載しているので、簡単な前処理等が可能 • 大量に設置する場合が多く、基本的に安価なものが好まれる ◦ 安価なマイコンの数々(Raspberry Pi, Arduino, ESP32, ...etc.) ◦ GPUを搭載したものもある(NVIDIA Jetson) エッジデバイスの役割
  3. Copyright © 2022 by Future Architect, Inc. エッジデバイスにおけるDeepLearning技術の活用 エッジデバイス •

    安価 ◦ 推論するためのクラウドなどといったサーバーを用意する必要がない • リアルタイムで処理が可能 ◦ その場で処理ができる(例:進入禁止エリアにおける人検知→アラート) • 設置が容易 ◦ 小型で電力消費量も少なく、持ち運びも可能 • 計算リソースが限られる(主にCPUでの推論となる) ◦ 主にCPUでの推論となる(通常はGPUを利用するケースが多い) エッジデバイスでのAI推論の特徴 • 活用例:くら寿司(皿の数をカウントするのにGoogleのEdge TPUを活用)
  4. Copyright © 2022 by Future Architect, Inc. とりあえず推論してみよう 今日の話で使う環境 ❏

    ハードウェア ❏ Raspberry Pi 4 Model B ❏ CPU:quad-core Cortex-A72 (ARM v8) 64-bit SoC ❏ CPUクロック数:1.5GHz ❏ メモリ:8GB ❏ GPU:無し ❏ ソフトウェア ❏ Python ❏ 3.6/3.7 ❏ ライブラリ ❏ TensorFlow ❏ PyTorch ❏ 検証に使うリポジトリ ❏ GitHub - Hzzone / pytorch-openpose ❏ (OpenPoseによる姿勢推定) Raspberry Pi 4 Model B
  5. Copyright © 2022 by Future Architect, Inc. エッジデバイスでのAI推論 解決策 1.

    モデルの量子化 ◦ 計算量を減らして、推論を高速化させる ▪ モデルのコンバートが必要 ▪ 精度は劣化してしまう(精度と速度のトレードオフ) 2. マシンパワーの底上げ ◦ 計算リソースを別で用意する ▪ NEURAL COMPUTE STICK2(Intel Movidius Myriad X VPU) • 2022/06/30で販売終了😢 • 2023/06/30で技術サポートが終了😢 ▪ Google Edge TPU • Coral USB Accelerator 3. ネットワークアーキテクチャを変更する ◦ MobileNetなどを使う Neural Compute Stick2 (Intel) Coral USB Accelerator (Google) 今日は主にこの話をやります
  6. Copyright © 2022 by Future Architect, Inc. 推論処理における基本 どうやって推論しているのか? カメラ

    パソコン 学習済みAIモデル 前処理 (2値化したり、サイズ変更したり) 秋田犬
  7. Copyright © 2022 by Future Architect, Inc. 推論処理における基本 カメラ パソコン

    前処理 (2値化したり、サイズ変更したり) 秋田犬 量子化 計算量を減らして モデルのサイズを小さくする どうやって推論しているのか? 学習済みAIモデル
  8. Copyright © 2022 by Future Architect, Inc. 推論処理における基本 学習済みAIモデル 前処理

    (2値化したり、サイズ変更したり) 秋田犬 • モデルの中身はネットワーク構造になっている ◦ いわゆる、ニューラルネットワーク ▪ 人間の脳を模倣 ◦ 画像の色や配置のパターンから物体を認識している • モデルの中では本来は単精度浮動小数点で計算が行われている ◦ 単精度:32ビット(float型として扱われている) ←高度に抽象化されたロゴがどこの会社かわかるのも、 色や配置から画像を識別しているからと考えられている • 量子化:半精度(16ビット)や整数型(8ビット)変換 ◦ 計算量の減少→推論処理時間が短縮
  9. Copyright © 2022 by Future Architect, Inc. 推論処理における基本 量子化の特徴 •

    一種の最適化 ◦ リソースの限られている環境で計算できるようにする ▪ 計算量を落とすことで推論にかかる時間を減少させる ▪ 精度と速度はトレードオフ • モデルのサイズを縮小 ◦ ストレージ、メモリを圧迫しなくなる ◦ ユーザーのデバイスにモデルをダウンロードする際も必要な時間と帯域が少なくなる 量子化にも色んな種類がある[1] [1] TensorFlow - 最適化の種類
  10. Copyright © 2022 by Future Architect, Inc. モデルの量子化 どうやって量子化するの? •

    既存フレームワークのツールを利用する ◦ TensorFlow Lite(以降、TFLite) ◦ PyTorch ◦ … どうやってTFLiteで量子化するの? • TensorFlowのモデルコンバートを利用 1. 既にTensorflowを使って学習させたモデルをTensorflowのコンバーターで量子化し、TFLite のモデルに変換 2. 他のフレームワーク(Keras、PyTorch、ONNX、OpenVINOなど)で作られたモデルを コンバートして、最終的にTensorflowのコンバーターで量子化し、TFLiteのモデルに変換
  11. Copyright © 2022 by Future Architect, Inc. モデルの量子化手順 モデルのコンバート(他フレームワークからのコンバート) •

    PyTorch→ONNX ◦ PyTorchを利用する • ONNX→OpenVINO ◦ OpenVINOを利用する • OpenVINO→TensorFlow、TFLite(半精度量子化まで) ◦ openvino2tensorflowを利用する[3] • TensorFlow→TFLite(整数型量子化) ◦ TensorFlowを利用する [3] GitHub - openvino2tensorflow PyTorchからTFLiteへコンバートする例:
  12. Copyright © 2022 by Future Architect, Inc. モデルの量子化手順 PyTorch→ONNX •

    PyTorchにONNXへコンバートするライブラリが存在する ◦ torch.onnx.exportを使う • 第1変数:コンバートする.pthモデル • 第2変数:モデルへの入力データ(入力サイズさえ合ってれば、値はランダムで良い) • 第3変数:変換中の出力を表示するかどうか • 第4変数:入力の名前(ONNXモデルでは入力の名前が必要) • 第5変数:出力の名前(ONNXモデルでは出力の名前が必要)出力が2つなので、2つ分の 名前を指定している ※他にも変数はあるので、リファレンスを参照して下さい モデルのコンバート例
  13. Copyright © 2022 by Future Architect, Inc. モデルの量子化手順 ONNX→OpenVINO •

    OpenVINOをインストールするとモデル最適化用のコードが同梱されている ◦ OpenVINOをインストールする必要がある ◦ /<インストール先>/intel/openvino_2021/deployment_tools/model_optimizser/mo.py ※他にも変数はあるので、リファレンスを参照して下さい • input_model:コンバートするonnxモデル ◦ Caffe, TensorFlow, MXNet, ONNX, Kaldiモデルに対応している • output:出力名。ONNXコンバート時に指定したものと同じでよい • output_dir:出力先のディレクトリ モデルのコンバート例 ※対応しているレイヤーは変換できるが、対応していない場合変換に失敗することもある
  14. Copyright © 2022 by Future Architect, Inc. モデル内部の可視化 • OpenVINOのIRモデル

    ◦ binaryとxmlの2ファイルが出力される ◦ xmlファイルにはモデル内のレイヤーが記 述されている
  15. Copyright © 2022 by Future Architect, Inc. • OpenVINOのIRモデル ◦

    binaryとxmlの2ファイルが出力される ◦ xmlファイルにはモデル内のレイヤーが記 述されている • Netron ◦ IR, ONNXモデルのネットワークを可視化 できる ◦ どういった流れで計算されているのかがわ かりやすい モデル内部の可視化
  16. Copyright © 2022 by Future Architect, Inc. モデルの量子化手順 • openvino2tensorflowを使って変換する

    ◦ オープンソースのモデルコンバートツール ◦ OpenVINOのIRモデルからTensorFlow, TensorFlow Liteへ一気に変換できる ◦ pipからインストールできる(実行はDocker環境が推奨) ※他にも変数はあるので、GitHubを参照して下さい • model_path:コンバートするOpenVINOのIRモデル(xmlファイルの方) • 残りの引数:出力するモデルファイルの種類 ◦ saved_model, pb: TensorFlowのモデル ◦ ~_quant_tflite: TensorFlow Liteの量子化されたモデル ◦ ~_no_quant_~_tflite: TensorFlow Liteの量子化されていないモデル モデルのコンバート例 OpenVINO→TensorFlow, TensorFlow Lite (float32, float16)
  17. Copyright © 2022 by Future Architect, Inc. モデルの量子化手順 TensorFlow→TensorFlow Lite(int8量子化)[4]

    TensorFlowモデル 代表的な画像群 (学習に使ったデータなど) キャリブレーション & コンバート [4] TensorFlow - トレーニング後の量子化 モデルのダイナミックレンジ キャリブレーションが必要 ⚫ 代表的な画像データセットが必要 (学習に使ったデータセットでもOK) ⚫ 最大値・最小値の調整 • TensorFlowに同梱されているコンバーターを使って変換する ◦ int8量子化(8ビット固定小数点)だけ量子化プロセスが異なる ◦ float32、float16もTensorFlowのライブラリで量子化可能 TFLiteモデル (int8量子化)
  18. Copyright © 2022 by Future Architect, Inc. 量子化モデルによる推論 モデルからの出力(ヒートマップ*) 元画像

    PyTorch int8 *関節の位置を推定している モデルからの出力も大きな精度劣化は見られない 色が付いている部分が モデルが推定した関節位置
  19. Copyright © 2022 by Future Architect, Inc. 量子化モデルによる推論 推論時間 元画像

    Pytorch int8 PyTorch TFLite (int8) 同程度の精度で推論可能、かつ推論時間は約半分まで高速化
  20. Copyright © 2022 by Future Architect, Inc. 量子化モデルによる推論 他の推論モデル ❏

    物体検出モデル [5] 軽量なモデルを更に量子化しているため、 約400ms/frameで推論できている • モデル:YOLOX-nano [6] • 量子化:float16 • モデルサイズ:1.9MB [5] GitHub - Kazuhito00/YOLOX-ONNX-TFLite-Sample [6] GitHub - YOLOX
  21. Copyright © 2022 by Future Architect, Inc. 量子化のまとめ • モデルの量子化を行うことでエッジデバイスでも高速推論が可能となる

    ◦ 精度をある程度保ちながら計算量を抑えることでモデルのサイズを縮小 ◦ 但し、精度と速度はトレードオフなのでGPU搭載マシン上での動作精度・速度の実現は難しい • 量子化にはfloat16, int8などが存在する ◦ 目的に合わせて使い分ける ◦ 精度と速度の落とし所が大切 • 量子化には主にモデルコンバートを用いる ◦ 既に学習済みのモデルへ適用可能 ◦ 異なるフレームワークのモデル間で互換性がある ◦ 対応していないレイヤー(計算手法)もあるので、全てのモデルがコンバート可能ではない
  22. Copyright © 2022 by Future Architect, Inc. マシンパワーの底上げ Neural Compute

    Stick2 • USBスティック型のDeepLearning用デバイス • CPUやクラウドに頼らずDeepLearning/MachineLearningができる • ただ、既にEOL決まってるのでこの話はおまけ的な感じで😅 ◦ 後継はM.2のカードタイプになるそう [7] • Neural Compute Stick2を組み込んだOAK-D OpenCV DepthAIカメラもある ◦ しかもカメラはステレオなので、深度情報も得ることができる ◦ PoE版もあり、用途にあわせやすい [8] Neural Compute Stick2 OAK-D OpenCV DepthAIカメラ OAK-D OpenCV DepthAIカメラ を用いた姿勢推定デモ [9] [7] EOL - Movidius Neural Compute Stick 2 (Intel Communities) [8] OAK-D OpenCV DepthAIカメラ (PoE版)(SWITCHSCIENCE) [9] GitHub - geaxgx/depthai_blazepose
  23. Copyright © 2022 by Future Architect, Inc. マシンパワーの底上げ Neural Compute

    Stick2での推論 • OpenVINO*というフレームワークを使う必要がある ◦ Intelが提供するDeepLearningフレームワーク ◦ Intel製のチップで高速に計算できるよう特化されている また新しいフレームワークかよ… DeepLearning フレームワーク大杉ワロタ OpenVINOへのコンバート [10] 基本的にはIntel公式が提供する モデルコンバートツール**を使うだけでOK *OpenVINOはまだ現役(EOLは決まっていない) **全計算レイヤいけるわけではないので、コンバート出来ない時もある [10] How it Works - Intel® Distribution of OpenVINO™ Toolkit
  24. Copyright © 2022 by Future Architect, Inc. マシンパワーの底上げ Neural Compute

    Stick2での推論 • OpenVINO*というフレームワークを使う必要がある ◦ Intelが提供するDeepLearningフレームワーク ◦ Intel製のチップで高速に計算できるよう特化されている また新しいフレームワークかよ… DeepLearning フレームワーク大杉ワロタ OpenVINOへのコンバート [10] [10] How it Works - Intel® Distribution of OpenVINO™ Toolkit [11] Model Optimization Techniques - Intel [12] Grouped Convolution Fusing - Intel • モデルの最適化 ◦ 不要なオペレーションの除去(Linear Operation Fusing [11]) ◦ 複数のオペレーションの統合(Grouped Convolution Fusing [12]) • 量子化 ◦ モデル内部の数値表現をfloat32→float16/int8に変換しスリム化 OpenVINOによるモデルコンバート
  25. Copyright © 2022 by Future Architect, Inc. マシンパワーの底上げ 推論デモ(YOLOX) 物体検出も約250msで動作可能

    [5] GitHub - Kazuhito00/YOLOX-ONNX-TFLite-Sample [6] GitHub - YOLOX ❏ 物体検出モデル [5] • モデル:YOLOX-nano [6] (OpenVINOコンバート)
  26. Copyright © 2022 by Future Architect, Inc. マシンパワー底上げまとめ • OpenVINO自体でモデルの最適化ができる

    ◦ 不要な計算の除去したり統合したりなど • AI推論に最適化されたCPUチップを用いることで推論の高速化が可能 ◦ エッジデバイスに対して計算リソースの増設が可能 ▪ 但しUSB接続なので、I/Oの部分でボトルネックになる可能性も ◦ ハードウェアはEOL決まっている場合もあるので業務利用には気をつける…
  27. Copyright © 2022 by Future Architect, Inc. 全体まとめ • エッジ/モバイル向けにはモデルの量子化がオススメ

    • デバイスに頼らない推論の高速化が可能 • GPU買わなくてもAI楽しめるので皆さんRaspberry Pi買って遊びましょう • モデルの量子化自体にもGPUは不必要 • お家監視カメラとか簡単に作れる • AIを過信しない ◦ 精度100%はほぼ不可能 ▪ ミッションクリティカルな部分には極力利用しない ▪ AIはシステム全体の中の一部分で、その精度に頼りすぎない