[go: nahoru, domu]

この記事は Hoi Lam による Android Developers Blog の記事 "Full spectrum of on-device machine learning tools on Android" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

このブログ投稿は、 Android 11 に関する重要な内容を毎週取り上げる #11WeeksOfAndroid シリーズの一部です。第 2 週は、機械学習がテーマです。





1 週間を通じて、Android のオンデバイス機械学習(ML)のさまざまな側面を取り上げてきました。私たちは、実に多様な ML ツールを利用しています。この点は、できたてのアプリから定着しているアプリまで、開発のどの段階でも変わりません。また、設計や製造、エンジニアリングなどの役割や、初心者からエキスパートまでのスキルレベルによって変わるものでもありません。

設計 - 差別化のための ML


「ユーザーに目を向ければ他はすべてついてくる」というのは Google 社内でよく使われる寸言ですが、現在の機械学習の時代にあって、この言葉がますます意味を持つようになっています。Google のデザイン アドボケートである Di Dang は、ユーザーの問題と ML の長所が交わる唯一の交差点を見つけることの重要性を強調しています。往々にして、チームはユーザーのニーズを見失った機械学習のアイデアを追い求めがちです。





Di は、ML 製品の意思決定を行う際に「人にうれしいAIのための UXデザインガイド People + AI Guidebook(日本語・コミュニティによる翻訳版)」を活用する方法と、ML の設計や開発に特有の精度や再現率などのトピックについて Read Along アプリを例に挙げて説明しています。チームがインスピレーションを得るために、Di による Read Along チームへのインタビューもご覧ください。


オンデバイスに完全フォーカスした新しい ML Kit


オンデバイス機械学習をソリューションとして使うべきだと判断した場合、それを最も簡単に実装する方法は、ML Kit のようなすぐに使える SDK を活用することです。Google がトレーニングした洗練されたモデルや処理パイプラインが、使いやすい Kotlin / Java のインターフェースを通して提供されています。ML Kit はオンデバイス ML 用に設計、構築されました。オフラインで動作し、プライバシーが強化されており、リアルタイム ユースケースで高いパフォーマンスを発揮します。しかも、無料です。また先日、ML Kit をスタンドアロン SDK にして、Firebase アカウントがなくても利用できるようにしました。build.gradle ファイルに 1 行追加するだけで、アプリに ML 機能を組み込むことができます。






Jetpack ライフサイクル サポートや、Google Play Services を通して顔の輪郭モデルを使用することでアプリのサイズを 20 MB も節約できるオプションなど、新機能も追加しています。また最近、大きな期待を寄せられていた機能がもう 1 つ追加され、画像のラベル付け物体検知および物体トラッキングにおいて、Google モデルを独自のモデルと交換できるようになりました。これは、特に簡単に TensorFlow Lite モデルをアプリに追加する方法の 1 つです。ByteArray を操作する必要は一切ありません!

TensorFlow Lite と Android ツールによるカスタマイズ


ML Kit が提供するベースモデルでは満足できないデベロッパーはどうすればいいでしょうか?まず参照すべき場所は、TensorFlow Hub です。ここから Google や多数のコミュニティが提供する TensorFlow Lite モデルをダウンロードして、すぐに使うことができます。米国のスーパーマーケットの 10 万点の商品からトマトの病気の分類まで、選択は皆さん次第です。





Firebase AutoML Vision Edge を利用できるだけでなく、TensorFlow Model Maker(イメージ分類 / テキスト分類)を使えば、Python で数行書くだけで独自のモデルを構築することもできます。TensorFlow Hub か Model Maker で TensorFlow Lite モデルを取得したら、ML Kit の画像のラベル付け物体検知および物体トラッキングを使って Android アプリに簡単に組み込むことができます。オープンソースのソリューションを使いたい方は、Android Studio 4.1 ベータ版に含まれている ML モデル バインディングを利用すると、使いやすい Kotlin / Java ラッパーで TensorFlow Lite モデルをラップできます。Android アプリにカスタムモデルを追加する作業は、今までになく簡単になっています。詳しくは、こちらのブログをご覧ください

今こそオンデバイス ML の時代



Android Developer Challenge の入賞者からもわかるように、今まさにオンデバイス機械学習の時代が到来しています。かつてはクラウドやスーパーコンピュータだけのものだった ML 機能が Android スマートフォンで利用できるようになりました。一歩踏み出して、11 Weeks of Android のコードラボに挑戦してみましょう。

Android オンデバイス機械学習は急速に進化を続けているプラットフォームです。機能強化リクエストや改善案のフィードバックは、ユースケースと合わせてお知らせください(TensorFlow Lite / ML Kit)。今こそオンデバイス ML の時代です。

機械学習の関連情報


#11WeeksOfAndroid 動画コンテンツの全プレイリストはこちらから、それぞれの週の詳しい内容はこちらからご覧いただけます。毎週新しい分野を取り上げますのでご期待ください。Twitter や YouTube のフォローもお願いします。ご覧いただき、ありがとうございました!


Reviewed by Khanh LeViet - Developer Advocate and  Hidenori Fujii - Google Play Developer Marketing APAC


この記事は The TensorFlow Blog の記事 "TensorFlow Lite Core ML delegate enables faster inference on iPhones and iPads" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
投稿者: ソフトウェア エンジニア、Tei Jeong、Karim Nosseir



TensorFlow Lite では、モデルの推論の一部または全部を GPU、DSP、NPU などのアクセラレータに委譲し、モバイルでの推論を効率化することができます。Android で選択できるデリゲートには、NNAPIGPU、そして最近追加された Hexagon があります。しかしこれまで、Apple のモバイル端末である iPhone や iPad では、GPU デリゲートしか選択できませんでした。

Apple が自社の機械学習フレームワークである Core ML と Neural Engine(Apple の Bionic SoC のニューラル プロセッシング ユニット(NPU))をリリースしたとき、TensorFlow Lite から Apple のハードウェアを利用できるようになりました。

Google の Edge TPU や Apple の Neural Engine のようなニューラル プロセッシング ユニット(NPU)は、機械学習アプリケーションを高速化するために設計された専用のハードウェア アクセラレータです。このようなチップは、モバイル端末やエッジデバイスでのモデルの推論をスピードアップするために設計されており、消費電力も CPU や GPU で推論を行う場合より少なくなります。

本日は、新しい TensorFlow Lite のデリゲートについてお知らせします。このデリゲートは、Apple の Core ML API を活用し、Neural Engine が搭載された iPhone や iPad で浮動小数点モデルを高速に実行します。MobileNet や Inception V3 などのモデルでは、最大で 14 倍のパフォーマンスが向上することが確認できます(詳細下記)。
TFLite Core
図 1: 実行時のデリゲートの仕組みを示した概念図。グラフのサポートされている部分はアクセラレータが実行するが、その他の命令は TensorFlow Lite カーネル経由で CPU が実行する。

サポートされる端末

このデリゲートは、iOS バージョン 12 以降(iPadOS を含む)の iOS 端末で動作します。ただし、真のパフォーマンスのメリットを得るには、Apple A12 SoC 以降を搭載した端末(iPhone XS など)で実行する必要があります。それよりも古い iPhone でパフォーマンスを向上させたい場合は、TensorFlow Lite GPU デリゲートを利用してください。

サポートされるモデル

この初回リリースでは、32 ビット浮動小数点モデルがサポートされます。サポートされるモデルには、画像分類、物体検知、オブジェクト セグメンテーション、姿勢推定モデルなどが含まれますが、それに限りません。このデリゲートは、畳み込み演算など、たくさんの重い計算命令をサポートしていますが、一定の制約がある命令もあります。実行時に委譲を行う前に制約がチェックされ、サポートされていない命令は自動的に CPU にフォールバックされます。すべての命令リストとそれぞれの制限(存在する場合)については、デリゲートのドキュメントをご覧ください。

パフォーマンスへの影響

このデリゲートについて、2 つの一般的な浮動小数モデルである MobileNet V2 と Inception V3 でテストを行いました。ベンチマークを行ったのは iPhone 8+(A11 SoC)、iPhone XS(A12 SoC)、iPhone 11 Pro(A13 SoC)で、CPU のみ(デリゲートなし)、GPU、Core ML デリゲートという 3 つのデリゲート オプションをテストしました。前述のように、アクセラレーションによってパフォーマンスが向上するのは A12 SoC 以降のモデルです。しかし、iPhone 8+ ではサードパーティが Neural Engine を利用できないので、小さなモデルで Core ML デリゲートを使用してもパフォーマンスが向上することはありません。大きなモデルのパフォーマンスは、GPU デリゲートと同等です。

モデルの推論にかかる時間に加え、起動時間も測定しました。スピードアップは起動時間の増加とのトレードオフである点に注意してください。Core ML デリゲートでは、モデルのサイズに伴って起動時間が増加します。たとえば、MobileNet のような小さなモデルの起動時間は 200-400 ミリ秒でした。一方で、Inception V3 のような大きなモデルの起動時間は、2-4 秒になりました。現在、この起動時間を短縮するための作業を行っています。このデリゲートは、バイナリサイズにも影響を与えます。Core ML デリゲートを使うと、バイナリサイズが最大 1 MB 増加する可能性があります。

モデル


  • MobileNet V2(1.0、224、浮動小数) [ダウンロード] : イメージ分類
    • 小さなモデル。グラフ全体を Core ML で実行。
  • Inception V3 [ダウンロード] : イメージ分類
    • 大きなモデル。グラフ全体を Core ML で実行。

端末

  • iPhone 8+(Apple A11、iOS 13.2.3)
  • iPhone XS(Apple A12、iOS 13.2.3)
  • iPhone 11 Pro(Apple A13、iOS 13.2.3)

MobileNet V2 での処理時間とスピードアップの程度

図 2: MobileNet V2 での処理時間とスピードアップの程度。すべてのバージョンで浮動小数点モデルを使用。CPU Baseline は 2 スレッド TensorFlow Lite カーネルを示す。
* GPU: Core ML は推論に CPU と GPU を使用。NPU: Core ML は推論に CPU と GPU、さらに NPU(Neural Engine)を使用。

Inception V3 での処理時間とスピードアップの程度

図 3: Inception V3 での処理時間とスピードアップの程度。すべてのバージョンで浮動小数点モデルを使用。CPU Baseline は 2 スレッド TensorFlow Lite カーネルを示す。
* GPU: Core ML は推論に CPU と GPU を使用。NPU: Core ML は推論に CPU と GPU、さらに NPU(Neural Engine)を使用。

使ってみたい方へ

必要な処理は、新しいデリゲートのインスタンスを使って TensorFlow Lite の Interpreter を呼び出すことだけです。詳しい説明は、完全版のドキュメントをご覧ください。推論の際には、Swift API(下の例)か C++ API(ドキュメントに記載)を使って TensorFlow Lite デリゲートを呼び出すことができます。

Swift の例

このデリゲートを一般的な Swift アプリケーションから呼び出す方法を示します。必要な処理は、新しい Core ML デリゲートを作成してオリジナルの interpreter の初期化コードに渡すことだけです。
let coreMLDelegate = CoreMLDelegate()
let interpreter = try Interpreter(modelPath: modelPath,
                                  delegates: [coreMLDelegate])

今後の作業

今後の数か月間で既存のデリゲートを改善し、対応する命令を増やしてさらなる最適化を行う予定です。ロードマップでは、トレーニング後に float16 量子化を行ったモデルのサポートを予定しています。これにより、わずかな精度と引き替えにサイズが約半分になるので、モデルを高速化できます。
ロードマップでは、トレーニング後の重みの量子化(ダイナミック量子化とも呼ばれます)もサポートする予定です。

フィードバック

これは、デベロッパーの皆さんから寄せられた共通の機能リクエストでした。この機能をリリースすることができてうれしく思います。皆さんのご感想をお待ちしています。直接ユースケースを共有するか、Twitter でハッシュタグ #TFLite と #PoweredByTF を付けてお知らせください。バグや問題は、GitHub から送信できます。

謝辞

Tei Jeong、Karim Nosseir、Sachin Joglekar、Jared Duke、Wei Wei、Khanh LeViet に感謝します。
注: Core ML、Neural Engine、および Bionic SoCs(A12、A13)は Apple Inc のプロダクトです。

Reviewed by Khanh LeViet - Developer Relations Team

この記事は The TensorFlow Blog の記事 "Higher accuracy on vision models with EfficientNet-Lite" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
投稿者: ソフトウェア エンジニア、Renjie Liu


2019 年 5 月、Google は EfficientNet と呼ばれる一連の画像分類モデルをリリースしました。このモデルでは最高水準の精度を実現し、計算とパラメータを桁違いに削減できました。エッジデバイスで EfficientNet を実行できれば、計算リソースが限られているモバイルや IoT で新たな用途への扉を開くことができます。

本日は、 EfficientNet-LiteGitHubTFHub)についてお知らせします。EfficientNet-Lite は、モバイルの CPU や GPU、そして EdgeTPU で動作するように設計されており、TensorFlow Lite を使って実行します。EfficientNet-Lite は、EfficientNet のパワーをエッジデバイスに提供します。ユーザーは、低レイテンシ/小モデルサイズのオプション(EfficientNet-Lite0)から高精度オプション(EfficientNet-Lite4)まで、5 種類の中から選ぶことができます。その中で最も大きく、整数のみに量子化された EfficientNet-Lite4 は、Pixel 4 の CPU でリアルタイム(例: 1 イメージあたり 30ms)に動作しながら、ImageNet のトップ 1 で 80.4% の精度を実現します。次の図は、量子化した EfficientNet-Lite モデルと、同様に量子化したバージョンのいくつかの有名な画像分類モデルでパフォーマンスを比較した結果です。
図: 整数のみに量子化したモデルを Pixel 4 のCPU で 4 スレッドを使って実行

課題: 量子化と異種ハードウェア

エッジデバイス特有の性質により、いくつかの課題が生じます。

量子化: 浮動小数点のサポートが限られているエッジデバイスが多いため、量子化が広く用いられています。しかし、それには量子化に対応した複雑なトレーニング手続きが必要です。それがないと、トレーニング後の量子化モデルの精度が下がります。

ありがたいことに、私たちのツールキットに含まれる TensorFlow Lite トレーニング後量子化ワークフローを活用し、精度の低下を最小限に抑えてモデルを量子化することができました。

異種ハードウェア: モバイル GPU/EdgeTPU など、幅広いアクセラレータで同じモデルを実行するのは難しいことです。多くの場合、ハードウェアの特殊性から、こういったアクセラレータは限られたオペレーションでしかパフォーマンスを発揮しません。EfficientNet のオペレーションの中には、特定のアクセラレータでうまくサポートされないものがあることがわかりました。

この異種ハードウェア問題に対応するため、次のような簡単な修正によってオリジナルの EfficientNet を調整しました。
  • うまくサポートされていない squeeze-and-excitation ネットワークを削除しました。
  • すべての Swish 活性化関数を RELU6 に置き換えました。これにより、トレーニング後の量子化の質が大幅に改善しました(後述)。
  • スケーリングしたモデルのサイズと計算を減らすため、モデルをスケールアップする際のステムとヘッドを修正しました。

TensorFlow Model Optimization Toolkit によるトレーニング後の量子化

TensorFlow Model Optimization Toolkit のおかげで、簡単にモデルを量子化することができました。トレーニング後に整数のみに量子化することによって、多くの精度を失うこともありませんでした(詳細については、こちらのリンクをご覧ください)。その結果、モデルのサイズは 4 分の 1、推論速度は 2 倍になりました。
次に示すのは、精度とレイテンシについて、EfficientNet-Lite0 浮動小数モデルと、それを量子化したバージョンを比較した結果です。
* Pixel 4 の CPU で 4 スレッドを使ったベンチマーク
さらに、トレーニング後の量子化に関して、いくつかの経験を共有したいと思います。最初にトレーニング後の量子化を試したとき、精度が大幅に低下したことがわかりました。ImageNet データセットでのトップ 1 の精度が 75% から 46% に下がりました。
この問題の原因は、量子化後の出力範囲が広すぎたことだと判明しました。量子化は基本的に、浮動小数点値を int8 バケットに収まるようにアフィン変換することで行います。
量子化の図
今回の場合は、次に示すように、出力されるテンソルの範囲が -168 から 204 でした。 これは、精度が大きく失われた可能性があることを示しています。広範囲の浮動小数テンソルを int8 の範囲のバケットに収めるのは難しいからです。
この問題に対処するため、Swish 活性化関数を「範囲が限定された」活性化関数(relu6)に置き換えました。relu6 は、出力を [0, 6] に限定します。この変更後、ImageNet に対する量子化モデルのトップ 1 精度は、浮動小数点の基準値 75.1% に対して、74.4% まで回復しました。

皆さんのデータセットで EfficientNet-Lite をお試しください

皆さんのデータで EfficientNet-Lite のパワーを活用しましょう。TensorFlow Lite Model Maker を使うことをお勧めします。このツールを使うと、ユーザーの入力データを使って既存の TensorFlow モデルに転移学習を適用し、結果のモデルを TensorFlow Lite 形式にエクスポートすることができます。
TensorFlow Lite Model Maker は、MobileNetV2 や全種類の EfficientNet-Lite など、複数のモデル アーキテクチャをサポートしています。わずか 5 行のコードで EfficientNet-Lite0 画像分類モデルを構築する例を紹介します。
# Load your custom dataset
data = ImageClassifierDataLoader.from_folder(flower_path)
train_data, test_data = data.split(0.9)

# Customize the pre-trained TensorFlow model
model = image_classifier.create(train_data, model_spec=efficienetnet_lite0_spec)

# Evaluate the model
loss, accuracy = model.evaluate(test_data)

# Export as TensorFlow Lite model.
model.export('image_classifier.tflite', 'image_labels.txt')
花分類 notebook でライブラリを試してみてください。model_spec パラメータを変更すると、異なるモデルに簡単に切り替えることができます。tf_flowers のような小さなデータセットでは、5 エポックのトレーニングを数分行うだけで、最大 92% の精度を実現できます。エポックやデータを増やしてトレーニングするか、モデル全体を細かくチューニングすることで、さらに精度を改善できます。
次に、このモデルを使ってモバイルアプリを作ってみましょう。まず、Image Classification サンプルから着手します。このモバイルアプリは、EfficientNet-Lite で構築されており、すぐに実行することができます。アプリは Gradle タスクを使い、ImageNet データセットで事前トレーニングを行った EfficientNet-Lite モデルを assets フォルダーに自動ダウンロードします。Model Maker で作ったカスタムモデルを試したい場合は、assets フォルダーのモデルを置き換えます。
スクリーンショットからわかるように、EfficientNet-Lite モデルはリアルタイムに推論を実行します(30 fps 以上)。

さらに詳しく知りたい方は

リファレンス アプリをビルドし、いろいろ試してみましょう(手順)。また、TensorFlow Hub の EfficientNet-Lite を試し、TensorFlow Lite Model Maker を使って自分のタスク用にカスタマイズしてみましょう。TensorFlow Lite の詳細は、tensorflow.org/lite で学ぶことができます。 TensorFlow モデル最適化を試し、tfhub.dev で他の TensorFlow Lite モデルを探してみてください。

謝辞

Renjie Liu、Xunkai Zhang、Tian Lin、Yuqi Li、Mingxing Tan、Khanh LeViet、Chao Mei、Amy Jang、Luiz GUStavo Martins‎、Yunlu Li、Suharsh Sivakumar‎、Raziel Alvarez、Lawrence Chan、Jess Kim、Mike Liang、Shuangfeng Li、Sarah Sirajuddin

参考文献

[1] EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks: https://arxiv.org/abs/1905.11946

Reviewed by Khanh LeViet - Developer Relations Team

この記事は、株式会社メルカリ EdgeAI チーム Tech Lead 大嶋 悠司さんによるゲスト投稿です。

概要

メルカリは C2C E コマースのアプリを提供しており、月間アクティブ ユーザー(MAU)1500 万人を超えるお客様にご利用いただいています。メルカリアプリでは、さまざまな機械学習を使用した機能を提供しています。


本記事では、TensorFlow Lite を使用し、機械学習モデルの計算をモバイル端末上で行っている機能についてご紹介します。

図 1 メルカリロゴ



メルカリアプリでは、お客様に商品を出品していただくという特性上、出品商品のタイトルや詳細情報をお客様に記入していただく必要があります。この入力作業は、初めて出品されるお客様や多くの商品を出品されるお客様にとって、面倒に感じられることがあります。そこでメルカリでは、本や DVD などのエンタメ カテゴリやコスメカテゴリの商品に対して、バーコード出品という機能を提供しています。

これは、バーコードを読み取ることで、タイトルや商品詳細が自動で入力され、出品時の手間を大幅に軽減することができます。さらにこの機能をご利用いただくことで、お客様の出品されたアイテムと、メルカリが持つカタログデータと紐づくことで、検索などを改善することができます。

バーコード出品は、すでに多くのお客様にご利用いただいていますが、さらに多くのお客様にご利用いただきたいと考えています。特に新規のお客様や、バーコード出品をご存じないお客様にも、自然にバーコード出品をご利用いただくために、メルカリの AI チームでは、バーコード出品をサジェストする機能を開発しました。これは、お客様が商品を撮影した際に、その商品が、本や DVD と判断されたら、すぐさまバーコード出品のサジェストをする、というものです。

この機能の中では、TensorFlow を使用して構築した Deep Learning モデルを組み込み、TensorFlow lite によって、モバイル端末上で推論しています。

モデルの構築

今回実装する機能は、撮影された画像が本かどうかを推定する画像分類タスクとなるので、CNN を使用したモデルを利用しました。モデルの評価基準として、分類精度はもちろんですが、モバイル端末に組み込むため、モデルサイズと UX を損なわないために、推論速度も重要となります。

これらの条件を最も満たす Mobilenet v3 を選択しました。データセットとして、メルカリの出品画像数 100 万枚をラベル付けしたデータセットを使用します。学習は、ImageNet で学習したモデルをベースに、メルカリのデータで FineTuning をします。

TensorFlow を使用してモデルを構築し、GCP 上の TPU を利用することで、大きなバッチサイズで高速に学習することが可能になり、多くの検証をすることができました。TensorFlow では、Estimator を使うことで CPU/GPU/TPU の切り替えを容易に行うことができます。

モデルの最適化

端末にモデルをダウンロードするので、モデルの重みを int8 に量子化することで、モデルのファイル サイズを削減することを考えます。その際、通常通り学習したモデルを量子化すると 32bit の float の重みを無理に 8bit に落とし込むため、精度が下がってしまうことがあります。

Mobilenet v3 を、通常通りメルカリのデータセットで学習したモデルを量子化した場合、Accuracy が、5% ポイントほど下がってしまいました。

そのため、モデル構造をチューニングするとともに、量子化されることを前提にモデルを学習する quantization-aware training をします。さらに ExponentialMovingAverage の導入、MobileNetv3 のモデルに depthwise convolution を追加するといったモデルのチューニングを行いました。ただし、モデルをチューニングする際に、モデルのファイル サイズと推論速度が目標値に収まるように注意しなくてはいけません。

最終的には、モデルのチューニングの結果精度が 6% ポイントほど向上し、quantization-aware training を導入することで、量子化後も精度を落とすことなく、モデルのサイズを 75% 以上削減することができました。



図 2 モデルチューニング結果

モバイルアプリへの組み込み

メルカリアプリは Android、iOS 両方で提供されているため、クロス プラットフォームのサポートが必要になります。TensorFlow Lite の C++ API を使い、抽象化レイヤを作ることで、Android、iOS の両方で簡単にモデルの推論を呼び出すことができます。

作成した画像分類モデルを組み込んで、バーコード出品のサジェスト機能を作成しました。最初に作成したデザインを図 3 に示します。

バーコード出品機能を利用せずに本や DVD を撮影した場合、動画のようにバーコード出品をサジェストするポップアップが表示されます。このポップアップをタップすることで、バーコード出品の画面に移動することができるようになっています。

この画面は、ユーザーが出品商品の撮影をしている画面であり、ユーザーは続けて写真をとったりタイトルの入力など、次の動作を考えているはずです。そのため、この写真の撮影途中で数秒間待たされたりすると、UX を大きく損なうことが予想されます。画像をサーバーに送信して推論結果を取得すると、通信状況にもよりますが、1 秒以上かかることも少なくありません。それに対し、TensorFlow Lite を使用して端末上で推論すると、安定して 30ms 程度で推論することができます。そのため、動画のように UX を損なわなず、自然なサジェストをすることができます。




図 3 初期デザイン


結果分析と改善

昨年 12 月にこちらの機能をリリースしましたが、実際には機能からバーコード出品につながったお客様は、想定より少ない結果となっていました。

そのため、我々はユーザーのログからいくつか仮説をたて、UI の改善を行いました。

例えば、ポップアップが表示されたユーザーがタップをした割合が低いことなどから、以下の仮説が考えられます。

  • モデルの精度が十分でなく、本以外のものにも反応してしまっている
  • ユーザーとのインタラクションが不十分である

今回モデルの Precision は 90% 近くあるため、まずはモデルの精度以上に、ユーザーとのインタラクションに問題があると考えました。

複数の AB テストをし、以下のようにデザインを改善しました。改善点は次のポイントです。

  • ポップアップの時間を長くする
  • バーコード出品の利点が伝わるように、メッセージを変更する
  • タップ可能なことが伝わるように、ボタン風のデザインに変更する



図 4 改善後デザイン



この結果、ポップアップ表示後、タップしてくれるお客様の割合は倍以上になり、バーコード出品の新規利用割合を、6% 以上増加することができました。

このように、AI 機能をアプリに組み込む際には、モデルの精度以外という、他の要因によっても意図しない結果になることが多く起こるため、機能をリリースした後にも継続的に分析をし、さまざまな観点から改善を行う必要があります。

このように、メルカリでは、Edge-AI を含めた AI を使った機能開発を加速させていくとともに、お客様の UX を継続的に改善していく取り組みをしています。



Posted by Khanh LeViet - Developer Relations Team

この記事は TensorFlow - Medium の記事 "TensorFlow Model Optimization Toolkit — Pruning API" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。


TensorFlow モデル最適化ツールキット — Pruning API

モデル最適化ツールキットは、機械学習モデルを最適化するもので、初心者でも経験を積んだデベロッパーでも使うことができます。このツールキットをリリースしてから、いくつかの新しいアプローチやツールを追加するというロードマップを実現するための作業を続けてきました。本日は、重みのプルーニング(剪定)を行う新しい API について紹介します。

重みのプルーニング

機械学習プログラムの最適化には、さまざまな形態があります。幸いにも、ニューラル ネットワークでは、このような目的を達成する各種の変換を柔軟に行うことができます。
そのような最適化の 1 つに、計算に必要なパラメータや演算の数を減らすものがあります。これは、ニューラル ネットワークのレイヤー間のつながり(パラメータ)を削除することによって実現します。





重みのプルーニングを行う API は、Keras をベースに構築されています。そのため、このテクニックはどんな既存の Keras トレーニング プログラムにも、とても簡単に適用できます。この API は、今後リリースされる他の最適化テクニックと合わせて、モデル最適化ツールキット用の新しい GitHub リポジトリの一部となる予定です。

重みのプルーニングとは

重みのプルーニングとは、重みテンソルの不要な値を削除することを表します。実際には、ニューラル ネットワークのパラメータの値をゼロにすることで、ニューラル ネットワークのレイヤー間の不要なつながりと見なしたものを削除します。ニューラル ネットワークが変化に対応できるように、この処理はトレーニング プロセスで行います。

重みのプルーニングが役立つ理由

重みのプルーニングによってすぐに得られるメリットは、容量の圧縮です。疎なテンソルは圧縮効果が高いので、プルーニングを行った TensorFlow チェックポイントか変換済み TensorFlow Lite モデルに単純なファイル圧縮を適用すれば、モデルの格納サイズや転送サイズを減らすことができます。たとえば、このチュートリアルでは、MNIST 用の 90% 疎なモデルを 12 MB から 2 MB に圧縮する方法を示しています。
さらに、さまざまな実験から、重みのプルーニングは量子化とも互換性があり、両方のメリットが得られることもわかっています。先ほどのチュートリアルでは、トレーニング後に量子化を行うことで、プルーニングしたモデルを 2 MB からわずか 0.5 MB に圧縮する方法も示しています。
今後TensorFlow Lite に疎表現と疎計算のファーストクラス サポートを追加して圧縮のメリットを実行時メモリにも拡大し、パフォーマンスの改善を実現したいと考えています。疎なテンソルでは、ゼロになった値の計算は不要で省略できるため、パフォーマンスが向上します。

各種モデルにおける結果

このテクニックが異なるタイプのモデルにうまく適用できるかを検証するため、イメージ処理用の畳み込みベースのニューラル ネットワークから再帰型ニューラル ネットワークを使う音声処理まで、さまざまなタスクで実験を行いました。次の表は、いくつかの実験結果を抜粋したものです。




異なるモデルやタスクでの値をゼロにする割合(sparsity)とその結果。

動作の仕組み

Keras ベースの重みプルーニング API には、簡単ですが幅広く適用できるアルゴリズムを使っています。このアルゴリズムは、トレーニング中に値の大きさに基づいて繰り返しつながりを削除するように作られています。まず、最終的に値をゼロにする割合(例: 90%)と、プルーニングを行うスケジュール(例: 2,000 ステップ目から 10,000 ステップ目までの間、100 ステップごとにプルーニングを行う)を指定します。オプションで、プルーニング構造(例: 個々の値に適用するか、ある形状の値のブロックに適用するか)を設定することもできます。




プルーニングを行わないテンソル(左)、1x1 のブロックでプルーニングを行ったテンソル(中央)、1x2 のブロックでプルーニングを行ったテンソル(右)の例。

トレーニングが進むと、プルーニング ルーチンがスケジューリングされて実行され、値をゼロにする割合が達成されるまで、最も小さい値(ゼロに近い値)の重みを削除(ゼロを設定)します。プルーニング ルーチンがスケジューリングされて実行されるたびに、現在値がゼロになっている割合が再計算されます。これは、0% から始まり、プルーニング スケジュールの終わりに最終的な目標が達成されるまで、スムーズなランプアップ関数に従って徐々に増加します。




プルーニングに使うランプアップ関数の例。ステップ 0 からステップ 100 までプルーニングを行うようにスケジューリングし、最終的に値をゼロにする割合を 90% とした場合。

スケジュールと同じく、ランプアップ関数も必要に応じて調整できます。たとえば、ある収束レベルが達成されたステップでトレーニング手続きを開始したり、すべてのトレーニング ステップが行われる前にプルーニングを終了するようにトレーニング プログラムをスケジューリングし、最終的に値をゼロにする割合を実現できた段階でシステムを微調整できると便利な場合もあるでしょう。こういった設定の詳細については、チュートリアルドキュメントをご覧ください。
トレーニング手続きの最後では、「プルーニングされた」Keras レイヤーに対応するテンソルには、そのレイヤーで最終的に値をゼロにする割合に応じてゼロが含まれることになります。




テンソルにプルーニングを適用する様子を表したアニメーション。黒いセルは、ゼロでない重みが存在する場所を示す。トレーニング プロセスが進むにしたがって、値がゼロになる割合が増加する。

新しいドキュメントと GitHub リポジトリ

先ほどもお知らせしたように、重みプルーニング API は、機械学習モデルの実行効率や表現効率を上げることを目的としたテクニックを集めた新しい GitHub プロジェクトおよびリポジトリの一部になる予定です。機械学習のこの領域に興味がある方や、モデルを最適化するリソースを必要としている方は、ぜひこのプロジェクトにスターを付けてください。
この領域の重要性を踏まえ、tensorflow.org/model_optimization に新しいサブサイトを作成して関連するドキュメントやリソースを公開しています。ぜひすぐに試してみてください。フィードバックも大歓迎です。また、今後の発表を見逃さないように、このブログもフォローしてください!


謝辞: Raziel Alvarez、Pulkit Bhuwalka、Lawrence Chan、Alan Chiao、Tim Davis、Suyog Gupta、Jian Li、Yunlu Li、Sarah Sirajuddin、Daniel Situnayake、Suharsh Sivakumar


Reviewed by Khanh LeViet - Developer Relations Team

この記事は Daniel Situnayakeによる TensorFlow - Medium の記事 "Build AI that works offline with Coral Dev Board, Edge TPU, and TensorFlow Lite" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

投稿者: Daniel Situnayake(@dansitu、TensorFlow Lite デベロッパー アドボケート)


機械学習を支えるハードウェアと聞くと、どこかのサーバー ファームで無数のプロセッサが大量に電力を消費しながら何テラバイトものデータを消費している様子や、たくさんの GPU を搭載した巨大なデスクトップ コンピュータを思い浮かべるのではないでしょうか。
クレジットカードほどの大きさの開発ボードに取り付けられている 40mm x 48mm の集積回路を想像する方は、あまりいないでしょう。ましてや、ミニカーほどの大きさのなめらかなアルミニウム製の箱が 1 つの USB-C でコンピュータと接続されている姿は論外のはずです。




こういった新しい端末は、Google の新プラットフォーム、Coral によるものです。組み込み製品のデベロッパーは、Coral を使うことで、ローカル AI を活用したすばらしい体験を生み出すことができます。Coral 最初の製品は、Google の Edge TPU チップを搭載し、TensorFlow Lite(モバイルおよび組み込み端末用の TensorFlow 軽量版ソリューション)を実行できるようになっています。デベロッパーの皆さんは、Coral 端末を使って新しいオンデバイス機械学習推論アプリケーションを試作することができます。

Coral の開発ボードは、Edge TPU を搭載したリムーバブル System-On-Module(SOM)を含むシングルボード Linux コンピュータです。そのため、アプリケーションのプロトタイピングを行ってから、独自の端末に SOM を含めて生産用にスケールアップすることができます。Coral USB アクセラレータは、Edge TPU を対応する Linux コンピュータに接続する USB アクセサリです。Raspberry Pi Zero にちょうど合うように設計されています。

このブログ投稿では、「エッジ」(末端)でのおもしろい機械学習活用例や、ハードウェア製品に AI を組み込む際に TensorFlow Lite と Coral がどのように役立つかについて説明します。トレーニング済みモデルを使えば、機械学習の経験がなくても大丈夫なこともわかっていただけるでしょう。独自のモデルをローカル用に最適化する変換ツールについても紹介します。

エッジで推論する

最近まで、本番環境に機械学習モデルをデプロイするということは、何らかのサーバーでモデルを実行するという意味でした。動画中の既知の物体を検出したい場合には、バックエンドにストリーミングし、そこで強力なハードウェアを使って推論(つまり、存在する物体を検出する)して、その結果を端末に知らせる必要がありました。




この方法は多くの用途でうまく動作しますが、サーバーがなく端末上だけで完結させたい場合は、どうすればいいでしょうか。




TensorFlow Lite は、エッジで高パフォーマンス推論を実行することで、これを実現します。そのため、今までにないすばらしい体験を生み出すことができます。

オフライン推論

エッジ推論を使うと、インターネット接続に頼る必要はなくなります。インターネットが遅かったり、コストがかかったりする場合は、見たものを理解して関心のある部分だけを送るスマート センサーを構築できます。
これは、機械学習をまったく新しい状況と場所に導入できることを意味します。離れた場所から野生生物を識別するスマートカメラや、無線インフラストラクチャから遠く離れた場所で医療診断をサポートするイメージング端末について考えてみてください。



スマートカメラで野生生物をモニタリングする

遅延を最小化する

サーバーにデータを送ると、データの往復に時間がかかります。データをリアルタイムに処理する場合にはこれが妨げになりますが、モデルがエッジにあれば、このことは問題になりません。
超高速で推論できれば、パフォーマンスによる問題も解決できます。たとえば、人間がいる場所を移動するロボットにリアルタイム物体トラッキングを追加する場合や、音楽ライブの際に音を合成する場合などです。



ライブで音を合成する

プライバシーとセキュリティ

データがエッジにあれば、個人情報が端末を出ることはないので、プライバシーやセキュリティが向上するというメリットもあります。

そのため、プライバシーに配慮した新しいアプリケーションを実現できます。たとえば、脅威と考えられるものを検知した場合のみ録画するセキュリティ カメラや、クラウドにデータを送らずに個人的指標を分析するヘルス機器などが考えられます。



クラウドにデータを送らずにヘルス指標を分析する

パフォーマンス

こういった新しいアプリケーションは、すべて高パフォーマンス推論を利用します。これを実現できる唯一の方法が Edge TPU によるハードウェア アクセラレーションです。しかし、実際どのくらい速くなるのでしょうか。

いくつかのバージョンの MobileNet を使った内部ベンチマークによると、Edge TPU による推論は、CPU による推論よりも 70 倍から 100 倍高速です。MobileNet は、エッジ デバイスでイメージ分類を行う際によく使われる堅実なモデル アーキテクチャです。

顔検出用の MobileNet では、最大で毎秒 70 フレームから 100 フレームで推論を行えます。食べものの検知では、毎秒 200 フレームを実現できました。これなら、動画のリアルタイム推論にも十分対応できます。複数のモデルを同時に実行しても問題ありません。
次の表は、Coral USB アクセラレータでいくつかのモデルを実行したときのパフォーマンスをまとめたものです。




* デスクトップ CPU: 64-bit Intel(R) Xeon(R) E5–1650 v4 @ 3.60GHz
** 組み込み CPU: Quad-core Cortex-A53 @ 1.5GHz
† 開発ボード: Quad-core Cortex-A53 @ 1.5GHz + Edge TPU
テストしたモデルは、すべて ImageNet データセットでトレーニングしたものです。分類の数は 1,000 個、入力サイズは 224x224(ただし、Inception v4 の入力サイズは 299x299)です。

Coral と TensorFlow Lite を使ってみる

Coral は新しいプラットフォームですが、TensorFlow とシームレスに連携できるように設計されています。Coral で TensorFlow モデルを使う場合は、TensorFlow Lite を使います。TensorFlow Lite は、Edge TPU を含むエッジデバイスやスマートフォン、マイクロコントローラで機械学習推論を実行するためのツールキットです。

トレーニング済みモデル

Coral のウェブサイトでは、Coral ハードウェアでの利用に最適化されているトレーニング済み TensorFlow Lite モデルが公開されています。まだ初めたばかりだという方は、モデルをダウンロードして端末にデプロイしてみてください。Coral の API デモスクリプトを使って、さまざまな種類の物体に対するイメージ分類や物体検知を実行できます。

モデルを再トレーニングする

転移学習と呼ばれる処理を行うと、Coral のトレーニング済み機械学習モデルをカスタマイズし、独自のイメージや物体を認識することができます。これを行うには、既存のモデルを再トレーニングするに記載されている手順に従います。

独自の TensorFlow モデルを構築する

既に TensorFlow モデルがある場合や、ゼロから新しくトレーニングしたい場合は、Edge TPU 用の新規モデルを構築するに記載されている手順に従います。モデルは、モデル要件を満たす必要がありますので、注意してください。
Edge TPU 用のモデルを準備する場合は、まず TensorFlow Lite Converter を使ってモデルをエッジデバイス用に変換し、最適化します。その後、Edge TPU Model Compiler を使って Edge TPU 用にモデルをコンパイルします。

量子化と最適化

Coral のハードウェアに使われている Edge TPU チップは、量子化されたモデルを使うように設計されています。量子化とは、精度への影響を最低限にとどめつつ、ベースとなるデータを圧縮して、小さく高速なモデルにすることを指します。
TensorFlow Lite Converter を使うと、すべてのトレーニング済み TensorFlow モデルを量子化できます。このテクニックの詳細は、トレーニング後の量子化をご覧ください。
次の簡単なコード スニペットは、TensorFlow Lite ナイトリー版と TensorFlow 2.0 アルファ版を使ってモデルを変換し、量子化する方法を示しています。

次のステップ

皆さんが Coral と TensorFlow Lite を活用し、エッジで AI を利用するまったく新しい体験を生み出していると聞いています。試してみたいという方は、以下をご覧ください。
いいアイデアが浮かんできたでしょうか。コミュニティの皆さんが Coral と TensorFlow Lite でどんなものを作るか、楽しみです!Twitter でハッシュタグ #withcoral と #poweredbyTF をつけて、アイデアを共有してください。


Reviewed by Khanh LeViet - Developer Relations Team

この記事は Google Expander チーム科学研究者、Sujith Ravi による Google Research Blog の記事 "On-Device Conversational Modeling with TensorFlow Lite" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。

今年初め、スマート メッセージング向けの「端末上」の機械学習テクノロジーを搭載した Android Wear 2.0 がリリースされました。これによって以前から GmailInboxAllo で利用できた Smart Reply などのクラウドベースのテクノロジーが、初めて任意のアプリから直接利用できるようになります。これは、サードパーティー製のメッセージング アプリでも利用でき、クラウドに接続する必要もありません。そのため、外出中に着信したチャット メッセージに直接スマートウォッチから応答することができます。

本日は、モバイルおよび埋め込み端末向けの TensorFlow の軽量ソリューションである TensorFlow Lite についてお知らせします。このフレームワークは、少ないメモリ、高パフォーマンス、低レイテンシで機械学習モデルの推論を行えるように最適化されています。ライブラリの一部として、TensorFlow Lite を活用した自然言語アプリの例となる端末上会話モデルデモアプリもリリースしています。その目的は、デベロッパーやリサーチャーが端末での推論を活用して簡単に新しい人工知能機能を構築できるようにすることです。このモデルは、効率的な推論によって、入力される会話のチャット メッセージに対して応答を提案するもので、チャットアプリに簡単に組み込んで端末上での会話体験を改善できるようにするものです。

今回リリースした端末上会話モデルは、ジョイント最適化フレームワークに基づいてコンパクトなニューラル ネットワーク(やその他の機械学習モデル)をトレーニングする新しい ML アーキテクチャを利用しています。これは、当初 ProjectionNet: Learning Efficient On-Device Deep Networks Using Neural Projections として発表されたものです。このアーキテクチャは、任意の入力をコンパクトなビットベクター表現に変換する効率的な「プロジェクション」処理を行ない、計算能力やメモリが限られたモバイル端末でも効率的に実行できます。この操作では、似たような入力が近傍のベクターにプロジェクションされ、プロジェクション処理によって密にも疎にもなります。たとえば、「やあ、調子はどう?」「調子はどうだい、相棒?」という 2 つのメッセージは、同じようなベクター表現に投影される可能性があります。

この考え方を使うと、計算能力やメモリをあまり使わずに、会話モデルでこういった効率的な操作を組み合わせることができます。私たちは、コンパクトなプロジェクション・モデル(前述)とトレーナー モデルという 2 種類のモデルを同時にトレーニングする ML フレームワークを使い、エンドツーエンドで端末上モデルをトレーニングしました。この 2 つのモデルは、同時にトレーニングが行われます。その際に、プロジェクションモデルはトレーナー モデルから学習します。トレーナーは、大きく複雑な ML アーキテクチャでモデリングされているいわばエキスパートです。一方のプロジェクションモデルは、エキスパートから学習する学生のようなものです。トレーニングの際には、量子化蒸留処理などのテクニックも利用して、対象機能の圧縮や一部の選択的最適化を行うこともできます。トレーニングが終われば、端末で直接小さなプロジェクションモデルを使って推論を行うことができます。
トレーニング済みのプロジェクションモデルは、モバイル プラットフォームで高速に推論を行えるように最適化された一連の TensorFlow Lite 命令にコンパイルされ、端末で直接実行されます。TensorFlow Lite の端末上会話モデルの推論グラフを以下に示します。
TensorFlow Lite を使った端末上会話モデルの実行
今回リリースされたオープンソースの会話モデルコードも公開されています)は、前述の結合 ML アーキテクチャを使ってエンドツーエンドでトレーニングしたものです。また、今回のリリースにはデモアプリも含まれているので、モバイル端末でのワンタッチ スマート応答を簡単にダウンロードして試してみることができます。このアーキテクチャでは、アプリのニーズに応じて、モデルのサイズや予測品質を簡単に設定できます。このモデルがうまく対応できるサンプル メッセージの一覧は、こちらから参照してください。このシステムは、一定の応答を提案するようにフォールバックすることもできます。その場合、チャットの会話でよく見られる一般的な応答目的から学習し、その結果をコンパイルした一定のセットが使われます。なお、ベースとなるモデルは、Google のアプリで Smart Reply の応答に使われているものとは異なります1

会話モデルの先へ
興味深いことに、前述の ML アーキテクチャでは、ベースとなるモデルを柔軟に選択できます。私たちは、異なる機械学習アプローチと互換性のあるアーキテクチャも設計しています。たとえば、TensorFlow のディープ ラーニングと組み合わせて使う場合であれば、ベースとなるモデルとして軽量ニューラル ネットワーク(ProjectionNet)を学習させつつ、ニューラル ネットワークではなくグラフ フレームワークを使って別のアーキテクチャ(ProjectionGraph)のモデルを表現することができます。

結合フレームワークは、別の ML モデリング アーキテクチャで他のタスクの端末上軽量モデルをトレーニングする際に使うこともできます。たとえば、私たちは、ある ProjectionNet アーキテクチャを派生させています。これは、トレーナー モデルとして複雑なフィードフォワードや再帰アーキテクチャ(LSTM など)を使い、動的プロジェクション操作やいくつかの狭い完全結合レイヤーで構成される単純なプロジェクションアーキテクチャを組み合わせたものです。アーキテクチャ全体は、TensorFlow の誤差逆伝播を使ってエンドツーエンドでトレーニングします。それが完了すると、コンパクトな ProjectionNet を直接推論に利用できるようになります。この手法を使って、モデルのサイズを大幅に削減した(最大で数桁の削減)小さな ProjectionNet モデルをうまくトレーニングすることができました。また、複数の画像や言語の分類タスクにおける精度に関するパフォーマンスも高いものでした(いくつかの例をこちらに示します)。同じように、半教師付きの設定で、グラフ学習フレームワークを使って別の軽量モデルをトレーニングしました。
端末上モデルのトレーニングに使った ML アーキテクチャ: ディープ ラーニングを使ってトレーニングした ProjectionNet(左)と、グラフ学習を使ってトレーニングした ProjectionGraph(右)
今後も、アップデートされたオープンソースの TensorFlow Lite モデルの改善とリリースを継続する予定です。今回リリースされたモデル(今後のモデルも同様)は、以上のような ML アーキテクチャを使って学習したものです。このようなモデルは、多くの自然言語やコンピュータ ビジョンのアプリに再利用されたり、人工知能を活用するために既存のアプリに組み込まれるものと考えています。機械学習や自然言語処理のコミュニティがこういった機能を使って開発を行い、まだ私たちが認識していない新しい問題やユースケースに対応できることを期待しています。

謝辞
この作業には、Yicheng Fan と Gaurav Nemade が大きく貢献してくれました。TensorFlow チームの Rajat Monga、Andre Hentz、Andrew Selle、Sarah Sirajuddin、Anitha Vijayakumar に感謝を捧げます。また、Robin Dua、Patrick McGregor、Andrei Broder、Andrew Tomkins および Google Expander チームにも感謝いたします。



1 リリースされた端末上モデルは、スマートフォンやウェアラブルでの小規模かつ低レイテンシな用途に最適となるようにトレーニングされています。一方、Google アプリの Smart Reply 予測は、規模が大きい複雑なモデルで生成されています。実稼働しているシステムでは、不適切なコンテンツを検知するようにトレーニングされた複数の分類器を使っており、ユーザー エクスペリエンスや品質レベルが最適になるようなフィルタリングやチューニングが適用されています。オープンソースの TensorFlow Lite 版を使っているデベロッパーも、末端のアプリではこのような慣習に従うことをお勧めします。



Reviewed by Hak Matsuda - Developer Relations Team

この記事は エンジニアリング担当 VP、Dave Burke による Android Developers Blog の記事 "What’s New in Android: O Developer Preview 2 & More" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。  
  

世界中には何十億台もの Android 端末があります。これは、私たちの期待を大きく超える成果です。本日(*原文公開当時、太平洋夏時間 5/17)の Google I/O では、Android O のリリース、さらに高性能なアプリを作るための新しいデベロッパー ツール、そして、エントリーレベルの端末に新たな体験を提供する Android Go と名付けた新プロジェクトのプレビューなど、Android の進化をさらに推し進めるさまざまな方法についてご紹介しました。  
 
Android O の流れるような操作性  
モバイル端末を使うことで、信じられないようなことが可能になっています。今や、モバイル端末をポケットに収まるコンピュータと考えるのはたやすいことです。Android O のリリースで特にこだわったのは、Android を今まで以上に強力で使いやすいものにするために、流れるような操作性を実現することです。今日の発表では、そのいくつかをご紹介しました。  
  • Picture in Picture(PIP): 2 つのタスクを同時に管理します。例えば、ビデオ通話で友だちと話しながらカレンダーをチェックしたり、新しいレシピを読みながら特別な調理法の動画を見たりすることができます。PIP は、どんなサイズの画面でもシームレスにマルチタスクが実現できるように設計しています。アプリで PIP をサポートするのも簡単です
  • 通知ドットは、通知機能を拡張します。デベロッパーはアプリのアクティビティを表示するこの新たな方法で、ユーザー エンゲージメントを向上できます。通知ドットは、高く評価されている Android 独自の通知システム上で動作するように作られており、ほとんど何もしなくてもアプリに組み込むことができます。ドットの色もアイコンから自動的に抽出されます。 
  • Google 自動入力は、Chrome の自動入力機能を Android に導入することで、新たな端末のセットアップやパスワードの同期を簡単に行えるようにするものです。ほとんどのアプリでは、ユーザーがオプトインするだけですぐに自動入力を利用できます。デベロッパーは、入力するデータのタイプを示すヒントを指定したり、カスタムビューのサポートを追加することによって、自動入力用にアプリを最適化できます。 
  • Android TV の新しいホーム画面を使うと、ユーザーはアプリが提供するコンテンツを簡単に検索、プレビュー、視聴できます。アプリは 1 つまたは複数のチャンネルを公開でき、ユーザーはホーム画面に表示されるチャンネルを管理できます。新しい TvProvider サポート ライブラリ API を使うと、チャンネルを作成できます。 
  • スマート テキスト選択:Android O では、端末の機械学習がコピーと貼り付けにも適用されており、Android がアドレス、URL、電話番号、メールアドレスといったエンティティを認識できます。これによって、エンティティ全体が選択され、そのタイプに応じたアクションを実行するアプリが表示されるようになるので、コピーと貼り付けの操作性が向上します。
  • TensorFlow Lite:Android では、機械学習のメリットを活用したユーザー エクスペリエンスの改善が続けられています。そして、パートナーのデベロッパーにも、同様の改善を行っていただきたいと考えています。そこで本日の発表では、Google のオープンソース機械学習ライブラリである TensorFlow をベースとした公開予定の次期プロジェクト、TensorFlow Lite の初期プレビューを紹介しました。TensorFlow Lite は、高速かつ軽量な埋め込み機械学習機能として設計されています。また、端末上で動作する機械学習シナリオの多くは、リアルタイムに対応できるパフォーマンスが必要です。そのため、TensorFlow のメリットを活用して計算を高速化できる新たなニューラル ネットワーク API の開発も進められています。この 2 つの機能は、今年後半に予定されているAndroid O のメンテナンス アップデートで提供される予定です。ご期待ください。  

(左)Android O: Picture in Picture、(右)Android O: 通知ドット

 
Android に不可欠な Android Vitals  
Android の基盤は非常に重要です。そのため、電池の寿命、起動時間、グラフィックのレンダリング時間、安定性などの最適化にフォーカスを当てた Android Vitals プロジェクトに力を注いでいます。今回の発表では、今までに実行してきた作業のいくつかと、デベロッパーがアプリの電源、パフォーマンス、信頼性の問題について理解するための新しいツールを紹介しました。  
  • システム最適化:Android O では、アプリを高速かつスムーズに動作させるために、システム全体にわたってさまざまな改善が加えられています。たとえば、ランタイムには、コンカレント コンパクティング ガベージ コレクション、コードのローカル性などの新たな最適化を含む大幅な変更が加えられています。 
  • バックグラウンドの制限:現在に至るまで、バックグラウンドのアプリが意図せずにリソースを使いすぎ、システムに悪影響を与えるということがかなり多く発生していました。そのため、Android O では、バックグラウンドの位置情報や Wi-Fi スキャンに新たな制限を設け、バックグラウンドでのアプリの実行方法を変更しています。この制限によって、リソースの使いすぎを防止できるため、電池の寿命を延ばし、空きメモリを増やします。
  • Play Console の新しい Android Vitals ダッシュボード: アプリでよく発生する問題をピンポイントで検出することを助ける 6 つの Play Console ダッシュボードをリリースしました。極端なクラッシュ発生率、ANR 発生率、フリーズしたフレーム、レンダリングの遅延、極端なウェイクアップ数、スタックした wake locks のそれぞれについて、影響を受けたユーザー数や問題に対処する最善の方法についてのガイダンスなどの情報が表示されます。早速 Play Console を開いてアプリのデータと問題への対処方法をご覧ください。

Android Go  
コンピューティングをあらゆる人に届けるのも Android の使命です。エントリーレベルのスマートフォンの価格が下がり、初めてのスマートフォンユーザーがオンラインに登場してくるのはとても嬉しいことです。私たちは、ユーザーにすばらしい体験を提供し続ける低価格端末のメーカーを応援しています。発表では、1GB 以下のメモリを搭載した Android 端末に関する新しい取り組みについて、そのほんの一部を紹介しました。この取り組みは、社内で「Android Go」と呼ばれており、次の 3 つの点を考慮して設計されています。  
  • OS:Android O は、エントリーレベルの端末でもスムーズかつ効率的に動作するように最適化しています。
  • アプリ:YouTube Go、Chrome、Gboard などの Google アプリは、メモリやストレージ、モバイルデータの使用量を抑えるように設計しています。 
  • Google Play:エントリーレベルの端末の Google Play ストアでも、すべてのアプリを閲覧できますが、メモリやストレージ、モバイルデータの使用量が少ないアプリなど、エントリーレベルの端末向けに設計されたアプリをハイライト表示します。

Android Go は、1GB 以下のメモリを搭載したすべての Android 端末を対象に、2018 年にリリースされる予定です。早いうちに、アプリをエントリーレベルの端末に対応させることをおすすめします。便利なオフライン状態の提供、APK サイズの削減、電池やメモリの使用量の最小化の重要性については、何十億人ものユーザーに受け入れられるアプリを構築するをご覧ください。  
 
Android O Developer Preview 2 はベータ版として公開中  

Android O Developer Preview 2 のリリースは、最初のベータ品質候補版であり、主要なスマートフォンまたはタブレットでのテスト用に提供されます。Android O のベータ版リリースを試してみたい方は、android.com/beta にご登録ください。Nexus 5X、6P、Player や、Pixel、Pixel XL、Pixel C(Pixel は日本未発売)端末からは特に簡単に Android O のプレビュー版を入手できます。

Android ベータ版プログラムでは、多くのユーザーが端末に Android O をインストールして使い始めるため、アプリの互換性テストを行い、問題を解決してアップデートを公開するタイミングは、ベータ版が公開される前である今しかありません。手順や推奨スケジュールは、移行ガイドをご覧ください。

発表日から、最新 Canary バージョンの Android Studio、SDK、各種ツール、Android O システム イメージ、エミュレータなど、Android O の開発に使えるアップデート版のツールをダウンロードできるようになっています。さらに、サポート ライブラリ 26.0.0 ベータ版などのライブラリも新しい Maven リポジトリからダウンロードできます。SDK Manager から Maven への変更によって、ビルド設定に多少の変更が発生することになりますが、ライブラリのアップデートを CI システムに組み込む際の柔軟性は向上します。

Android O の開発を始める準備ができたら、Android O Developer Preview サイトにアクセスし、通知チャンネル、通知ドット、Picture in Picture自動入力などのアプリで使えるさまざまな機能の詳細をご覧ください。API は最初の Developer Preview から変更されていますので、差分レポートでコードに影響が出る可能性がある場所を確認してください。

フィードバックをお寄せいただき、ありがとうございます。。Android O の機能、API、問題、リクエストなど、今後もさらにフィードバックをお待ちしています。フィードバックの報告先は、フィードバックとバグのページをご覧ください。  
 
Posted by Yuichi Araki - Developer Relations Team