TensorFlow Liteについて語る会に参加しました
はじめに
TensorFlow Liteは、デバイス上での推論を可能にする、オープンソースのディープラーニングフレームワークである。 思いっきり学習させると、モデルは当然大きくなる。そう言った学習させたモデルをエンドデバイス(スマホやIoTデバイス)に実装するとなると、そのままではきついことがあり、その問題を解決するためのフレームワーク。
そんなTFLiteについて、気楽に語り合おうという会が企画されたため、参加してみた。そんな備忘録。clusterを初めて使用したので、そこもまた新鮮でした。
TensorFlow Liteについて語る会・発表
発表者は2名。@cocodripsさんと、@natsutanさん。
スマホでDeepLearning実践入門(@cocodrips)
- v1, v2で全く挙動が違うので注意(みんなどんどん使って情報をネット上に増やしたい)
- Weightの量子化、WeightとActivationの量子化、の2種類の最適化オプションがある
- 後者はデータセットを最適化する必要あり、今回は前者に関するお話
- weightをint8に量子化すると、float32からは推論速度は2~3倍になる
- 物体検出で63MB、画像のクラス分類モデルで20MB(90class)、5classで8.5MBになる
- 類似画像検索では、特徴量抽出機をfloat32->float16にすると問題なく使えるけど、int8では全くだめだった
- SavedModelからはconvertできない(稀、ネットで拾ってくるようなモデルは無理)、Lite用に加工してやる必要あり
- TFLiteはサイズを可変にすることができない、、、
- python APIはオプションが少ない(shapeの-1を自動で変換してくれない、固定になっていないと使えない)、v2はクソなのでv1を使った方便利
- tflite_convertではSavedModelもKerasも変換可能、細かいことを設定できる
- けど、チュートリアル以外のモデルはv2ではconvertできなかったため基本的にv1を使用している(体験談)
- tocoはもうすでに公式では推奨されていないけれど、一番オプションも多く使いやすい(cocoさんもこれ推奨、使い方等は過去のブログ参照)
- NETRON(ネットロン)がめっちゃ便利、グラフ構造やレイヤーが簡単に把握できる(TensorFlowBoardを使用する必要がない、ダブルクリックで詳細が確認可能)
- これを入れるとTF使っているなら、幸せになれること間違いなし
- TF Liteが使えるモバイル用のフレームワークはいくつかある
- MLKitが一番有名かな?(AndroidとiOS両方に対応)
- firebaseにモデルを上げておいて、後からDLするっていうスタンスも3行くらいで書けちゃう
- Core ML (iOS)は、最初から入っているためframework分のアプリ容量膨張を防げる
- Mediapipe(AndroidとiOS両方に対応)、ストリーミングで推論可能、資料が少なく勉強するのが大変、、??
- iOSはobject-cでframework対応していないため、独自にframework作成する必要あり、、今後に期待、、、
- リアルタイムでエリアディテクションできちゃう
- v1, v2で全く挙動が違うので注意(みんなどんどん使って情報をネット上に増やしたい)
TFLiteのグラフ構造について(@natsutan)
- NetronでTFLiteのグラフをみましょう。
- TFLiteはChainerと同じ計算グラフ、、??
- 基本的なNNでは計算の向きは変わらない(推論のForwarding、学習のBackprop.)
- 分岐があるときに、BackProp.時にオペレータの前に変数を「勾配を足し合わせる」というノードとして機能させるため、動的にグラフを変化させたい時など非常に便利
- tfliteは推論特化だけど、エッジ側で再学習するケースが最近で始めているのでBackProp.も使うことになるかもしれない
終わりに
ちょうど今、機械学習を使用することになるかどうかはわからないが、エンドデバイスでセンサデータを取り扱う研究に取り組んでいるため、将来使うことになる(今の研究でなくても、いつかは必ず使うだろう)。趣味程度にでも、独学で進めていきたいなぁ。。まだコミュニティもTensorFlow本体に比べれば小さめなので気楽に楽しめそう。
しかも昨日はまんげつだったんす。す。
ってことで、今回はこちらの曲を聞いてお別れです。
(せーのっ)
\\\ 満月の夜なら ///