圖片分類工作指南

動物正確標示為紅鶴,且可信度評分為 95%

MediaPipe 圖片分類器工作可讓您對圖片進行分類。您可以使用這項工作,找出圖片在訓練時定義的一系列類別中代表的內容。這項工作會使用機器學習 (ML) 模型處理圖像資料,以靜態資料或持續串流的形式輸出可能類別清單,並依機率分數由高至低排序。

試試看吧!

開始使用

請按照下列目標平台的導入指南操作,開始使用此工作。這些平台專屬指南會引導您逐步完成這項工作的基本實作方式,並提供含有建議設定選項的程式碼範例:

任務詳細資料

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

功能

  • 輸入圖像處理:處理作業包括圖像旋轉、大小調整、標準化和色彩空間轉換。
  • 感興趣區域:針對圖片的某個區域 (而非整個圖片) 執行分類作業。
  • 標籤對應語言代碼:設定顯示名稱所使用的語言。
  • 分數門檻:根據預測分數篩選結果。
  • 前 k 項分類結果:限制分類結果數量。
  • 標籤許可清單和拒絕清單:指定分類類別。
工作輸入內容 任務輸出
輸入內容可以是下列其中一種資料類型:
  • 靜態圖片
  • 已解碼的影片影格
  • 直播視訊畫面
圖像分類器會輸出包含以下項目的類別清單:
  • 類別索引:模型輸出內容中的類別索引
  • 分數:這個類別的可信度分數,通常是介於 0 到 1 之間的機率
  • 類別名稱 (選用):TFLite 模型中繼資料中指定的類別名稱 (如有)
  • 類別顯示名稱 (選用):TFLite 模型中繼資料中指定的類別顯示名稱,使用顯示名稱語言代碼選項指定的語言 (如有)

設定選項

此工作提供下列設定選項:

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

IMAGE:單一圖片輸入模式。

VIDEO:影片解碼影格模式。

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 在 Image Classifier 處於即時串流模式時,將結果事件監聽器設為以非同步方式接收分類結果。只有在執行模式設為 LIVE_STREAM 時,才能使用 不適用 未設定

模型

圖像分類器需要下載圖像分類模型,並儲存在專案目錄中。開始使用此工作進行開發時,請先使用目標平台的預設建議模型。其他可用的模型通常會在效能、準確度、解析度和資源需求之間取得平衡,在某些情況下還會包含其他功能。

EfficientNet-Lite0 模型採用 EfficientNet 架構,並使用 ImageNet 進行訓練,可辨識 1,000 個類別,例如樹木、動物、食物、車輛、人物等。請參閱完整清單,瞭解支援的標籤。EfficientNet-Lite0 可做為 int8 和浮點 32 模型使用。我們建議您使用這個模型,因為它可在延遲時間和準確度之間取得平衡。它既準確又輕巧,適合多種用途。

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

EfficientNet-Lite2 模型

EfficientNet-Lite2 模型採用 EfficientNet 架構,並使用 ImageNet 進行訓練,可辨識 1,000 個類別,例如樹木、動物、食物、車輛、人物等。請參閱完整清單,瞭解支援的標籤。EfficientNet-Lite2 可做為 int8 和浮點 32 模型使用。這個模型通常比 EfficientNet-Lite0 更準確,但速度較慢且記憶體用量較高。這個模型適合用於精確度優先於速度或大小的用途。

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

工作基準

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

模型名稱 CPU 延遲時間 GPU 延遲時間
EfficientNet-Lite0 (float 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 格式,且必須包含描述模型運作參數的特定metadata。建議您先使用 Model Maker 修改此任務的提供模型,再自行建立模型。

如果您想使用自己的資料集建立自訂圖像分類器,請先參閱圖像分類器自訂化教學課程。