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

物件偵測模型與圖像標籤模型類似,但不會為整個圖片指派標籤,而是為圖片區域指派標籤。您可以使用物件偵測模型,在圖片中辨識及定位物件,或追蹤一系列圖片中的物件移動情形。

如要訓練物件偵測模型,您必須提供一組含有對應物件標籤和物件邊界的圖片給 AutoML Vision Edge。AutoML Vision Edge 會在雲端使用這個資料集訓練新模型,方便您用於裝置端物件偵測。

事前準備

1. 組合訓練資料

首先,您需要將標記圖片組合成訓練資料集。請留意下列準則:

  • 圖片格式必須是 JPEG、PNG、GIF、BMP 或 ICO。

  • 每張圖片的大小不得超過 30 MB。請注意,AutoML Vision Edge 會在預處理期間縮小大部分圖片,因此提供解析度極高的圖片通常不會提高準確度。

  • 每個標籤至少提供 10 個示例,最好是 100 個以上。

  • 為每個標籤提供多個角度、解析度和背景。

  • 訓練資料應儘可能貼近要用來進行預測的資料。舉例來說,如果用途包含模糊和低解析度的圖片 (例如監視攝影機拍攝的圖片),則訓練資料也應包含模糊和低解析度的圖片。

  • AutoML Vision Edge 產生的模型已針對現實世界中的物件相片進行最佳化處理。但可能無法處理 X 光片、手繪圖、掃描文件、收據等。

    此外,模型通常無法預測人類無法指派的標籤。因此,如果無法訓練人類在觀看圖片 1-2 秒後指派標籤,則可能也無法訓練模型這麼做。

準備好訓練圖片後,請將圖片匯入 Google Cloud。您可以採用兩種方法:

做法 1:使用 CSV 索引的 Cloud Storage

將訓練圖片上傳至 Google Cloud Storage,然後備妥列出每張圖片網址的 CSV 檔案,並備妥每張圖片的正確物件標籤和定界區域。使用大型資料集時,這個選項會很實用。

舉例來說,您可以將圖片上傳至 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 控制台中開啟「Vision Datasets」頁面。畫面出現提示時,請選取專案。

  2. 按一下「New dataset」(新增資料集),提供資料集的名稱,選取要訓練的模型類型,然後按一下「Create dataset」(建立資料集)

  3. 在資料集的「Import」分頁中,上傳訓練圖片、訓練圖片的 ZIP 封存檔,或包含您上傳圖片的 Cloud Storage 位置的 CSV 檔案。請參閱「彙整訓練資料」一節。

  4. 匯入工作完成後,請使用「Images」分頁標籤驗證訓練資料。

  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. 評估模型

訓練完成後,您可以按一下「Evaluate」分頁標籤,查看模型的效能指標。

這個頁面的重要用途之一,就是判斷最適合模型的可信度門檻。可信度門檻是指模型為圖片指派標籤時必須達到的信賴水準。只要移動「可信度門檻」滑桿,即可查看不同門檻值對模型成效的影響。模型效能會透過兩個指標進行評估:精確度喚回率

在圖像分類的情況下,準確率是指在指定門檻下,模型標記正確的圖片數量與模型標記的圖片數量之間的比例。模型的精確度越高,錯誤指派標籤的機率就越低 (偽陽性情形較少)。

喚回度是指正確標記的圖片數,與模型應能為其加上標籤的圖片數量比例。當模型的喚回率偏高時,無法指派任何標籤的情況就會減少 (偽陰性情形較少)。

至於要針對精確度或喚回度進行最佳化,則取決於您的用途。詳情請參閱 AutoML Vision 新手指南包容性機器學習指南 - AutoML

找到可產生您滿意指標的可信度門檻後,請記下這項資訊,以便在應用程式中使用可信度門檻設定模型 (您隨時可以使用這項工具取得適當的門檻值)。

4. 發布或下載模型

如果您很滿意模型的成效,且想在應用程式中使用,可以透過以下三種選項任意組合:部署用於線上預測的模型、將模型發布到 Firebase,或下載模型並將其與應用程式組合。

部署模型

您可以在資料集的「Test & use」分頁中,部署用於線上預測的模型,在雲端執行模型。Cloud AutoML 文件會說明這個選項。本網站上的文件會說明其餘兩個選項。

發布模型

將模型發布至 Firebase 後,您就能在不發布新版應用程式的情況下更新模型,並使用 Remote ConfigA/B Testing,為不同使用者群組動態提供不同的模型。

如果您選擇只透過 Firebase 代管模型,而非與應用程式捆綁,就能縮減應用程式的初始下載大小。不過,請注意,如果模型未與應用程式捆綁,則必須等到應用程式首次下載模型,才能使用任何模型相關功能。

如要發布模型,您可以使用下列任一方法:

  • Google Cloud 控制台的資料集「Test & use」頁面中下載 TF Lite 模型,然後在 Firebase 控制台的「Custom model」頁面上傳模型。這通常是發布單一模型最簡單的方式。
  • 使用 Admin SDK,直接從 Google Cloud 專案將模型發布至 Firebase。您可以使用此方法批次發布多個模型,或協助建立自動化發布管道。

如要使用 Admin SDK 模型管理 API 發布模型,請按照下列步驟操作:

  1. 安裝並初始化 SDK

  2. 發布模型。

    您必須指定模型的資源 ID,此字串如下所示:

    projects/PROJECT_NUMBER/locations/us-central1/models/MODEL_ID
    PROJECT_NUMBER 包含模型的 Cloud Storage 值區專案編號。這可能是你的 Firebase 專案或其他 Google Cloud 專案。您可以在 Firebase 主控台的「設定」頁面或 Google Cloud 主控台資訊主頁中找到這個值。
    MODEL_ID 您從 AutoML Cloud API 取得的模型 ID。

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

下載模型並與應用程式組合

將模型與應用程式捆綁後,即使 Firebase 託管的模型無法使用,應用程式的機器學習功能仍可正常運作。

如果模型同時發布並封裝至應用程式,應用程式將使用最新版本。

如要下載模型,請在資料集的「Test & use」頁面中,點選「TF Lite」

後續步驟

現在您已經發布或下載模型,接下來請瞭解如何在 iOS+Android 應用程式中使用模型。