使用 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 控制台中開啟視覺資料集頁面。出現提示時選擇您的項目。

  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 控制台中資料集的測試和使用頁面下載 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 控制台資訊中心的「設定」頁面上找到該值。
    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應用程式中使用模型。