圖片分類工作指南

MediaPipe 圖片分類器工作可讓您對圖片執行分類。您可以使用這項工作,在訓練期間定義一組類別的圖片代表的圖片代表的意義。這項工作會使用機器學習 (ML) 模型做為靜態資料或連續串流處理圖片資料,並輸出潛在類別清單 (按機率分數遞減排序)。

試試看!

開始使用

如要開始使用這項工作,請按照目標平台適用的任一實作指南操作。下列平台專用指南會逐步引導您使用建議的模型實作這項工作的基本實作,並提供包含建議設定選項的程式碼範例:

任務詳細資料

本節說明這項工作的功能、輸入、輸出和設定選項。

功能

  • 輸入圖片處理 - 處理包括圖片旋轉、大小調整、正規化和色域轉換。
  • 感興趣的地區 - 針對圖片的區域 (而非整個圖片) 進行分類。
  • 標籤地圖語言代碼 - 設定顯示名稱所使用的語言。
  • 分數門檻:根據預測分數篩選結果。
  • Top-k 分類 - 限制分類結果的數量。
  • 標籤許可清單和拒絕清單:指定已分類的類別。
工作輸入內容 工作輸出內容
輸入內容可以是下列任一資料類型:
  • 靜態圖片
  • 經解碼的影格數
  • 直播影片動態饋給
圖片分類器會輸出包含以下內容的類別清單:
  • 類別索引:模型輸出的類別索引
  • 分數:這個類別的信心分數,通常為 [0,1] 的機率
  • 類別名稱 (選填):TFLite 模型中繼資料中指定的類別名稱 (如有)
  • 類別顯示名稱 (選填):在 TFLite 模型中繼資料中指定的類別的顯示名稱,採用顯示名稱語言代碼選項中指定的語言 (如有)

設定選項

這項工作有以下設定選項:

選項名稱 說明 值範圍 預設值
running_mode 設定工作的執行模式。共有三種模式:

IMAGE:單一圖片輸入的模式。

影片:影片已解碼影格的模式。

LIVE_STREAM:輸入資料串流 (例如攝影機) 的直播模式。在這個模式下,必須呼叫 resultListener 才能設定事件監聽器,以非同步方式接收結果。
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
display_names_locale 設定標籤語言,用於工作模型中繼資料內的顯示名稱 (如有)。英文的預設值是 en。您可以使用 TensorFlow Lite Metadata Writer API,在自訂模型的中繼資料中加入本地化標籤 語言代碼 en
max_results 設定要傳回的最高評分分類結果數量上限 (選用)。如果小於 0,系統會傳回所有可用的結果。 任何正數 -1
score_threshold 設定預測分數門檻,覆寫模型中繼資料 (如有) 中提供的分數門檻。這個值下方的結果遭到拒絕。 不限浮點值 未設定
category_allowlist 設定允許的類別名稱 (選用)。如果不是空白,系統會篩除類別名稱不在這個組合中的分類結果。系統會忽略重複或不明的類別名稱。這個選項與 category_denylist 互斥,且同時使用兩者會導致錯誤。 任何字串 未設定
category_denylist 設定不允許使用的類別名稱清單。如果不是空白,系統會篩除類別名稱在此集合中的分類結果。系統會忽略重複或不明的類別名稱。這個選項與 category_allowlist 互斥,且同時使用兩者會導致錯誤。 任何字串 未設定
result_callback 設定結果事件監聽器,在圖片分類器處於直播模式時,以非同步方式接收分類結果。只能在執行模式設為 LIVE_STREAM 時使用 不適用 未設定

模型

您必須下載圖片分類模型,並儲存在專案目錄中,才能使用圖片分類器。開始使用這項工作進行開發時,請先針對目標平台採用的預設建議模型。其他可用的模型通常會在效能、準確率、解析度和資源需求之間取得取捨,在某些情況下還包括其他功能。

EfficientNet-Lite0 模型使用 EfficientNet 架構,並已使用 ImageNet 進行訓練,以辨識 1,000 個類別,例如樹木、動物、食物、車輛等。查看支援的標籤完整清單。EfficientNet-Lite0 提供 int8 和 float 32 模型。我們建議採用這種模型,是因為這個模型能在延遲時間和準確率之間取得平衡。不僅精確又輕巧,可滿足許多用途的需求。

模型名稱 輸入形狀 量化類型 版本
EfficientNet-Lite0 (int8) 224 x 224 int8 最新
EfficientNet-Lite0 (float 32) 224 x 224 無 (float32) 最新

EfficientNet-Lite2 模型

EfficientNet-Lite2 模型使用 EfficientNet 架構,並已使用 ImageNet 進行訓練,以辨識 1,000 個類別,例如樹木、動物、食物、車輛等。查看支援的標籤完整清單。EfficientNet-Lite2 提供 int8 和 float 32 模型。這個模型通常比 EfficientNet-Lite0 更準確,但速度也較慢,記憶體也較多。當準確率高於速度或大小時,此模型就適合使用這種模型。

模型名稱 輸入形狀 量化類型 版本
EfficientNet-Lite2 (int8) 224 x 224 int8 最新
EfficientNet-Lite2 (float 32) 224 x 224 無 (float32) 最新

工作基準

以下為整個管道根據上述預先訓練模型所產生的工作基準。延遲時間結果是 Pixel 6 使用 CPU / GPU 的平均延遲時間。

模型名稱 CPU 延遲時間 GPU 延遲時間
EfficientNet-Lite0 (浮點值 32) 23.52 毫秒 18.90 毫秒
EfficientNet-Lite0 (int8) 10.08 毫秒 -
EfficientNet-Lite2 (浮點值 32) 44.17 毫秒 22.20 毫秒
EfficientNet-Lite2 (int8) 19.43 毫秒 -

自訂模型

如要改善或變更所提供模型的功能,您可以在這項工作中使用自訂機器學習模型。您可以使用 Model Maker 修改現有模型,或使用 TensorFlow 等工具建構模型。與 MediaPipe 搭配使用的自訂模型必須採用 TensorFlow Lite 格式,且必須包含說明模型操作參數的特定中繼資料。建議您先使用 Model Maker 修改這項工作提供的模型,再建構自己的模型。

如果您想使用自己的資料集建立自訂圖片分類器,請先瀏覽圖片分類器教學課程。