使用 ML Kit 中的 AutoML Vision 訓練及部署裝置端圖片分類模型

1. 簡介

機器學習的最新進展讓電腦相對容易辨識圖片中的物件。在本程式碼研究室中,我們將逐步引導您建構可辨識不同類型物件的圖片分類模型,然後在 Android 和 iOS 應用程式中部署模型。您可以使用 ML Kit 和 AutoML 大規模建構及部署模型,完全不需要機器學習專業知識。

什麼是機器學習套件?

ML Kit 是一套行動 SDK,可將 Google 的機器學習專業知識導入 Android 和 iOS 應用程式,功能強大且易於使用。無論您是機器學習新手還是經驗豐富的開發人員,都能輕鬆導入所需功能,只需幾行程式碼即可。您可以直接使用多種 API 來辨識文字、臉孔等。不過,如果您需要辨識 API 不支援的物件 (例如從圖片中辨識不同類型的花朵),則必須自行訓練模型。這時 AutoML 就能派上用場。

什麼是 AutoML?

Cloud AutoML 是一套機器學習產品,即使開發人員的機器學習專業知識有限,也能運用 Google 最先進的遷移學習和神經架構搜尋技術,訓練出符合自身業務需求的高品質模型。

在本程式碼研究室中,我們將使用 ML Kit 中的 AutoML Vision Edge 訓練花卉分類模型。模型是在雲端訓練,但應用程式會將模型封裝或下載到裝置上,完全在裝置上執行推論。

93f21fd287496e4e.png

課程內容

  • 瞭解如何使用 ML Kit 中的 AutoML Vision Edge 訓練圖片分類模型。
  • 如何使用 ML Kit SDK 在 Android 或 iOS 範例應用程式中執行。

軟硬體需求

Android 應用程式

適用於 iOS 應用程式

  • 最新版 XCode (10.2 以上)
  • iOS 模擬器或實體 iOS 裝置 (9.0 以上版本)
  • CocoaPods
  • 具備 Swift 的 iOS 開發基本知識

2. 設定

下載程式碼和訓練資料集

下載含有本程式碼研究室原始碼和訓練資料集的 ZIP 封存檔。在本機電腦解壓縮封存檔。

建立 Firebase 控制台專案

  1. 前往 Firebase 控制台
  2. 選取「建立新專案」,然後將專案命名為「ML Kit Codelab」。

設定 Android 應用程式

  1. 將 Android 應用程式新增至 Firebase 專案。Android 套件名稱:com.google.firebase.codelab.mlkit.automl
  2. 下載 google-services.json 設定檔,並將其放入 Android 應用程式的 android/mlkit-automl/app/google-services.json

設定 iOS 應用程式

  1. 將我們的 iOS 應用程式新增至 Firebase 專案。iOS 軟體包 ID:com.google.firebase.codelab.mlkit.automl
  2. 下載 GoogleService-Info.plist 設定檔,然後按照操作說明將該檔案放入 ios/mlkit-automl/GoogleService-Info.plist 的 iOS 應用程式中。

3. 準備訓練資料集

如要訓練模型辨識不同類型的物件,必須準備一組圖片,並為每張圖片加上標籤。我們已建立花卉相片封存檔,並採用創用 CC 授權,供您在本程式碼研究室中使用。

資料集會封裝成名為 flower_photos.zip 的 ZIP 檔案,該檔案包含在您在上一個步驟下載的 ZIP 封存檔中。

探索資料集

解壓縮 flower_photos.zip 檔案後,您會發現資料集包含 5 種花卉的圖片:蒲公英、雛菊、鬱金香、向日葵和玫瑰,這些圖片會整理到以花卉名稱命名的資料夾中。這是建立訓練資料集的實用方法,可提供給 AutoML 並訓練圖片分類模型。

這個訓練資料集中,每種花卉類型都有 200 張圖片。每個類別至少要有 10 張圖片,即可訓練模型。不過,訓練圖片越多,模型通常會越好。

e5772b6527a6048d.png 6c4443d31cd5653e.png

4. 訓練模型

上傳訓練資料集

  1. Firebase 控制台中,開啟您剛建立的專案。
  2. 選取「ML Kit」>「AutoML」
  3. 你可能會看到一些歡迎畫面。選取「開始使用」(如適用)。
  1. 設定進度完成後,選取「新增資料集」,並將其命名為「Flowers」。
  2. 在「模型目標」中,選擇「單一標籤分類」,因為訓練資料每張圖片只包含一個標籤。
  3. 選取「建立」
  4. 上傳在上一個步驟中下載的 flower_photos.zip 檔案,匯入花朵訓練資料集。
  5. 請稍候幾分鐘,等待匯入工作完成。
  6. 現在您可以確認資料集是否已正確匯入。
  7. 訓練資料集中的所有圖片都已加上標籤,因此您可以繼續訓練模型。

cdb18b61f890934f.png

訓練圖片分類模型

由於模型會在運算能力和儲存空間有限的行動裝置上執行,因此我們不僅要留意模型的準確度,也要注意模型的大小和速度。模型準確度、延遲時間 (即分類圖片所需的時間) 和模型大小之間,一律需要取捨。一般來說,準確度越高的模型也越大,分類圖片的時間也越長。

AutoML 提供多種選項:您可以選擇著重準確度、延遲時間和模型大小,或是在這兩者之間取得平衡。您也可以選擇允許模型訓練的時間長度。資料集越大,訓練時間就越長。

dd6b7eaa2dd5a9de.png

如要自行訓練模型,請按照下列步驟操作。

  1. 選取「訓練模型」
  2. 選取「一般用途」選項和「1 個運算小時」訓練時間。
  3. 等待一段時間 (可能需要數小時),訓練工作就會完成。
  4. 訓練作業完成後,您會看到訓練後模型的評估指標。

73f98fbed5ae5ee5.png

5. 在行動應用程式中使用模型

準備

  • 本程式碼研究室包含 Android 和 iOS 範例應用程式,示範如何在行動應用程式中使用先前訓練的圖片分類模型。這兩個應用程式的功能類似。你可以選擇自己較熟悉的平台。
  • 繼續操作前,請確認您已下載範例應用程式,並在步驟 2 中完成設定。
  • 此外,請確認您已設定本機環境,以便為所選平台 (Android/iOS) 建構應用程式。

下載圖片分類模型

  • 如果您已在前一個步驟中訓練模型,請選取「下載」取得模型。
  • 如果您未訓練模型,或訓練工作尚未完成,可以使用範例應用程式隨附的模型。

將模型新增至範例應用程式

您只需將模型新增至範例應用程式,即可立即使用。如需將 ML Kit AutoML 整合至應用程式的完整指南,請參閱我們的說明文件 ( AndroidiOS)。與 ML Kit SDK 互動的程式碼分別位於 ImageClassifier.ktImageClassifier.swift 檔案中,您可以從這裡開始探索應用程式的運作方式。

您可以選擇在本機或遠端部署模型。

  • 本機模型主要用於將圖片分類模型併入應用程式二進位檔,但也可以提供儲存在本機儲存空間的模型。透過套件組合,使用者從 App Store / Play 商店下載應用程式後,即可立即使用模型,且不需連上網路。
  • 遠端模型是指模型會託管在 Firebase 上,且只會在首次需要時下載至使用者裝置。之後,模型也能離線運作。

2e71ed2c7cb8757c.png

Android 應用程式

  1. 開啟 Android Studio。
  2. android/mlkit-automl/ 下匯入 Android 應用程式。
  3. (選用) 擷取已下載的模型,然後將其內容複製到範例應用程式隨附的模型。10cf6b1e0f34de29.png
  4. 現在按一下 Android Studio 工具列中的「Run」圖示 ( c8b8a080b7ead886.png),確認應用程式可以辨識不同類型的花朵!

2e71ed2c7cb8757c.png

iOS 應用程式

  1. 開啟終端機並前往 ios/mlkit-automl/ 資料夾
  2. 執行 pod install,透過 Cocoapods 下載依附元件
  3. 執行 open MLVisionExample.xcworkspace/,在 Xcode 中開啟專案工作區。
  4. (選用) 解壓縮下載的模型,然後將內容複製到範例應用程式中 ios/ml-automl/Resources/automl/cd291fe04bcdc6ee.png 下的模型。
  5. 現在請按一下 Xcode 工具列中的「執行」圖示 ( 16629f86bbeb4208.png),確認應用程式可以辨識不同類型的花朵!

65172c3f35336d4e.png

6. (選用) 使用遠端模型

使用 ML Kit 的遠端模型時,您不必在應用程式二進位檔中加入 TensorFlow Lite 模型,而是視需要從 Firebase 下載。遠端模型比本機模型有幾項優點:

  • 縮減應用程式二進位檔
  • 不需更新應用程式即可更新模型
  • 對多個版本的模型進行 A/B 測試

在本步驟中,我們會發布遠端模型,並在範例應用程式中使用。請確認您已在本程式碼研究室的步驟 4 中完成模型訓練。

發布模型

  1. 前往 Firebase 控制台
  2. 選取您先前建立的「ML Kit AutoML Codelab」專案。
  3. 依序選取「ML Kit」 >「AutoML」
  4. 選取先前建立的「Flowers」資料集。
  5. 確認訓練工作已完成,然後選取模型。
  6. 選取「發布」,並將其命名為「mlkit_flowers」。b63a58b83e814acd.png

使用遠端模型辨識花朵

範例應用程式已設定為使用遠端模型 (如有)。發布遠端模型後,您只需要重新執行應用程式,即可觸發模型下載。查看應用程式畫面頁尾的「來源」值,即可確認應用程式是否使用遠端模型。如果無法使用,請參閱下方的「疑難排解」一節。

7c8292293fd858ad.png de359886ccecef2.png

疑難排解

如果範例應用程式仍使用本機模型,請確認程式碼中設定的遠端模型名稱是否正確。

Android 應用程式

  1. 前往 ImageClassifier.kt 並找出這個區塊。
val remoteModel = FirebaseRemoteModel.Builder(REMOTE_MODEL_NAME).build()
  1. 確認程式碼中設定的模型名稱,與您先前透過 Firebase 控制台發布的模型名稱相符。
  2. 現在請按一下 Android Studio 工具列中的「Run」圖示 ( c8b8a080b7ead886.png),重新執行應用程式。

iOS 應用程式

  1. 前往 ImageClassifier.swift 並找到這個積木,
return RemoteModel(
  name: Constant.remoteAutoMLModelName,
  allowsModelUpdates: true,
  initialConditions: initialConditions,
  updateConditions: updateConditions
)
  1. 確認程式碼中設定的模型名稱與您先前透過 Firebase 控制台發布的模型名稱相符
  2. 現在請點按 Xcode 工具列中的「執行」圖示 ( 16629f86bbeb4208.png),重新執行應用程式。

7. 恭喜!

您已完成端對端流程,使用 AutoML 和自己的訓練資料訓練圖片分類模型,然後在行動應用程式中透過 ML Kit 使用該模型。

如要瞭解如何在 ML Kit 中整合 AutoML Vision Edge 到自己的應用程式,請參閱說明文件

您也可以試用我們的 ML Kit 範例應用程式,瞭解 Firebase ML Kit 的其他功能。

Android 範例

iOS 範例