12K Views
July 22, 22
スライド概要
FutureCon2022で発表した内容になります。
標準よりも顔の大きさが大きい方だと思います。 電子工作やIoTが好きです。今はITコンサル会社でGCPの支援活動をやっています。
Copyright © 2022 by Future Architect, Inc. 1
エッジデバイスによる 動画像AI推論 岸下優介 Copyright © 2022 by Future Architect, Inc.
自己紹介 名前 キャリア 岸下 優介(きしした ゆうすけ) 広島大学大学院 博士課程 AIベンチャー企業 Future (2017.4 – 2020.3) (2020.4 – 2022.1) (2022.2 –) ⚫ ⚫ 人間工学(筋肉・触覚) HCI・人間拡張 ⚫ ⚫ ⚫ 趣味 位置推定アプリ 監視カメラ 警備ロボット ⚫ ⚫ Google Cloud インフラ周り #筋肉 #自動車 #電子工作 好きなトレーニング ベンチプレス 嫌いなトレーニング スクワット BIG3 出身 福井県 岸下 BP:130kg, SQ: 145kg, DL: 170kg Copyright © 2022 by Future Architect, Inc. NPCJ西日本大会 フィジーク部門にて 千葉県 鋸山にて
エッジデバイス エッジデバイスとは ● システムのEdge(末端)に存在するデバイスを指す ● 各種情報を収集するセンサなどの制御部分(マイコン)となる エッジデバイスの役割 ● センサでデータを集約し、クラウドやオンプレのサーバーへデータを飛ばす ○ リアルタイムの情報 ● センサのデータから二次データに変換 ○ CPUを搭載しているので、簡単な前処理等が可能 ● 大量に設置する場合が多く、基本的に安価なものが好まれる ○ 安価なマイコンの数々(Raspberry Pi, Arduino, ESP32, ...etc.) ○ GPUを搭載したものもある(NVIDIA Jetson) Copyright © 2022 by Future Architect, Inc.
エッジデバイス エッジデバイスにおけるDeepLearning技術の活用 ● 活用例:くら寿司(皿の数をカウントするのにGoogleのEdge TPUを活用) エッジデバイスでのAI推論の特徴 ● 安価 ○ 推論するためのクラウドなどといったサーバーを用意する必要がない ● リアルタイムで処理が可能 ○ その場で処理ができる(例:進入禁止エリアにおける人検知→アラート) ● 設置が容易 ○ 小型で電力消費量も少なく、持ち運びも可能 ● 計算リソースが限られる(主にCPUでの推論となる) ○ 主にCPUでの推論となる(通常はGPUを利用するケースが多い) 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による姿勢推定) Copyright © 2022 by Future Architect, Inc. Raspberry Pi 4 Model B
とりあえず推論してみよう 姿勢推定を回してみる 計算リソースが限られるため、推論に時間がかかる 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 Neural Compute Stick2 (Intel) 3. ネットワークアーキテクチャを変更する ○ MobileNetなどを使う 今日は主にこの話をやります Copyright © 2022 by Future Architect, Inc. Coral USB Accelerator (Google)
推論処理における基本 どうやって推論しているのか? 前処理 (2値化したり、サイズ変更したり) カメラ Copyright © 2022 by Future Architect, Inc. パソコン 学習済みAIモデル 秋田犬
推論処理における基本 どうやって推論しているのか? 前処理 量子化 (2値化したり、サイズ変更したり) 計算量を減らして モデルのサイズを小さくする カメラ Copyright © 2022 by Future Architect, Inc. パソコン 学習済みAIモデル 秋田犬
推論処理における基本 ● 前処理 (2値化したり、サイズ変更したり) モデルの中身はネットワーク構造になっている ○ いわゆる、ニューラルネットワーク ■ 人間の脳を模倣 ○ 画像の色や配置のパターンから物体を認識している ←高度に抽象化されたロゴがどこの会社かわかるのも、 色や配置から画像を識別しているからと考えられている ● モデルの中では本来は単精度浮動小数点で計算が行われている ○ 単精度:32ビット(float型として扱われている) ● 量子化:半精度(16ビット)や整数型(8ビット)変換 ○ 計算量の減少→推論処理時間が短縮 学習済みAIモデル 秋田犬 Copyright © 2022 by Future Architect, Inc.
推論処理における基本 [1] TensorFlow - 最適化の種類 量子化の特徴 ● 一種の最適化 ○ ● リソースの限られている環境で計算できるようにする ■ 計算量を落とすことで推論にかかる時間を減少させる ■ 精度と速度はトレードオフ モデルのサイズを縮小 ○ ○ ストレージ、メモリを圧迫しなくなる ユーザーのデバイスにモデルをダウンロードする際も必要な時間と帯域が少なくなる Copyright © 2022 by Future Architect, Inc. 量子化にも色んな種類がある[1]
モデルの量子化 どうやって量子化するの? ● 既存フレームワークのツールを利用する ○ ○ ○ TensorFlow Lite(以降、TFLite) PyTorch … どうやってTFLiteで量子化するの? ● TensorFlowのモデルコンバートを利用 1. 既にTensorflowを使って学習させたモデルをTensorflowのコンバーターで量子化し、TFLite のモデルに変換 2. 他のフレームワーク(Keras、PyTorch、ONNX、OpenVINOなど)で作られたモデルを コンバートして、最終的にTensorflowのコンバーターで量子化し、TFLiteのモデルに変換 Copyright © 2022 by Future Architect, Inc.
モデルの量子化手順 モデルのコンバート(他フレームワークからのコンバート) PyTorchからTFLiteへコンバートする例: ● PyTorch→ONNX ○ PyTorchを利用する ● ONNX→OpenVINO ○ OpenVINOを利用する ● OpenVINO→TensorFlow、TFLite(半精度量子化まで) ○ openvino2tensorflowを利用する[3] ● TensorFlow→TFLite(整数型量子化) ○ TensorFlowを利用する Copyright © 2022 by Future Architect, Inc. [3] GitHub - openvino2tensorflow
モデルの量子化手順 PyTorch→ONNX PyTorchにONNXへコンバートするライブラリが存在する ● ○ torch.onnx.exportを使う モデルのコンバート例 ● ● ● ● ● 第1変数:コンバートする.pthモデル 第2変数:モデルへの入力データ(入力サイズさえ合ってれば、値はランダムで良い) 第3変数:変換中の出力を表示するかどうか 第4変数:入力の名前(ONNXモデルでは入力の名前が必要) 第5変数:出力の名前(ONNXモデルでは出力の名前が必要)出力が2つなので、2つ分の 名前を指定している 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:出力先のディレクトリ ※他にも変数はあるので、リファレンスを参照して下さい Copyright © 2022 by Future Architect, Inc. ※対応しているレイヤーは変換できるが、対応していない場合変換に失敗することもある
モデル内部の可視化 ● OpenVINOのIRモデル ○ ○ Copyright © 2022 by Future Architect, Inc. binaryとxmlの2ファイルが出力される xmlファイルにはモデル内のレイヤーが記 述されている
モデル内部の可視化 ● OpenVINOのIRモデル ○ ○ binaryとxmlの2ファイルが出力される xmlファイルにはモデル内のレイヤーが記 述されている ● Netron ○ ○ Copyright © 2022 by Future Architect, Inc. IR, ONNXモデルのネットワークを可視化 できる どういった流れで計算されているのかがわ かりやすい
モデルの量子化手順 OpenVINO→TensorFlow, TensorFlow Lite (float32, float16) openvino2tensorflowを使って変換する ● ○ ○ ○ オープンソースのモデルコンバートツール OpenVINOのIRモデルからTensorFlow, TensorFlow Liteへ一気に変換できる pipからインストールできる(実行はDocker環境が推奨) モデルのコンバート例 ● ● model_path:コンバートするOpenVINOのIRモデル(xmlファイルの方) 残りの引数:出力するモデルファイルの種類 ○ saved_model, pb: TensorFlowのモデル ○ ~_quant_tflite: TensorFlow Liteの量子化されたモデル ○ ~_no_quant_~_tflite: TensorFlow Liteの量子化されていないモデル Copyright © 2022 by Future Architect, Inc. ※他にも変数はあるので、GitHubを参照して下さい
モデルの量子化手順 TensorFlow→TensorFlow Lite(int8量子化)[4] ● TensorFlowに同梱されているコンバーターを使って変換する ○ int8量子化(8ビット固定小数点)だけ量子化プロセスが異なる ○ float32、float16もTensorFlowのライブラリで量子化可能 モデルのダイナミックレンジ キャリブレーションが必要 ⚫ 代表的な画像データセットが必要 TensorFlowモデル キャリブレーション & コンバート (学習に使ったデータセットでもOK) ⚫ 最大値・最小値の調整 Copyright © 2022 by Future Architect, Inc. TFLiteモデル (int8量子化) 代表的な画像群 (学習に使ったデータなど) [4] TensorFlow - トレーニング後の量子化
モデルの量子化手順 モデルサイズの遷移 モデルサイズ:209MB int8量子化:52.7MB int8で¼ までモデルサイズが小さくなった Copyright © 2022 by Future Architect, Inc.
量子化モデルによる推論 *関節の位置を推定している モデルからの出力(ヒートマップ*) 元画像 色が付いている部分が モデルが推定した関節位置 PyTorch int8 モデルからの出力も大きな精度劣化は見られない Copyright © 2022 by Future Architect, Inc.
量子化モデルによる推論 推論時間 元画像 Pytorch PyTorch int8 TFLite (int8) 同程度の精度で推論可能、かつ推論時間は約半分まで高速化 Copyright © 2022 by Future Architect, Inc.
量子化モデルによる推論 [5] GitHub - Kazuhito00/YOLOX-ONNX-TFLite-Sample [6] GitHub - YOLOX 他の推論モデル ❏ 物体検出モデル [5] ● モデル:YOLOX-nano [6] ● 量子化:float16 ● モデルサイズ:1.9MB 軽量なモデルを更に量子化しているため、 約400ms/frameで推論できている Copyright © 2022 by Future Architect, Inc.
量子化のまとめ ● モデルの量子化を行うことでエッジデバイスでも高速推論が可能となる ○ 精度をある程度保ちながら計算量を抑えることでモデルのサイズを縮小 ○ 但し、精度と速度はトレードオフなのでGPU搭載マシン上での動作精度・速度の実現は難しい ● 量子化にはfloat16, int8などが存在する ○ 目的に合わせて使い分ける ○ 精度と速度の落とし所が大切 ● 量子化には主にモデルコンバートを用いる ○ 既に学習済みのモデルへ適用可能 ○ 異なるフレームワークのモデル間で互換性がある ○ 対応していないレイヤー(計算手法)もあるので、全てのモデルがコンバート可能ではない Copyright © 2022 by Future Architect, Inc.
マシンパワーの底上げ [7] EOL - Movidius Neural Compute Stick 2 (Intel Communities) [8] OAK-D OpenCV DepthAIカメラ (PoE版)(SWITCHSCIENCE) [9] GitHub - geaxgx/depthai_blazepose Neural Compute Stick2 USBスティック型のDeepLearning用デバイス ● CPUやクラウドに頼らずDeepLearning/MachineLearningができる ● ただ、既にEOL決まってるのでこの話はおまけ的な感じで😅 ● ○ 後継はM.2のカードタイプになるそう [7] ● Neural Compute Stick2を組み込んだOAK-D OpenCV DepthAIカメラもある ○ ○ しかもカメラはステレオなので、深度情報も得ることができる PoE版もあり、用途にあわせやすい [8] Neural Compute Stick2 Copyright © 2022 by Future Architect, Inc. OAK-D OpenCV DepthAIカメラ OAK-D OpenCV DepthAIカメラ を用いた姿勢推定デモ [9]
[10] How it Works - Intel® Distribution of OpenVINO™ Toolkit マシンパワーの底上げ Neural Compute Stick2での推論 ● OpenVINO*というフレームワークを使う必要がある ○ ○ Intelが提供するDeepLearningフレームワーク Intel製のチップで高速に計算できるよう特化されている また新しいフレームワークかよ… DeepLearning フレームワーク大杉ワロタ 基本的にはIntel公式が提供する OpenVINOへのコンバート [10] モデルコンバートツール**を使うだけでOK *OpenVINOはまだ現役(EOLは決まっていない) Copyright © 2022 by Future Architect, Inc. **全計算レイヤいけるわけではないので、コンバート出来ない時もある
マシンパワーの底上げ [10] How it Works - Intel® Distribution of OpenVINO™ Toolkit Neural Compute Stick2での推論 [12] Grouped Convolution Fusing - Intel ● [11] Model Optimization Techniques - Intel OpenVINO*というフレームワークを使う必要がある ○ ○ Intelが提供するDeepLearningフレームワーク Intel製のチップで高速に計算できるよう特化されている また新しいフレームワークかよ… DeepLearning フレームワーク大杉ワロタ OpenVINOによるモデルコンバート ● モデルの最適化 ○ ○ 不要なオペレーションの除去(Linear Operation Fusing [11]) 複数のオペレーションの統合(Grouped Convolution Fusing [12]) ● 量子化 ○ モデル内部の数値表現をfloat32→float16/int8に変換しスリム化 Copyright © 2022 by Future Architect, Inc. OpenVINOへのコンバート [10]
マシンパワーの底上げ 推論デモ(姿勢推定) PyTorch TFLite (int8) OpenVINO 推論処理が大幅に高速化 Copyright © 2022 by Future Architect, Inc.
マシンパワーの底上げ [5] GitHub - Kazuhito00/YOLOX-ONNX-TFLite-Sample [6] GitHub - YOLOX 推論デモ(YOLOX) ❏ 物体検出モデル [5] ● モデル:YOLOX-nano [6] (OpenVINOコンバート) 物体検出も約250msで動作可能 Copyright © 2022 by Future Architect, Inc.
マシンパワー底上げまとめ ● OpenVINO自体でモデルの最適化ができる ○ 不要な計算の除去したり統合したりなど ● AI推論に最適化されたCPUチップを用いることで推論の高速化が可能 ○ エッジデバイスに対して計算リソースの増設が可能 ■ ○ 但しUSB接続なので、I/Oの部分でボトルネックになる可能性も ハードウェアはEOL決まっている場合もあるので業務利用には気をつける… Copyright © 2022 by Future Architect, Inc.
全体まとめ ● エッジ/モバイル向けにはモデルの量子化がオススメ ● デバイスに頼らない推論の高速化が可能 ● GPU買わなくてもAI楽しめるので皆さんRaspberry Pi買って遊びましょう ● ● モデルの量子化自体にもGPUは不必要 お家監視カメラとか簡単に作れる ● AIを過信しない ○ 精度100%はほぼ不可能 ■ ミッションクリティカルな部分には極力利用しない ■ AIはシステム全体の中の一部分で、その精度に頼りすぎない Copyright © 2022 by Future Architect, Inc.
ご静聴ありがとうございました。 Copyright © 2022 by Future Architect, Inc.