機械学習を利用した、よりスマートなアプリの開発
機械学習(ML)とは、アプリが経験をもとに学習と改善を行うように明示的にプログラミングされていなくても、それを自動的に実行できるようにするプログラミング手法です。ML は特に、画像やテキストなどの非構造化データを使用するアプリや、多数のパラメータを扱う問題(スポーツの優勝チームの予測など)に適しています。
Android は、機械学習用のさまざまなツールと手法をサポートしています。経験豊富な Android デベロッパーの方も、Android アプリの開発を始めたばかりの方も、以下の ML に関するリソースを活用することで最善の結果を得ることができます。
主な ML 開発分野
Android 用 ML アプリの開発では、プロダクトの設計、推論アルゴリズムの実装、既存の ML モデルのデプロイが主な仕事です。状況によっては、既存のモデルの再トレーニングや、新しいモデルの作成、トレーニングを行うこともあります。
機械学習対応の設計
他のテクノロジーと同様に、機械学習をソリューションとして適用するには、プロダクト マネージャー、デザイナー、デベロッパーが協力し合い、プロダクトの目標を定めて設計と構築を行い、これを繰り返し行う必要があります。Google では、機械学習に関する以下の 2 つのガイドを作成しています。
- 人間と AI に関するガイドブック: チームが人間中心の AI プロダクトに関する意思決定を行う際のおすすめの方法が紹介されています。
- 機械学習用のマテリアル デザインの仕様: 機械学習を活用する機能(物体検出、バーコード スキャンなど)に関する設計のガイドラインとパターンが掲載されています。
モデルの構築とトレーニング
機械学習には、特定のタスク(予測の作成、入力の分類や認識など)を実行するようにトレーニングされたモデルが必要です。既存のモデルを選択(場合によってはカスタマイズ)したり、ゼロからモデルを作成したりすることも可能です。モデルの作成とトレーニングは、開発マシン上で行うか、クラウド インフラストラクチャを使用して行います。
事前トレーニング済みのモデル
事前トレーニング済みのモデルは、ML Kit と Google Cloud で入手できます。詳しくは、次のセクションをご覧ください。
TensorFlow で独自のモデルを作成する方法
以下の TensorFlow のリソースを利用して、実践的な開発体験を積むことができます。
- TensorFlow チュートリアル
- TensorFlow for Poets Codelab: 転移学習を使用して事前トレーニング済みの画像ラベル付けモデルをカスタマイズする方法が紹介されています。
推論
推論とは、特定のタスクを実行するためにすでにトレーニングされた機械学習モデルを使用するプロセスです。
Android デベロッパーは、推論をデバイスで実行するか、リモートからアクセスされるクラウド サービスを使用するかを決める必要があります。この意思決定を行う際に考慮すべき問題は次のとおりです。
問題 | デバイスでの推論 | クラウドベースの推論 |
---|---|---|
レイテンシ | レイテンシを低くするとリアルタイムのエクスペリエンスが向上する | 非同期通信と使用可能な帯域幅がレイテンシに影響することがある |
リソース | 特定のデバイスのリソース(処理能力やストレージなど)がパフォーマンスを制限することがある | クラウドベースのリソースは強力で、ストレージ容量が大きい |
オフライン / オンライン | オフラインで動作できる場合、ネットワーク インフラストラクチャがほとんどまたはまったくない状態で実行する際に有利になる | ネットワーク接続が必要 |
コスト | 電池使用量、モデルのダウンロード時間(エンドユーザー) | データ転送の帯域幅(エンドユーザー)、コンピューティング料金(デベロッパー) |
プライバシー | ユーザーデータが常にデバイス上に保持される | データがデバイスの外部に送信されることがあり、追加の予防措置が必要になる場合がある |
次の表に、各種類の推論で利用可能な開発オプションを示します。
デバイスでの推論 | クラウドベースの推論 |
---|---|
ML KitTensorFlow LiteTensorFlow Lite を使用すると、トレーニング済みの TensorFlow モデルをデバイス上のソリューションとして提供できます。 AutoMLAutoML を使用して、Google Cloud で独自のカスタム ビジョンモデルをトレーニングし、結果として生成されるモデルを Android デバイスやその他のエッジデバイスで実行できます。 |
ML KitGoogle Cloud API
|
デプロイ
デプロイとは、デバイス上で推論する際に Android で使用する ML モデルをパッケージ化および更新するプロセスのことです。これには以下の 3 つの方法があります。
- ML モデルを Android アプリに含める
- モデルを、他のアセットと同じようにアプリと一緒にデプロイします。モデルを更新するには、アプリを更新する必要があります。モデルをアプリに追加する方法は、以下のように 2 つあります。
- アプリの APK ファイルにモデルを含めます。これは最も基本的な方法です。
- モデルを Android App Bundle に含めて、Dynamic Delivery を使用します。
- 実行時にモデルを提供する
- この方法では、アプリとは無関係にモデルを更新できます。また、A/B テストの実行も簡単になります。ML Kit カスタムモデルの機能を使用してカスタムモデルを配信したり、専用のインフラストラクチャでモデルのダウンロードをホストしたりできます。
- 両方の組み合わせ
- モデルを新しいバージョンに更新するときに、モデルがダウンロードされるのをユーザーが待たずに済むように、デベロッパーがモデルの初期バージョンを Android アプリとパッケージ化することはよくあります。
事前トレーニング済みの一部の ML Kit モデル(テキスト認識とバーコード スキャン)では、Google Play 開発者サービスで提供されている共有モデルを使用して、APK のサイズを縮小できます。
デベロッパーの事例
不可能を可能にする
Android アプリに ML を追加することで、さまざまな状況下で正常に機能することが極めて困難だったアプリ(確実なバーコード スキャンなど)や、以前はそもそも不可能だったアプリ(画像検出やテキスト感情分析など)をこれまでにない方法で開発することができます。
Lose It!

Lose It! はダイエットを支援するカロリー管理アプリです。食べたものを記録すると、消費カロリーが計算されます。ユーザーがライブラリに登録されていない新しい食べ物を Lose It! 入力する際、栄養表示ラベルをスキャンしてデータを取り込めるよう、ML Kit のテキスト認識 API が使用されます。
PlantVillage

PlantVillage を使ってキャッサバの病気を検出できます。ペンシルベニア州立大学と国際熱帯農業研究所は、モバイル デバイスでオフライン実行が可能なカスタムの TensorFlow モデルを使用して、農業従事者が植物の病気の初期兆候を検出できるようサポートしています。
Fishbrain

Fishbrain アプリは、各地域の釣り場の地図や予報を提供し、数百万人もの釣り好きの人たちを結び付けています。また、ML Kit カスタムモデルを使用して、カスタマイズされた最新の TensorFlow Lite モデルを提供しています。