TensorFlow : Mobile : TensorFlow Lite へのイントロダクション (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 12/10/2017
* 本ページは、TensorFlow の本家サイトの Mobile – Introduction to TensorFlow Lite を翻訳した上で
適宜、補足説明したものです:
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
TensorFlow Lite はモバイルと組み込みデバイスのための TensorFlow の軽量ソリューションです。
それは低レイテンシーと小さなバイナリ・サイズで、モバイル機械学習推論を可能にします。
TensorFlow Lite はまた Android Neural Networks API によりハードウェアアクセラレーションもサポートします。
TensorFlow Lite は低レイテンシーの獲得のために多くのテクニックを使用します。それはモバイル・アプリのためのカーネルの最適化、事前融合 (pre-fused) された活性化、そして量子化されたカーネルのようなテクニックで、より小さく高速な (固定小数点数学) モデルを可能にします。
TensorFlow Lite ドキュメントの多くは当面は GitHub 上 にあります。
TensorFlow Lite は何を含みますか?
TensorFlow Lite は、モバイル・プラットフォームのために調整された、量子化されかつ浮動小数点であるコア演算子のセットをサポートします。それらは性能と量子化された精度を更に拡張するために事前融合された活性化とバイアスを組み込みます。更に、TensorFlow Lite はモデルのカスタム演算を使用することもまたサポートします。
TensorFlow Lite は FlatBuffers に基づく新しいモデルファイルフォーマットを定義します。FlatBuffers はオープンソースの、効率的なクロスプラットフォームのシリアライゼーション・ライブラリです。それは protocol buffers に似ていますが、主な違いは、オブジェクト毎のメモリ割当てとしばしば結合した、データにアクセス可能になる前に FlatBuffers は二次表現への解析/アンパックステップを必要としないことです。また、FlatBuffers のコード・フットプリント (メモリ消費量) は protocol buffers よりも一桁小さいです。
TensorFlow Lite はモバイルに最適化された新しいインタプリタを持ち、これはアプリケーションをスリムで高速に保持するというキーとなる目標を持ちます。インタプリタは最小限のロード、初期化、そして実行遅延を確かなものにするために、静的グラフ順序付け (= graph ordering) とカスタム・メモリアロケーターを使用します。
TensorFlow Lite は、デバイス上で利用可能であれば、ハードウェア・アクセラレーションを利用するためのインターフェイスを提供します。Android O-MR1 の一部としてリリースされた、Android Neural Networks ライブラリを通してそれを行います。
新しいモバイル固有ライブラリが何故必要なのでしょう?
機械学習は計算パラダイムを変えています、そしてモバイルと組み込みデバイス上で新しいユースケースの新興のトレンドを見ています。消費者の期待もまた、カメラと音声相互作用モデルにより駆動される、彼らのデバイスとの自然で人間のような相互作用へと傾いています。
この領域の興味を煽っている幾つかの要因があります :
- シリコン層の革新はハードウェア・アクセラレーションの新しい可能性を可能にし、Android Neural Networks API のようなフレームワークがそれらを活用することを容易にしています。
- リアルタイム・コンピュータビジョンと音声言語理解における最近の進歩はモバイルに最適化されたベンチマーク・モデル (e.g. MobileNet, SqueezeNet) のオープンソース化につながっています。
- 広く利用可能なスマート家電がオンデバイス・インテリジェンスのための新しい可能性を作ります。
- より強固なユーザデータのプライバシーのためのパラダイムへの興味、そこではユーザデータはモバイルデバイスを離れる必要がありません。
- 「オフライン」ユースケースにサーブする能力、そこではデバイスはネットワークに接続される必要がありません。
私たちは機械学習アプリケーションの次の波はモバイルと組み込みデバイス上で意義のある処理を持つことであると信じます。
TensorFlow Lite developer preview ハイライト
TensorFlow Lite は developer preview として利用可能で以下を含みます :
- 量子化されかつ浮動小数点のコア演算子のセット、それらの多くはモバイル・プラットフォームのために調整されています。これらはカスタム・モデルを作成して実行するために利用可能です。開発者は自身のカスタム演算子を書き、そしてそれらをモデルで使用することもできます。
- FlatBuffers ベースの新しいモデル・ファイルフォーマット。
- モバイル上でより高速な実行のために最適化されたカーネルを持つオンデバイス・インタプリタ。
- TensorFlow で訓練されたモデルを TensorFlow Lite フォーマットに変換するための TensorFlow コンバータ。
- より小さいサイズ: 総てのサポートされる演算子がリンクされるとき TensorFlow Lite は 300 KB より小さく、InceptionV3 と Mobilenet をサポートするために必要な演算子のみを使用するときには 200 KB よりも少ないです。
- テスト済みモデル :
次のモデルの総ては動作することが保証されてすぐに使用できます :- Inception V3、画像に存在する有力なオブジェクトを検知するためのポピュラーなモデルです。
- MobileNet、オンデバイスや組み込みアプリケーションのための制限されたリソースに配慮しながら、効率的に精度を最大化するために設計されたモバイルファーストなコンピュータ・ビジョン・モデルのファミリーです。それらは、様々なユースケースのリソース制約に適合するためにパラメータ化された、小さく、低レイテンシーな、低消費電力モデルです。MobileNet モデルは Inception V3 よりも小さくしかし 精度がより低い です。
- On Device Smart Reply、文脈的に関連するメッセージを提案することにより受信したテキスト・メッセージのためのワンタッチな返信を提供するオンデバイス・モデルです。モデルは時計やスマホのようなメモリ制約のあるデバイスのために特に構築されていて、Android Wear 上の Smart Replies を総ての first-party と third-party アプリケーションへと舗装するために成功的に使用されています。
- MobileNet モデルの量子化されたバージョン、これは非量子化 (浮動小数点) バージョンよりもより高速に動作します。
- 物体分類のための量子化された MobileNet モデルによる TensorFlow Lite の利用を示すための新しい Android デモアプリケーション。
- Java と C++ API サポート。
[注意] これは開発者リリースで、来たるバージョンでは API の変更があるかもしれません。
このリリースとの後方あるいは前方互換性は保証しません。
Getting Started
上で示された事前テストされたモデルで TensorFlow Lite を試すことをお勧めします。
既存のモデルを持つのであれば、モデルがコンバータとサポートされる演算子セットの両者と互換であるかをテストする必要があります。モデルをテストするためには、GitHub 上のドキュメント を見てください。
カスタム・データセットのために Inception-V3 あるいは MobileNet を再訓練する
上で言及した事前訓練されたモデルは、事前定義された 1000 クラスから成る ImageNet データセット上で訓練されています。これらのクラスが貴方のユースケースにとって関連がないか有用でないのであれば、それらのモデルを再訓練する必要があるでしょう。このテクニックは転移学習と呼ばれ、これはある問題について既に訓練されたモデルから始めて、そしてそれは類似の問題について再訓練されます。スクラッチからの深層学習は数日かかりますが、転移学習はかなり迅速に完了できます。これを行なうためには、関連するクラスでラベル付けされたカスタム・データセットを生成する必要があります。
TensorFlow for Poets codelab はこのプロセスを一歩ずつ歩き通します。再訓練コードは浮動小数点と量子化された推論の両者のための再訓練をサポートします。
TensorFlow Lite アーキテクチャ
次のダイアグラムは TensorFlow Lite のアーキテクチャ的なデザインを示します :
ディスク上の訓練済みの TensorFlow モデルから始めて、TensorFlow Lite コンバータを使用してそのモデルを TensorFlow Lite ファイルフォーマット (.tflite) に変換します。 それから貴方のモバイル・アプリケーションでその変換されたファイルが使用できます。
TensorFlow Lite モデルファイルの配備には以下を使用します :
- Java API: Android 上 C++ API 回りの便利なラッパーです。
- C++ API: TensorFlow Lite モデルファイルをロードしてインタプリタを起動します。Android と iOS の両者で同じライブラリが利用可能です。
- インタプリタ: カーネルのセットを使用してモデルを実行します。インタプリタは選択的カーネル・ローディング (= selective kernel loading) をサポートします; カーネルなしではそれは 100 KB だけで、そして総てのカーネルをロードすると 300 KB です。TensorFlow Mobile により必要とされる 1.5 M から意義深い削減です。
- Android デバイスの選択においては、ハードウェア・アクセラレーションのためにインタプリタは Android Neural Networks API を使用し、利用できるものがない場合にはデフォルトで CPU 実行を選択します。
インタプリタにより使用可能な C++ API を利用してカスタムカーネルを実装することもできます。
Future Work
将来のリリースでは、TensorFlow Lite は更なるモデルと組み込み演算子をサポートし、固定小数点と浮動小数点モデルの両者のための性能改善、開発者ワークフローを容易にするツールの改善そして他のより小さなデバイスのためのサポート等々を含むでしょう。(私たちが) 開発を続けるにつれて、TensorFlow Lite が小さなデバイスのためのモデルを対象とした開発者の経験を大きく単純化することを望んでいます。
将来の計画は、特定のデバイス上の特定のモデルのために最善の可能な性能を得るために特殊な機械学習ハードウェアを使用することを含みます。
Next Steps
developer プレビューについては、ドキュメントの殆どは GitHub 上にあります。
更なる情報とコードサンプル、デモ・アプリケーション等については GitHub 上の TensorFlow Lite レポジトリ を見てください。
以上