使用 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 Console 中標記您的訓練圖像並繪製對象邊界。這只建議用於小型數據集。請參閱下一步。

2. 訓練你的模型

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

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

  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 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);
    

下載模型並將其與您的應用程序捆綁在一起

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

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

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

下一步

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