使用 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:未標記的圖像

上傳訓練圖像後,請在 Firebase 控制台中為訓練圖像添加標籤(單獨上傳或以非結構化 zip 文件形式上傳)。請參閱下一步。

2. 訓練你的模型

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

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

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

  3. 在數據集的“導入”選項卡上,上傳訓練圖像的 zip 存檔或包含您上傳圖像的 Cloud Storage 位置的 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)
    

    Node.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應用程序中使用該模型。