使用 AutoML Vision Edge 訓練物件偵測模型

物件偵測模型類似於影像標記模型,但它不是為整個影像分配標籤,而是為影像區域分配標籤。您可以使用物件偵測模型來識別和定位影像中的對象,或追蹤對像在一系列影像中的移動。

要訓練物件偵測模型,您需要向 AutoML Vision Edge 提供一組具有對應物件標籤和物件邊界的影像。 AutoML Vision Edge 使用此資料集在雲端中訓練新模型,您可以將其用於裝置上的物件偵測。

在你開始之前

1. 收集訓練數據

首先,您需要整理標記影像的訓練資料集。請記住以下準則:

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

  • 每個圖像必須為 30MB 或更小。請注意,AutoML Vision Edge 在預處理過程中會縮小大多數影像的尺寸,因此提供非常高解析度的影像通常不會帶來準確性優勢。

  • 每個標籤至少包含 10 個、最好是 100 個或更多範例。

  • 每個標籤包括多個角度、解析度和背景。

  • 訓練資料應盡可能接近要進行預測的資料。例如,如果您的用例涉及模糊且低解析度的影像(例如來自安全攝影機的影像),則您的訓練資料應由模糊、低解析度的影像組成。

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

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

準備好訓練圖像後,準備將其匯入 Google Cloud。您有兩個選擇:

選項 1:帶有 CSV 索引的雲端存儲

將訓練圖像上傳到Google Cloud Storage ,並準備一個 CSV 文件,其中列出每張圖像的 URL,以及(可選)每張圖像的正確物件標籤和邊界區域。使用大型資料集時此選項很有用。

例如,將映像上傳到 Cloud Storage,並準備一個 CSV 文件,如下所示:

gs://your-training-data-bucket/001.jpg,accordion,0.2,0.4,,,0.3,0.5,,
gs://your-training-data-bucket/001.jpg,tuba,0.2,0.5,,,0.4,0.8,,
gs://your-training-data-bucket/002.jpg,accordion,0.2,0.2,,,0.9,0.8,,

物件邊界框被指定為影像中的相對座標。請參閱格式化訓練資料 CSV

這些影像必須儲存在us-central1區域中的儲存桶中,而該儲存桶是您的 Firebase 專案對應的 Google Cloud 專案的一部分。

選項 2:未標記的影像

上傳訓練圖像後,在 Google Cloud 控制台中標記訓練圖像並繪製物件邊界。僅建議對小型資料集使用此方法。請參閱下一步。

2. 訓練你的模型

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

  1. 在 Google Cloud 控制台中開啟視覺資料集頁面。出現提示時選擇您的項目。

  2. 按一下新資料集,提供資料集的名稱,選擇要訓練的模型類型,然後按一下建立資料集

  3. 在資料集的「匯入」標籤上,上傳訓練影像、訓練影像的 zip 檔案或包含您上傳影像的 Cloud Storage 位置的 CSV 檔案。請參閱組裝您的訓練資料

  4. 匯入任務完成後,使用「圖像」標籤驗證訓練資料。

  5. 如果您沒有上傳 CSV,請為每個影像在要識別的物件周圍繪製邊界框並標記每個物件。

  6. 「訓練」標籤上,按一下「開始訓練」

    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應用程式中使用模型。