昨年末、Google はモバイル デバイス上の Tensorflow 用の新しいモバイル ライブラリ Lite を発表しました。
ご存知ない方のために説明すると、Tensorflow は大規模な機械学習モデルを開発するための Google のフレームワークであり、コミュニティで人気を博しています。ただし、多くの開発者は、その上で Keras などのより高レベルの抽象化を使用することを選択しています。
その理由の一つは、Tensorflowが大規模なサーバークラスターにまたがるスケールで機械学習を実行できる能力と、各サーバー上のGPUユニットを活用してさらなる高速化を実現できることです。これらのクラスターは機械学習モデルのトレーニングに使用され、新しいデータが提示された際に推論を実行できるようになります。
問題は、これらのモデルを学習させるには膨大なデータが必要になることです。例えば、Tensorflow Liteのサンプルアプリケーション(MobileNet_v1_1.0_224
)で使用されている画像認識モデルの1つは、250万枚以上の画像で学習されています。しかも、これには検証とテストは含まれていません。
当然のことながら、このような大規模な鉄道模型をすぐにモバイル端末のプラットフォームで実行できるとは考えにくいでしょう。Tensorflow Liteは、モバイル端末向けに最適化された事前学習済みモデルをAndroidまたはiOSプラットフォームのモバイルアプリにインポートできるモジュールライブラリを提供することで機能します。
iOS用のテストアプリの一つを見てみましたが、画像を読み込むとアプリが画像の主要な要素を推測する機能がありました。より高度なアプリでは、カメラに接続して、撮影した画像に対しても同じトリックを実行できます。
かなり印象的です。Lite氏は自信を持って下の画像はスポーツカーだと述べていますが、MX-5であることを考えると、異論もあるかもしれません。
それは鳥か、飛行機か、それともスポーツカーか?写真:アンディ・コブリー
下のような難しい画像を提示されたモデルは、果敢に挑戦しましたが、うまくいきませんでした。今回は、最も自信のあるものを一番上に配置した、主要な要素の候補リストが表示されました。配線、ライト、そしてディスプレイらしきものの数から、Tensorflow Liteはオシロスコープだと判断しました。良い試みでしたが、間違いでした。ユーロラック・シンセサイザーでした。
正直に言うと、キットをダウンロードして、この単純な例にさまざまな画像を送信することは、インストールにかかる非常に長い時間を正当化するほど楽しいです。
かつてのオシロスコープ:ユーロラック・シンセサイザー。写真:アンディ・コブリー
隠されたトリックはさておき、なぜモバイルデバイスで機械学習を利用できるようにしたいのでしょうか?現在、アプリがこの種の「インテリジェンス」を必要とする場合、サーバーベースの設定に依存します。つまり、サーバーに接続して応答を待つ必要があります。これは、プライバシーとデータサービスへの依存に関して、いくつかの問題を引き起こします。
データ (この場合は、識別したいものの写真) をサーバーに戻す必要がある場合、おそらくチャネルの最も弱いリンクを通じて途中で傍受される可能性があります。
たとえ傍受されなくても、あなたは事実上、巨大企業にデータを渡し、彼らの思うがままに扱うことになります。一部のユーザーは、この考えに抵抗を感じるかもしれません。データをサーバーに送り返すということは、何らかのモバイル信号やWi-Fi信号に依存することを意味します。ロンドン中心部にいる限りは問題にならないかもしれませんが、モバイル通信のブラックスポット(スコットランドのハイランド地方やロンドン周辺の都市部南東部にも同様に存在する)では、状況は異なります。現場で作業する科学者やエンジニアにとっては、問題となる可能性があります。スマートフォンにモデルを搭載することで、これらの問題は両方とも解決されます。ただし、応答速度はスマートフォンの速度に依存します。
シンプルな画像認識モデルは、とても楽しく遊んでみることができ、さまざまな画像で実行するには、プロジェクトに画像をインポートし、コードを 1 行変更して新しい画像を読み込むだけです ( RunModelViewController.mm
iOS アプリの 155 行目)。
ここまで到達するのは、それほど簡単ではないかもしれません。iOSアプリを登録するためにAppleが通常要求する手順に加え、GitHubからTensorflow Liteをダウンロードし、Xcodeが最新であること、Tensorflowの依存関係brew
がインストールされていることautomake:libtool
、そして最後にiOS用のTensorflow Liteライブラリをビルドする必要があります。
カメラ付きデモを実行するには、RubyベースのCocoaPodsが必要です。CocoaPodsを使うと、Podインストールコマンドを実行できるようになります。これは、ご想像の通り、さらに多くのファイルをインストールします。Android向けのビルドも同様に時間がかかり、通常のAndroid SDKに加えて、BazelとAndroid NDKが必要です。ちなみに、Windowsユーザーの方は、ドキュメントに「BazelはまだWindowsでのAndroidビルドを完全にはサポートしていません」という注意書きがあります。
始めるだけでもおそらく午後の仕事になるでしょう。
もちろん、これはあくまでデモです。機械学習を使ってアプリを開発し始めるのは素晴らしいことです。しかし、モバイル開発者にとって真の問題はここから始まり、いきなり機械学習の世界に足を踏み入れることになります。簡単に始められるようなものではありません。運が良ければ、Tensorflowのコードを見つけて、必要な機能を実現できるかもしれません。しかし、それでも必要な機能を実現するには、おそらくコードを実際に触ってみる必要があるでしょう。
幸運なことに、別の仕事で使っていた映画認識エンジンのコードが残っていて、それを変更して学習済みモデルをファイルシステムに保存していました。このモデルをコンバーターに通して.tflite
iOSアプリに読み込めるファイルを作成するだけで済むので、簡単だろうと思いました。
私は間違っていました。iOS開発者にとっての第一のハードルはSwift APIが存在しないことです。そのため、この時点でObjective C++に頼らざるを得なくなります。第二のハードルはモデルを凍結グラフに変換することです。これには、正しい形式のモデルだけでなく、モデルのチェックポイントと、特に重要な出力ノード名を含むフォルダが必要です。チュートリアルでは、モデル構築コード以外ではこれらの情報が分かりにくい場合があることを認めていますが、グラフの視覚化を見れば分かります。
言うまでもなく、私の推奨モデルはまだアプリに統合されていません。
Tensorflow Lite が他の新興テクノロジーと比べてそれほど難しいものではないことは間違いありません。ただし、このフレームワークを使った開発には、モバイルアプリ開発の知識だけでなく、Tensorflow の仕組みに関する深い知識も必要となることを受け入れる必要があります。
Tensorflowと機械学習のスキルを組み合わせたモバイル開発スキルを求める求人広告が登場するのは時間の問題でしょう。モバイルアプリに機械学習を組み込む機会を考えると、この流れに乗るのは理にかなっていると言えるでしょう。今こそ、あなたがおそらく不足している技術面の知識を習得し、この溝を埋める時です。®