TensorFlow : Mobile : TensorFlow Mobile へのイントロダクション (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 12/12/2017
* 本ページは、TensorFlow の本家サイトの Mobile – Introduction to TensorFlow Mobile を翻訳した上で
適宜、補足説明したものです:
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
TensorFlow は Android と iOS のようなモバイル・プラットフォームのための良い深層学習ソリューションとして当初から設計されました。このモバイル・ガイドはどのように機械学習がモバイル・プラットフォームで動作可能であるか、どのように貴方のモバイル・アプリケーションに効果的に効率的に TensorFlow を統合するかを理解する助けとなるはずです。
このガイドについて
このガイドは、デスクトップ環境で成功的に動作している TensorFlow モデルを持ち、それをモバイル・アプリケーションに統合することを望み、そして TensorFlow Lite を利用できない開発者向けに意図しています。
ここにそのプロセスで直面するであろう主な課題があります :
- モバイルのためにどのように TensorFlow を使用するかを理解する。
- 貴方のプラットフォームのために TensorFlow をビルドする。
- TensorFlow ライブラリを貴方のアプリケーションに統合する。
- モバイル配備のためにモデルファイルを準備する。
- レイテンシー、RAM 使用、モデルファイル・サイズ、そしてバイナリ・サイズを最適化する。
モバイル機械学習のための一般的なユースケース
何故 TensorFlow をモバイルで実行するのでしょう?
伝統的に深層学習はデータセンターと高パワーの GPU マシンの巨大なクラスタと関係付けられてきました。けれどもデバイスがアクセスを持つ総てのデータをネットワーク接続を通して送ることは非常に高コストで時間がかかります。モバイル上の実行は、ネットワーク・ラウンドトリップを待たなければならない時には不可能であった方法で、非常に対話的なアプリケーションを配布することを可能にします。
ここにオンデバイス深層学習のための幾つかの一般的なユースケースがあります :
音声認識
音声駆動インターフェイスとともに構築可能な多くの興味深いアプリケーションがあり、これらの多くはオンデバイス処理を要求します。時間の殆どはユーザはコマンドを与えません、そのためリモートサーバへ音声を連続的にストリーミングすることは帯域の浪費でしょう、何故ならばそれは殆ど静寂かバックグラウンド・ノイズであるはずだからです。この問題を解くためにはオンデバイスで 特定のキーワードを注意深く聞く 小さなニューラルネットワークを持つことが一般的です。一度キーワードを識別したら、もし更なる計算パワーが必要であるならばそれ以上の処理のために残りの会話はサーバに送信することができます。
画像認識
モバイル・アプリケーションにとってカメラ画像の意味を理解できることは非常に有用でしょう。ユーザが写真を撮影しているとき、それらの内部のものを認識することは貴方のカメラ・アプリケーションが適切なフィルタを適用したり、簡単に見つけられるように写真にラベル付けする助けになるでしょう。組み込みアプリケーションについてもまた重要です、何故ならば、それが絶滅の危機にさらされた野性の動物を見分けているにせよ、あるいは 電車がどのくらい遅れて走っているかを報告する にせよ、興味対象の情景の総ての類を検出するために画像センサーを使用できるからです。
TensorFlow には各種の異なる事前訓練されたモデルと共に、画像内の物体の型を認識する幾つかのサンプルが付属していて、それらは総てモバイルデバイス上で実行可能です。事前訓練されたモデルをどのように取り出すか、そして特定の物体を認識することをそれに教えるために何某かの非常に高速で軽量な訓練をどのように実行するか、そしてモバイル上で実行するためにそれをどのように最適化するかを見るために Tensorflow for Poets と Tensorflow for Poets 2: Optimize for Mobile codelabs を試すことができます。
物体位置特定
画像の物体が何であるかに加えてどこに物体があるかを知ることは時に重要です。ワイヤレスネットワークを固定する手助けをしたり、風景の特徴の上に情報のオーバーレイを提供するとき、ユーザを正しいコンポーネントに導くような、モバイル・アプリケーションに恩恵を与えるような拡張された現実的なユースケースが数多くあります。組み込みアプリケーションはしばしばそれらを通り過ぎる物体をカウントする必要があります。その物体が作物の害虫であれ、人々であれ、街灯を通り過ぎる車とバイクであれです。
TensorFlow は画像で検出された人々の回りにバウンディングボックスを描くための事前訓練されたモデルを、時間とともにそれらをフォローするための追跡コードと一緒に提供します。その追跡は、そこで時間とともに幾つの物体が存在しているかカウントしようとするアプリケーションにとって特に重要です。何故ならば新しい物体がシーンに入るか離れるときの良いアイデアを与えるからです。
このための Android で利用可能なサンプルコードは GitHub 上 にあります。そしてまた利用可能な より一般的な物体検出モデル もあります。
ジェスチャー認識
画像からでも加速度計のセンサーデータの解析を通した認識でも、アプリケーションを手や他のジェスチャーで制御することが可能であれば有用です。これらのモデルの作成はこのガイドの範囲を越えますが、TensorFlow はこれらを配備する効果的な方法です。
光学文字認識
Google Translate のライブカメラ・ビューは、対話的なオンデバイス・テキスト検出がどのように効果的でありうるかの優れたサンプルです。
画像でテキストを認識することに伴う複数のステップがあります。最初にテキストが存在する領域を識別しなければなりません、これは物体位置特定問題のバリエーションで、そして類似のテクニックで解くことができます。テキスト領域を得たのであれば、次にそれを文字として解釈する必要があり、そしてどのような単語を表しているか推測する助けとするために言語モデルを使用します。どの文字が存在するかを推定する最も単純な方法はテキスト行を個々の文字にセグメントして、そしてそれから各バウンディングボックスに単純なニューラルネットワークを適用します。MNIST のために使用されるモデルのようなもので良い結果を得ることができます。それは TensorFlow チュートリアルで見つけることができますが、より高い解像度の入力を望むかもしれません。より進んだ他の選択肢は、テキスト行全体を一度に処理するために LSTM モデルを使用することで、モデル自身が分割を異なるキャラクタに処理するものです。
翻訳
ネットワーク接続がない場合でさえも、一つの言語から他の言語へ迅速に正確に翻訳することは重要なユースケースです。深層学習はこの類のタスクに非常に効果的で、文献で多くの異なるモデルの記述を見出すでしょう。しばしばこれらは sequence-to-sequence リカレントモデルでそこでは翻訳全体を行なうために別々の解析ステージを実行する必要なしに単一のグラフを実行することができます。
テキスト分類
ユーザがタイプしているあるいは読んでいるものを基にしてユーザに関連するプロンプトを提示することを望むのであれば、テキストの意味を理解することは非常に有用でしょう。ここにテキスト分類が登場します。テキスト分類はセンチメント分析からトピック発見まで総てをカバーする総称です。適用したい貴方自身のカテゴリやラベルを持つ可能性が高いでしょうから、始めるにベストの場所は Skip-Thoughts のようなサンプルで、それから貴方自身のサンプル上で訓練します。
音声合成
合成音声はユーザへのフィードバックやアクセスの補助の良い方法でありえます、そして WaveNet のような最近の進歩は深層学習が非常に自然な音声を提供できることを示しています。
モバイル機械学習とクラウド
ユースケースのこれらのサンプルは、オンデバイス・ネットワークがクラウド・サービスをどのように補完できるかのアイデアを与えます。クラウドは制御された環境で大量の計算パワーを持ちますが、しかしデバイス上の実行はより高い相互作用性 (会話性) を与えることができます。クラウドが利用可能でないかクラウドのキャパシティが制限されている状況では、オフラインの体験を提供できます、あるいは簡単なケースではデバイス上で処理することによりクラウド・ワークロードを削減できます。
オンデバイス計算を行うことはまたクラウド上の作業へスイッチする時がきたら信号を送ることができます。これの良い例は音声のホットワード検出です。デバイスはキーワードを絶え間なく注意して聞くことが可能なので、ある一つが認識された時にはこれがクラウド・ベースの音声認識への多くのトラフィックのトリガーとなります。オンデバイス・コンポーネントなしでは、このアプリケーション全体は上手く動作しないでしょう。そしてこのパターンは幾つかの他のアプリケーションに渡ってもまた存在します。何某かのセンサー入力の認識は十分に興味深いです、というのは更なる処理は多くの興味深い製品を可能にするからです。
どのようなハードウェアとソフトウェアを貴方は持つべきでしょう?
TensorFlow は Ubuntu Linux, Windows 10, そして OS X 上で動作します。総てのサポートされるオペレーティング・システムのリストと TensorFlow をインストールするための手順については、Installing Tensorflow を見てください。
Mobile TensorFlow のために提供しているサンプルコードの幾つかは TensorFlow をソースからコンパイルすることを要求しますので、そのため総てのサンプルコードを通すためには単なる pip install 以上のものを必要とすることに注意してください。
モバイル・サンプルを試すためには、Android Studio か、iOS のために開発しているのであれば XCode を使用して開発のためのデバイス・セットアップが必要でしょう。
始める前に何をするべきでしょうか?
モバイル上で貴方のソリューションをどのように得るかを考える前に :
- モバイル機械学習で貴方の問題が解決可能か決定します。
- 貴方の問題を定義するためにラベル付けされたデータセットを作成します。
- 問題に対する効果的なモデルを選択します。
これらを以下で詳細に議論します。
貴方の問題はモバイル機械学習で解決可能でしょうか?
解決することを望む問題のアイデアを持つのであれば、ソリューションをどのように構築するか計画を作成ことが必要です。最も重要な最初のステップは、貴方の問題が実際に解決可能であるかを確かなものにすることで、それを行なうための最善の方法は (手続きの) ループ内で人間を使ってそれを真似てみることです。
例えば、もしロボット・トイカーを音声コマンドを使用して駆動することを望む場合、デバイスから何某かの音声をレコードしてみて話されたことが意味をなしているかを見るためにそれを聴き直してください。 しばしばモーターが音声をかき消していたりあるいは少し離れて聞き取ることができないような、捕捉プロセスで問題があることを見出すでしょう。モデリング・プロセスを探求する前にこれらの問題に対応すべきです。
他の例は、貴方のアプリケーションで撮られた写真を人々に与えてみて貴方が求めている方法でそれらの中にあるものを分類できるか確認します。もし彼らがそれをできないならば (例えば写真から食べ物のカロリーを見積もろうとすることはできないでしょう、何故ならば総てのホワイトスープは同じに見えるからです)、それに対処するために貴方の知見を再設計する必要があるでしょう。良い経験則として、もし人間がタスクを上手く処理できないのであれば、より上手くやるためにコンピュータを訓練することは困難でしょう。
ラベル付けされたデータセットを作成します
貴方のユースケースで基本的な問題を解決した後には、貴方がどのような問題を解決しようとしているかを定義するためにラベル付けされたデータセットを作成することが必要です。このステップは極めて重要です、どのモデルを使用するかを選択するよりもです。それに実際のユースケースの可能な限り典型的であることを望みます、何故ならばモデルは貴方がそれに教えたタスクでのみ効果的であるからです。データへのラベル付けを可能な限り効率的そして正確にするツールに (時間やコストを) 投資することもまた価値があります。例えば、もし web インターフェイス上のボタンをクリックしなければならないことから単純なキーボード・ショートカットへ切り替えることができれば、生成プロセスを多大にスピードアップすることができるかもしれません。貴方はまた初期のラベリングを貴方自身で行なうことから始めるべきです、そうすれば難しさやありがちなエラーについて学ぶことができて、そしてそれらを回避するためにラベリングあるいはデータ捕捉プロセスを多分変更できるでしょう。ひとたび貴方と貴方のチームが矛盾なくサンプルにラベル付けできたのであれば(i.e. ひとたび殆どのサンプルについて同じラベルで一般的に合意するならば)、次に、貴方の知識をマニュアルにして捕捉してそして外部の評価者にどのように同じプロセスを実行するかを教えることができます。
効果的なモデルを選択します
次のステップは使用する効果的なモデルを選択することです。もし他の誰かが既に貴方が必要なものに類似したモデルを実装していたならば、スクラッチからモデルを訓練することを回避することができるかもしれません ; 私たちは TensorFlow で実装されたモデルのレポジトリを GitHub 上 に持っていて、それは貴方が通して見ることができます。見つけられる最も単純なモデルを頼ってください、そしてラベル付けされたデータの小さな総量でも持てたらすぐに始めてみてください、何故ならば迅速に反復できるときに最善の結果を得られるはずだからです。モデルを訓練して実際のアプリケーションでそれを実行しようとすることにかかる時間が短いほどより良い全体の結果を見るでしょう。アルゴリズムにとって優れた “訓練”” 精度を得てもしかし実際のアプリケーション内で有用であることに失敗することは珍しくありません。何故ならばデータセットと実際の利用の間には不適合があるからです。首尾一貫したユーザ体験を作成するための end-to-end な利用方法をできる限り早くプロトタイプしてください。
Next Steps
Android か iOS のための私たちのデモの一つをビルドすることから始めることを提案します。
以上