Slide 1

Slide 1 text

ML Kit 最新情報 あんざいゆき (@yanzm) at DevFest Tokyo 2019

Slide 2

Slide 2 text

Yuki Anzai • Android App Developer (2009~) • CEO of uPhyca Inc. (2011~) • Google Developers Expert for Android • Organizer of GTUG Girls and droid girls • Twitter : @yanzm

Slide 3

Slide 3 text

ML Kit

Slide 4

Slide 4 text

ML Kit • Firebase の機能の⼀つ • 機械学習を利⽤する機能をアプリに簡単に組み込むためのモバイル SDK • 現在は β • iOS と Android で使える • https://firebase.google.com/docs/ml-kit/

Slide 5

Slide 5 text

ML Kit の進歩 • ML Kit 発表時 • 6機能 : Text recognition、Face detection(主要なランドマークのみ)、 Barcode scanning、Image labeling、Landmark recognition、Custom model inference • 現在 • 11機能 : Face detection(輪郭)、Object detection & tracking、 Language identification、Translation、Smart Reply、AutoML model inference が追加

Slide 6

Slide 6 text

On-Device or Cloud On-Device Cloud Vision Text recognition : テキスト認識 O O Face detection : 顔検出 O - Barcode scanning : バーコードスキャン O - Image labeling : 画像のラベル付け O O Object detection & tracking : 物体検出 O - Landmark recognition : ランドマーク認識 - O

Slide 7

Slide 7 text

On-Device or Cloud On-Device Cloud Natural Language Language identification : ⾔語識別 O - Translation : 翻訳 O - Smart Reply : スマートリプライ O - AutoML Vision AutoML model inference : AutoML モデル推論 O - Custom Model Custom model inference : カスタムモデル推論 O -

Slide 8

Slide 8 text

On-Device vs Cloud • On-Device API • ローカルで動作、速い • 機械学習モデルのダウンロードは Firebase におまかせ • Cloud API • サーバーで処理、⾼機能 • ネットワーク接続が必要

Slide 9

Slide 9 text

Pricing your account's first 1000 Cloud Vision API calls/month are free

Slide 10

Slide 10 text

Text recognition : テキスト認識 • 画像からテキストを認識 • 看板などの短いテキスト⽤ : On-Device, Cloud • ⼩説など⻑く詰まったドキュメント⽤ : Cloud のみ photos by https://firebase.google.com/docs/ml-kit/recognize-text

Slide 11

Slide 11 text

• On-Device API • 無料 • 全てのラテン⽂字を認識 • Cloud API • 毎⽉最初の 1000 API call は無料(1000+ からは従量課⾦) • 50 をこえる⾔語を認識(⽇本語含む) Text recognition : テキスト認識

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

Face detection : 顔検出 • on-device API のみ • 顔の領域、ランドマーク(⽬・頬・⿐・⽿・⼝)、輪郭情報(顔の外郭・ ⽬・眉・⿐・⼝)の位置認識 • 顔の表情(⽬の開閉度合い、笑顔の度合い)の認識 • 動画のフレーム間で同じ顔をトラック可能

Slide 14

Slide 14 text

Face contour https://firebase.google.com/docs/ml-kit/detect-faces

Slide 15

Slide 15 text

Barcode scanning : バーコードスキャン • on-device API のみ • ほとんどの標準フォーマットをサポート • 1次元 : Codabar, Code 39, Code 93, Code 128, EAN-8, EAN-13, ITF, UPC-A, UPC-E • 2次元 : Aztec, Data Matrix, PDF417, QR Code • ⾃動フォーマット検出 • structured data (WiFi情報など)の取り出し • バーコードの向きによらず検出可能

Slide 16

Slide 16 text

format 256 (QR Code) valueType 9 (WIFI) rawValue WIFI:S:SB1Guest;P:12345;T:WEP;; displayValue SB1Guest 12345 boundingBox Rect(300, 457 - 669, 824) encryptionType 3 (WEP) ssid SB1Guest password 12345

Slide 17

Slide 17 text

Image labeling : 画像のラベル付け • 画像の内容を解析し、認識したもののラベルをつける : ⼈、物、場所、活動など • on-device API • 無料 • 400+ labels をサポート • Cloud API • 毎⽉最初の 1000 API call は無料(1000+ からは従量課⾦) • 10,000+ labels をサポート

Slide 18

Slide 18 text

label : Building confidence : 0.77894384 entityId : /m/0cgh4 label : Palace confidence : 0.75397676 entityId : /m/05zp8 label : landmark confidence : 0.9432406 entityId : /m/05_5t0l label : town confidence : 0.9333225 entityId : /m/0dx1j

Slide 19

Slide 19 text

label : Food confidence : 0.9649049 entityId : /m/02wbm label : Cuisine confidence : 0.91778296 entityId : /m/01ykh label : food confidence : 0.9399401 entityId : /m/02wbm label : cuisine confidence : 0.9263104 entityId : /m/01ykh

Slide 20

Slide 20 text

val options = FirebaseVisionOnDeviceImageLabelerOptions .Builder() .setConfidenceThreshold(0.9f) .build()

Slide 21

Slide 21 text

Object detection & tracking: 物体認識 • on-device API のみ • 画像からオブジェクトを検出 • 粗い classification • 検出したオブジェクトの画像を • Cloud に投げてより精度の⾼い検索につなげる → Cloud Vision Product Search • 独⾃のモデルにつなげる → AutoML Vision Edge

Slide 22

Slide 22 text

• モード : STREAM_MODE (default) | SINGLE_IMAGE_MODE • 複数オブジェクト検出 : false (default) | true • 最⼤5個まで • カテゴリ分類 : false (default) | true • UNKNOWN, HOME_GOOD, FASHION_GOOD, FOOD, PLACE, PLANT Object detection & tracking: 物体認識

Slide 23

Slide 23 text

最適なユースケース • カメラのプレビューを使った最も主要なオブジェクトのリアルタイム検出 とトラッキング • 静⽌画からの複数オブジェクトの検出

Slide 24

Slide 24 text

Improving usability and performance • 視覚的特徴が少ないオブジェクトだと、オブジェクトが画像の⼤部分を占 めないと検出されないことがあるので、うまく検出できるようにユーザー に適切なガイダンスを提供するとよい • カテゴリ分類を有効にして、特定のカテゴリのオブジェクトだけ対象にす るようなユースケースでは、unknown に配慮する

Slide 25

Slide 25 text

Landmark detection : ランドマーク認識 • Cloud API のみ • 毎⽉最初の 1000 API call は無料(1000+ からは従量課⾦) • 画像から有名なランドマークを認識 • ランドマーク名 • 地理座標 • Knowledge Graph entity ID • 画像内でのランドマークの領域

Slide 26

Slide 26 text

landmark Amsterdam Centraal Railway Station confidence 0.86155003 landmark Amsterdam confidence 0.5167069

Slide 27

Slide 27 text

Language Identification : ⾔語ID • On-Device API のみ • ⽂字列からその⾔語を識別 • 100以上の⾔語に対応 • https://firebase.google.com/docs/ml-kit/langid-support • 最も可能性の⾼い⾔語を1つ識別(Confidence 情報なし) or 可能性のあ る複数の⾔語を識別(Confidence 情報あり)

Slide 28

Slide 28 text

Translation : 翻訳 • On-Device API のみ • 59 ⾔語間の翻訳が可能 • https://firebase.google.com/docs/ml-kit/translation-language- support • Google Translate の offline mode と同じモデル

Slide 29

Slide 29 text

Language Pack • Each language pack : 25~35 MB • Language packs は動的にダウンロードされる • 59 language → ~3000 pairs • English を中間⾔語として利⽤ • 例) Dutch → English → Chinese

Slide 30

Slide 30 text

Limitations • intended for casual and simple translations • 翻訳の質は⾔語に依存する • より⾼い忠実度が必要なときは Cloud Translation API を試す • https://cloud.google.com/translate/

Slide 31

Slide 31 text

Usage guidelines • Usage Guidelines for ML Kit On-device Translation を読むこと • https://firebase.google.com/docs/ml-kit/translation-terms • 帰属の表⽰要件 • 制限事項

Slide 32

Slide 32 text

Smart Reply : スマートリプライ • On-Device API のみ • 会話に関連する返事を⽣成し提案 • 単⼀のメッセージではなく会話のフルコンテキストから⽣成 • 現在は English のみサポート • 他⾔語と判定された場合提案なしになる • sensitive topics があると判定された場合提案なしになる

Slide 33

Slide 33 text

Smart Reply : スマートリプライ • 消費者向けアプリでのカジュアルな会話向け • 返事の候補は最⼤3つ提案される

Slide 34

Slide 34 text

No content

Slide 35

Slide 35 text

Custom model inference : カスタムモデル推論 • Firebase で TensorFlow Lite のモデルをホスティング • Firebase SDK がモデルのダウンロードをハンドリング • モデルの更新も可能 • apk にバンドルしたモデルを Firebase SDK 経由で利⽤することも可能 • on-device API として利⽤

Slide 36

Slide 36 text

AutoML model inference : AutoMLモデル推論 • Firebase console から画像をアップロードしてモデルを作成できる • 内部で Cloud AutoML Vision service を利⽤ • 画像とラベルのセットを提供するだけで、いい感じに学習して画像分類 モデルを作ってくれるサービス • AutoML での学習は有料 • 作成したモデルはダウンロードできるし、ホスティングもできる

Slide 37

Slide 37 text

AutoML の Pricing

Slide 38

Slide 38 text

AutoML の画像要件 • 利⽤できる画像フォーマット : JPEG, PNG, GIF, BMP, ICO • 画像のサイズ : 30MB以下 • ラベルごとに最低10枚、できれば100枚以上 • ラベルごとに異なる⾓度、解像度、背景を含める • 予測が⾏われる状況に可能な限り近い画像を使う • AutoML Vision Edge によって⽣成されたモデルは、実世界のオブジェクトの写真 ⽤に最適化されている

Slide 39

Slide 39 text

ML Kit + CameraX

Slide 40

Slide 40 text

リアルタイムプレビュー • on-device ML のユースケースとしてリアルタイムプレビューは外せない • 特に検出系 • バーコード検出 • 物体検出 • テキスト検出

Slide 41

Slide 41 text

リアルタイムプレビューは⼤変 • Camera を扱うコード • Camera からのバッファーストリームの処理 • ML Kit との接続 • ...

Slide 42

Slide 42 text

CameraX • Android の Camera 機能の実装を楽にしてくれるライブラリ • もうすぐ(2019年12⽉に)beta が出る • Android 5.0 (API Level 21) 以降をサポート • ML Kit など機械学習との連携が簡単

Slide 43

Slide 43 text

Android Jetpack: Understand the CameraX Camera-Support Library (Google I/O'19) https://www.youtube.com/watch?v=kuv8uK-5CLY プレビューのフレームデータを使って処理を⾏うためのAPIが⽤意されている

Slide 44

Slide 44 text

Codelab の資料 : bit.ly/36okusX

Slide 45

Slide 45 text

Custom Model ⼊⾨

Slide 46

Slide 46 text

Custom Model を使うとき • ML Kit で⽤意されている機能では⾜りないとき • 例)特定のカテゴリーの分類 • 花の分類 • ⿂の分類 • ⾷べ物の分類 寿司と認識 してほしいなぁ...

Slide 47

Slide 47 text

モデルの⼊出⼒情報 • ML Kit を使ってアプリに組み込むには、モデルの⼊出⼒の情報が必要 • classification (分類)は出⼒形式がシンプルなので⼊⾨によい • ⼊出⼒の Format はモデルによって異なる • 例)とある Vision のモデル • ⼊⼒ Format : Byte[バッチ数][224][224][3] • 出⼒ Format : Byte[バッチ数][1001]

Slide 48

Slide 48 text

モデルの⼊出⼒情報 • ⼊出⼒次元を指定 : FirebaseModelInputOutputOptions • ⼊⼒ : FirebaseModelInputs • Vision の場合 Bitmap, Image → ByteArray, ByteBuffer → • 出⼒ : Byte の多次元配列

Slide 49

Slide 49 text

Custom Model に⼊⾨する おすすめステップ

Slide 50

Slide 50 text

1. 既存の画像分類モデルを使う (コードラボ)

Slide 51

Slide 51 text

既存の画像分類モデルを使う • 画像からオブジェクトを認識して分類 • https://codelabs.developers.google.com/ codelabs/mlkit-android-custom-model • mobilenet_v1_1.0_224_quant.tflite • ⼊⼒ Format : Byte[1][224][224][3] • 出⼒ Format : Byte[1][1001] 1 = バッチ数 224 = 画像の⼤きさ 3 = R,G,Bの3⾊情報 1001 = 分類の数

Slide 52

Slide 52 text

⼊出⼒の Format 指定 private val modelInputOutputOptions by lazy { val inputDims = arrayOf(1, 224, 224, 3) val outputDims = arrayOf(1, labelList.size) FirebaseModelInputOutputOptions.Builder() .setInputFormat(0, FirebaseModelDataType.BYTE, inputDims.toIntArray()) .setOutputFormat(0, FirebaseModelDataType.BYTE, outputDims.toIntArray()) .build() }

Slide 53

Slide 53 text

val byteBuffer: ByteBuffer = convertBitmapToByteBuffer(bitmap) val modelInputs: FirebaseModelInputs = try { FirebaseModelInputs.Builder() .add(byteBuffer) .build() } catch (e: FirebaseMLException) { ... return } modelInterpreter .run(modelInputs, modelInputOutputOptions) .addOnSuccessListener { val inferenceOutput: Array = it.getOutput(0) val topLabels = getTopLabels(inferenceOutput) ... }

Slide 54

Slide 54 text

2. AutoML で花の分類モデルを 作る(コードラボ)

Slide 55

Slide 55 text

AutoML で花の分類モデルを作る • たんぽぽ、デイジー、チューリップ、ひまわり、バラ の分類モデルを作る • https://codelabs.developers.google.com/ codelabs/automl-vision-edge-in-mlkit • 各花ごと200枚の画像 • 無料プラン(Spark)でも試せる

Slide 56

Slide 56 text

No content

Slide 57

Slide 57 text

No content

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

No content

Slide 63

Slide 63 text

No content

Slide 64

Slide 64 text

No content

Slide 65

Slide 65 text

No content

Slide 66

Slide 66 text

No content

Slide 67

Slide 67 text

No content

Slide 68

Slide 68 text

No content

Slide 69

Slide 69 text

No content

Slide 70

Slide 70 text

No content

Slide 71

Slide 71 text

No content

Slide 72

Slide 72 text

No content

Slide 73

Slide 73 text

3. AutoML で画像分類モデルを 作る(⾃分の画像)

Slide 74

Slide 74 text

AutoMLの学習時間の⽬安

Slide 75

Slide 75 text

4. 公開されている TensorFlow Lite のモデルを使う

Slide 76

Slide 76 text

TensorFlow Hub https://tfhub.dev/s

Slide 77

Slide 77 text

5. TensorFlow を使って独⾃の モデルを作る

Slide 78

Slide 78 text

Colaboratory • AutoML でやった花分類のモデルを Google Colaboratory で作る • 「Recognize Flowers with TensorFlow Lite on Android」 • https://codelabs.developers.google.com/codelabs/recognize- flowers-with-tensorflow-on-android

Slide 79

Slide 79 text

ML 機能の UI/UX

Slide 80

Slide 80 text

• Material Design • https://material.io/collections/machine-learning/ • サンプルアプリ • https://github.com/firebase/mlkit-material-android

Slide 81

Slide 81 text

Codelabs • Text recognition, Face detection, Image labeling, Custom model • 「Recognize text, facial features, and objects in images with ML Kit for Firebase: Android」 • https://codelabs.developers.google.com/codelabs/mlkit-android • Barcode detection • 「Detect Barcodes in an Image using Firebase MLKit」 • https://codelabs.developers.google.com/codelabs/mlkit-barcode-android

Slide 82

Slide 82 text

Codelabs • Image labeling • 「Detect objects in an Image using Firebase MLKit」 • https://codelabs.developers.google.com/codelabs/mlkit-image-objects- android • Object detection • 「Detect objects in images with ML Kit for Firebase: Android」 • https://codelabs.developers.google.com/codelabs/mlkit-android-odt

Slide 83

Slide 83 text

Codelabs • Custom model • 「Identify objects in images using custom machine learning models with ML Kit for Firebase」 • https://codelabs.developers.google.com/codelabs/mlkit-android-custom-model • AutoML model • 「Train and deploy on-device image classification model with AutoML Vision in ML Kit」 • https://codelabs.developers.google.com/codelabs/automl-vision-edge-in-mlkit

Slide 84

Slide 84 text

Thank you