1. 簡介
近來機器學習技術的進展讓電腦更容易辨識圖片中的物件。在這個程式碼研究室中,我們會逐步引導您建構圖像分類模型,以辨識不同類型的物件,然後將模型部署至 Android 和 iOS 應用程式。有了 ML Kit 和 AutoML,即使沒有任何機器學習專業知識,也能大規模建構及部署模型。
什麼是 ML 套件?
ML Kit 是一款功能強大的行動 SDK,產品功能強大且易於使用,可將 Google 的機器學習專業知識導入 Android 和 iOS 應用程式。無論您是機器學習新手,還是有經驗的新手,只要使用幾行程式碼,就能輕鬆實作所需的功能。有幾種 API 都能辨識文字、臉孔等。你可以直接使用。不過,如果您需要辨識 API 不支援的物件,例如辨識圖片中的不同種類的花卉,就必須訓練自己的模型。這時 AutoML 就能派上用場。
什麼是 AutoML?
Cloud AutoML 是一套機器學習產品,即使開發人員的機器學習專業知識有限,也能利用 Google 最先進的遷移學習和神經架構搜尋技術,訓練出符合自身業務需求的高品質模型。
在這個程式碼研究室中,我們將使用 ML Kit 中的 AutoML Vision Edge 訓練花朵分類模型。模型是在雲端上完成訓練,然後由應用程式封裝或下載,以便完整在裝置端執行推論。
課程內容
- 如何在 ML Kit 中使用 AutoML Vision Edge 訓練圖片分類模型。
- 如何使用 ML Kit SDK 在範例 Android 或 iOS 應用程式中執行這個程式庫。
軟硬體需求
Android 應用程式
- 最新版 Android Studio (3.4 以上版本)
- 搭載 Play 商店的 Android Studio 模擬器或實體 Android 裝置 (5.0 以上版本)
- 對使用 Kotlin 進行 Android 開發作業的基本知識
iOS 應用程式
- 新版 XCode (10.2 以上版本)
- iOS 模擬器或實體 iOS 裝置 (9.0 以上版本)
- CocoaPods
- 對 Swift 中的 iOS 開發有基本瞭解
2. 設定
下載程式碼和訓練資料集
下載 ZIP 封存檔,內含本程式碼研究室和訓練資料集的原始碼。將封存檔案解壓縮至本機電腦。
建立 Firebase 控制台專案
- 前往 Firebase 控制台。
- 選取「Create New Project」,然後將專案命名為「ML Kit Codelab」。
設定 Android 應用程式
- 將 Android 應用程式加入 Firebase 專案。Android 套件名稱:
com.google.firebase.codelab.mlkit.automl
- 下載
google-services.json
設定檔,並放入 Android 應用程式 (android/mlkit-automl/app/google-services.json
) 中。
設定 iOS 應用程式
- 在 Firebase 專案中新增 iOS 應用程式。iOS 軟體包 ID:
com.google.firebase.codelab.mlkit.automl
- 下載
GoogleService-Info.plist
設定檔,然後按照操作說明將該檔案放到 iOS 應用程式 (ios/mlkit-automl/GoogleService-Info.plist
) 中。
3. 準備訓練資料集
為了訓練模型來辨識不同類型的物件,您必須準備一組圖片,並為每個物件加上標籤。為您在這個程式碼研究室中建立內含創用常見授權的花朵相片的封存檔案,
資料集會封裝一個名為 flower_photos.zip
的 ZIP 檔案,這個檔案包含在上一個步驟下載的 ZIP 封存檔中。
探索資料集
如果您擷取 flower_photos.zip
檔案,就會看到該資料集包含 5 種花卉類型的圖片,包括蒲公英、雛菊、鬱金香、向日葵和玫瑰,這些圖片分別以「花」命名的資料夾。這項功能可讓您輕鬆建立訓練資料集,以饋送至 AutoML 並訓練圖片分類模型。
在這個訓練資料集內,每種花朵類型都有 200 張圖片。每個類別至少須有 10 張圖片才能訓練模型。不過,訓練圖片越多,模型通常也會越臻完善。
4. 訓練模型
上傳訓練資料集
- 在 Firebase 主控台中開啟您剛建立的專案。
- 選取「ML Kit」 >AutoML。
- 您可能會看到一些歡迎畫面。視情況選取「開始使用」。
- 設定完成之後,請選取「新增資料集」,並命名為「Flowers」。
- 在「模型目標」中,選擇「單一標籤分類」,因為訓練資料每張圖片只有一個標籤。
- 選取「建立」。
- 上傳您在上一個步驟下載的
flower_photos.zip
檔案,以匯入花卉訓練資料集。 - 請稍候幾分鐘,等待匯入工作完成。
- 現在,您可以確認資料集已正確匯入。
- 訓練資料集中的所有圖片皆已加上標籤,因此您可以繼續訓練模型。
訓練圖片分類模型
模型會在運算能力和儲存空間有限的行動裝置上運作,因此除了模型的準確度,也要考量模型的大小與速度。模型的準確率、延遲時間 (即圖片分類所需時間) 和模型大小一律應取捨。一般而言,準確率較高的模型也較大,需要較長時間來分類圖片。
AutoML 提供多種選項:您可以選擇提高準確率、最佳化延遲時間和模型大小,或是平衡兩者之間的資料。也可以選擇模型的訓練時間。大型資料集需要更長的訓練時間。
如要自行訓練模型,請按照下列步驟操作。
- 選取「訓練模型」。
- 依序選取「一般用途」選項和「1 個運算時數」訓練時間。
- 等待一段時間 (可能為數小時) 完成訓練工作。
- 訓練工作完成後,您會看到評估指標,瞭解訓練過的模型成效。
5. 在行動應用程式中使用型號
準備
- 本程式碼研究室包含 Android 和 iOS 範例應用程式,說明如何使用我們先前在行動應用程式中訓練的圖片分類模型。這兩個應用程式的功能類似。您可以選擇較熟悉的平台。
- 繼續操作之前,請確認您已下載範例應用程式,並在步驟 2 中完成相關設定。
- 此外,請確認本機環境已設定完成,能為您選擇的平台 (Android/iOS) 建構應用程式。
下載圖片分類模型
- 如果您已在上一個步驟中訓練模型,請選取「下載」來取得模型。
- 如果您尚未訓練模型,或是訓練工作尚未完成,您可以使用範例應用程式中包含的模型。
將模型新增至範例應用程式
您只需在範例應用程式中新增模型,模型即可開始使用。如需完整指南,瞭解如何將 ML Kit AutoML 整合至應用程式,請參閱說明文件 ( Android、iOS)。與 ML Kit SDK 互動的程式碼分別位於 ImageClassifier.kt
和 ImageClassifier.swift
檔案中,因此您可以先從該處開始探索應用程式的運作方式。
部署模型的方式有兩種:本機和遠端。
- 本機模型主要用於將圖片分類模型封裝至應用程式二進位檔,不過也可以提供本機儲存空間中儲存的模型。有了套裝組合功能,使用者從 App Store / Play 商店下載您的應用程式後,就能立即使用該模型,即使沒有網路連線也能運作。
- 遠端模型代表模型由 Firebase 代管,且只會在首次需要時下載至使用者的裝置。之後模型也能在離線狀態下運作。
Android 應用程式
- 開啟 Android Studio。
- 匯入
android/mlkit-automl/
中的 Android 應用程式 - (選用) 擷取您下載的模型,然後將其內容複製到範例應用程式中的模型上。
- 現在,按一下 Android Studio 工具列中的「Run」(執行) (
),確認能辨識不同類型的花!
iOS 應用程式
- 開啟終端機並前往「
ios/mlkit-automl/
」資料夾 - 執行
pod install
即可透過 Cocoapods 下載依附元件 - 執行
open MLVisionExample.xcworkspace/
即可在 Xcode 中開啟專案工作區。 - (選用) 擷取您下載的模型,然後複製到範例應用程式中的模型 (位於
ios/ml-automl/Resources/automl/
) 中
- 現在請按一下 Xcode 工具列中的「Run」(執行) (
),確認自己能認出不同類型的花!
6. (選用) 使用遠端模型
有了 ML Kit 的遠端模型,您就不必將 Tensorflow Lite 模型納入應用程式二進位檔,但可以視需求從 Firebase 隨選下載。相較於本機模型,遠端模型有許多優點:
- 較小的應用程式二進位檔
- 無須更新應用程式即可更新模型
- 使用多個模型版本的 A/B 測試
在這個步驟中,我們會發布遠端模型,並在範例應用程式中使用。請確認您已在本程式碼研究室的步驟 4 中完成模型訓練。
發布模型
- 前往 Firebase 控制台。
- 選取「ML Kit AutoML 程式碼研究室」上傳專案
- 選取「ML Kit」 >AutoML
- 選取「花朵」找出先前建立的資料集
- 確認訓練工作已完成,然後選取模型。
- 選取「發布」,將其命名為「mlkit_flowers」。
使用遠端模型辨識花朵
範例應用程式已設為使用遠端模型 (如果有的話)。發布遠端模型後,您只需要重新執行應用程式即可觸發模型下載作業。您可以查看「Source」(來源) 欄,確認應用程式是否使用遠端模型值。請參閱「疑難排解」一節。
疑難排解
如果範例應用程式仍在使用本機模型,請確認程式碼內的遠端模型名稱已正確設定。
Android 應用程式
- 請前往
ImageClassifier.kt
找出這個區塊。
val remoteModel = FirebaseRemoteModel.Builder(REMOTE_MODEL_NAME).build()
- 確認程式碼中設定的模型名稱與你稍早透過 Firebase 控制台發布的模型名稱相符。
- 現在,按一下 Android Studio 工具列中的「Run」(執行) 圖示
,重新執行應用程式。
iOS 應用程式
- 請前往
ImageClassifier.swift
尋找這個區塊,
return RemoteModel(
name: Constant.remoteAutoMLModelName,
allowsModelUpdates: true,
initialConditions: initialConditions,
updateConditions: updateConditions
)
- 確認程式碼中設定的模型名稱與你稍早透過 Firebase 控制台發布的模型名稱相符
- 現在,請按一下 Xcode 工具列中的「Run」(執行) 圖示 (
),重新執行應用程式。
7. 恭喜!
您已完整使用 AutoML,以自己的訓練資料訓練圖片分類模型,接著透過 ML Kit,在行動應用程式中使用該模型。
請參閱說明文件,瞭解如何將 ML Kit 中的 AutoML Vision Edge 整合至自己的應用程式。
您也可以試用 ML Kit 範例應用程式,瞭解 Firebase ML Kit 的其他功能。
Android 範例
iOS 範例