Firebase is back at Google I/O on May 10! Register now

使用 AutoML Vision Edge 訓練圖像標記模型

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

要訓練圖像標籤模型,您需要為 AutoML Vision Edge 提供一組圖像和相應的標籤。 AutoML Vision Edge 使用此數據集在雲中訓練新模型,您可以將其用於應用程序中的設備圖像標籤。 (有關此功能的一般信息,請參閱概述。)

AutoML Vision Edge是一項 Google Cloud 服務。使用該服務須遵守Google Cloud Platform 許可協議服務特定條款,並相應收費。有關計費信息,請參閱 AutoML定價頁面。

在你開始之前

1. 組裝你的訓練數據

首先,您需要將標記圖像的訓練數據集放在一起。請牢記以下準則:

  • 圖片必須採用以下格式之一:JPEG、PNG、GIF、BMP、ICO。

  • 每張圖片必須為 30MB 或更小。請注意,AutoML Vision Edge 會在預處理期間縮小大多數圖像,因此提供非常高分辨率的圖像通常不會提高準確性。

  • 每個標籤至少包含 10 個示例,最好包含 100 個或更多示例。

  • 包括每個標籤的多個角度、分辨率和背景。

  • 訓練數據應盡可能接近要進行預測的數據。例如,如果您的用例涉及模糊和低分辨率圖像(例如來自安全攝像頭的圖像),則您的訓練數據應該由模糊、低分辨率圖像組成。

  • AutoML Vision Edge 生成的模型針對現實世界中的對象照片進行了優化。它們可能不適用於 X 光片、手繪圖、掃描文檔、收據等。

    此外,這些模型通常無法預測人類無法分配的標籤。因此,如果人類無法通過查看圖像 1-2 秒來分配標籤,那麼模型也可能無法通過訓練來執行此操作。

準備好訓練圖像後,準備將它們導入 Firebase。您有以下三種選擇:

選項 1:結構化 zip 存檔

將訓練圖像組織到目錄中,每個目錄都以標籤命名並包含作為該標籤示例的圖像。然後,將目錄結構壓縮成 zip 存檔。

此 zip 存檔中的目錄名稱最長可達 32 個 ASCII 字符,並且只能包含字母數字字符和下劃線字符 ( _ )。

例如:

my_training_data.zip
  |____accordion
  | |____001.jpg
  | |____002.jpg
  | |____003.jpg
  |____bass_guitar
  | |____hofner.gif
  | |____p-bass.png
  |____clavier
    |____well-tempered.jpg
    |____well-tempered (1).jpg
    |____well-tempered (2).jpg

選項 2:帶 CSV 索引的雲存儲

將您的訓練圖像上傳到Google Cloud Storage並準備一個 CSV 文件,其中列出每張圖像的 URL,以及(可選)每張圖像的正確標籤。當使用非常大的數據集時,此選項很有用。

例如,將您的圖片上傳到 Cloud Storage,並準備如下所示的 CSV 文件:

gs://your-training-data-bucket/001.jpg,accordion
gs://your-training-data-bucket/002.jpg,accordion
gs://your-training-data-bucket/003.jpg,accordion
gs://your-training-data-bucket/hofner.gif,bass_guitar
gs://your-training-data-bucket/p-bass.png,bass_guitar
gs://your-training-data-bucket/well-tempered.jpg,clavier
gs://your-training-data-bucket/well-tempered%20(1).jpg,clavier
gs://your-training-data-bucket/well-tempered%20(2).jpg,clavier

圖片必須存儲在屬於您的 Firebase 項目對應的 Google Cloud 項目的存儲桶中。

有關準備 CSV 文件的更多信息,請參閱 Cloud AutoML Vision 文檔中的準備訓練數據

選項 3:未標記的圖像

單獨或在非結構化 zip 文件中上傳訓練圖像後,在 Firebase 控制台中對其進行標記。請參閱下一步。

2. 訓練你的模型

接下來,使用您的圖像訓練模型:

  1. 在 Google Cloud Console 中打開視覺數據集頁面。出現提示時選擇您的項目。

  2. 單擊新建數據集,為數據集命名,選擇要訓練的模型類型,然後單擊創建數據集

  3. 在數據集的“導入”選項卡上,上傳訓練圖像的 zip 存檔或包含您將圖像上傳到的雲存儲位置的 CSV 文件。請參閱組裝您的訓練數據

  4. 導入任務完成後,使用圖像選項卡驗證訓練數據並標記任何未標記的圖像。

  5. “訓練”選項卡上,單擊“開始訓練”

    1. 為模型命名並選擇Edge模型類型。

    2. 配置以下訓練設置,這些設置控制生成模型的性能:

      優化模型...要使用的模型配置。當低延遲或小包尺寸很重要時,您可以訓練更快、更小的模型,或者當準確性最重要時,您可以訓練更慢、更大的模型。
      節點小時預算

      用於訓練模型的最長時間(以計算小時為單位)。更多的訓練時間通常會產生更準確的模型。

      請注意,如果系統確定模型已優化且額外訓練不會提高準確性,則可以在不到指定時間內完成訓練。您只需按實際使用的小時數付費。

      典型訓練時間
      非常小的套裝1小時
      500 張圖片2小時
      1,000 張圖片3小時
      5,000 張圖像6個小時
      10,000 張圖片7小時
      50,000 張圖片11小時
      100,000 張圖像13小時
      1,000,000 張圖像18小時

3. 評估你的模型

訓練完成後,您可以單擊“評估”選項卡查看模型的性能指標。

此頁面的一個重要用途是確定最適合您的模型的置信度閾值。置信度閾值是模型為將標籤分配給圖像而必須具有的最小置信度。通過移動置信度閾值滑塊,您可以看到不同的閾值如何影響模型的性能。模型性能使用兩個指標來衡量:精度召回率

在圖像分類的上下文中,精度是正確標記的圖像數量與給定選定閾值的模型標記的圖像數量的比率。當模型具有高精度時,它錯誤地分配標籤的頻率就會降低(誤報更少)。

召回率是正確標記的圖像數量與包含模型應該能夠標記的內容的圖像數量的比率。當一個模型具有高召回率時,它不會經常分配任何標籤(更少的假陰性)。

您是針對精確度還是針對召回率進行優化取決於您的用例。有關詳細信息,請參閱AutoML Vision 初學者指南包容性 ML 指南 - AutoML

當您找到可以生成您滿意的指標的置信度閾值時,請記下它;您將使用置信度閾值在您的應用程序中配置模型。 (您可以隨時使用此工具來獲得適當的閾值。)

4. 發布或下載您的模型

如果您對模型的性能感到滿意並想在應用程序中使用它,您有三個選項,您可以從中選擇任意組合:部署模型進行在線預測、將模型發佈到 Firebase 或下載模型並將其捆綁與您的應用程序。

部署模型

在數據集的測試和使用選項卡上,您可以部署模型進行在線預測,該模型在雲中運行。 Cloud AutoML 文檔中介紹了此選項。該站點上的文檔處理其餘兩個選項。

發布模型

通過將模型發佈到 Firebase,您可以在不發布新應用版本的情況下更新模型,並且可以使用遠程配置和 A/B 測試為不同的用戶組動態提供不同的模型。

如果您選擇僅通過使用 Firebase 託管模型來提供模型,而不是將其與您的應用程序捆綁在一起,則可以減少應用程序的初始下載大小。但請記住,如果模型未與您的應用程序捆綁,則在您的應用程序首次下載該模型之前,任何與模型相關的功能都將不可用。

要發布您的模型,您可以使用以下兩種方法之一:

  • 從 Google Cloud Console 中數據集的測試和使用頁面下載 TF Lite 模型,然後在 Firebase 控制台的自定義模型頁面上上傳模型。這通常是發佈單個模型的最簡單方法。
  • 使用 Admin SDK 將模型直接從您的 Google Cloud 項目發佈到 Firebase。您可以使用此方法批量發布多個模型或幫助創建自動發布管道。

要使用 Admin SDK模型管理 API發布模型:

  1. 安裝並初始化 SDK

  2. 發布模型。

    您將需要指定模型的資源標識符,它是一個類似於以下示例的字符串:

    projects/PROJECT_NUMBER/locations/us-central1/models/MODEL_ID
    PROJECT_NUMBER包含模型的 Cloud Storage 存儲桶的項目編號。這可能是您的 Firebase 項目或另一個 Google Cloud 項目。您可以在 Firebase 控制台或 Google Cloud Console 儀表板的“設置”頁面上找到此值。
    MODEL_ID模型的 ID,您從 AutoML Cloud API 獲得。

    Python

    # First, import and initialize the SDK.
    
    # Get a reference to the AutoML model
    source = ml.TFLiteAutoMlSource('projects/{}/locations/us-central1/models/{}'.format(
        # See above for information on these values.
        project_number,
        model_id
    ))
    
    # Create the model object
    tflite_format = ml.TFLiteFormat(model_source=source)
    model = ml.Model(
        display_name="example_model",  # This is the name you will use from your app to load the model.
        tags=["examples"],             # Optional tags for easier management.
        model_format=tflite_format)
    
    # Add the model to your Firebase project and publish it
    new_model = ml.create_model(model)
    new_model.wait_for_unlocked()
    ml.publish_model(new_model.model_id)
    

    節點.js

    // First, import and initialize the SDK.
    
    (async () => {
      // Get a reference to the AutoML model. See above for information on these
      // values.
      const automlModel = `projects/${projectNumber}/locations/us-central1/models/${modelId}`;
    
      // Create the model object and add the model to your Firebase project.
      const model = await ml.createModel({
        displayName: 'example_model',  // This is the name you use from your app to load the model.
        tags: ['examples'],  // Optional tags for easier management.
        tfliteModel: { automlModel: automlModel },
      });
    
      // Wait for the model to be ready.
      await model.waitForUnlocked();
    
      // Publish the model.
      await ml.publishModel(model.modelId);
    
      process.exit();
    })().catch(console.error);
    

下載模型並將其與您的應用捆綁

通過將您的模型與您的應用程序捆綁在一起,您可以確保您的應用程序的 ML 功能在 Firebase 託管的模型不可用時仍然有效。

如果您同時發布模型並將其與您的應用程序捆綁在一起,則該應用程序將使用可用的最新版本。

要下載您的模型,請單擊數據集的測試和使用頁面上的TF Lite

下一步

現在您已經發布或下載了該模型,了解如何在您的iOS+Android應用程序中使用該模型。