MediaPipe 物件偵測工具工作可讓您偵測圖片或影片中多個物件類別的位置和位置。舉例來說,物件偵測器可以找出圖片中的狗。這項工作會使用機器學習 (ML) 模型對圖片資料運作,接受靜態資料或連續視訊串流做為輸入和輸出偵測結果清單。每項偵測結果都代表圖片或影片中出現的物件。
開始使用
根據目前使用的平台,按照下列其中一項實作指南開始使用這項工作:
這些平台專用指南將逐步引導您完成這項工作的基本實作方式,包括建議的模型,以及含有建議設定選項的程式碼範例。
任務詳細資料
本節說明這項工作的功能、輸入和輸出內容。
功能
- 輸入圖片處理 - 處理包括圖片旋轉、大小調整、正規化和色域轉換。
- 標籤地圖語言代碼 - 設定顯示名稱所使用的語言
- 分數門檻:根據預測分數篩選結果。
- Top-K 偵測:篩選數字偵測結果。
- 標籤許可清單和拒絕清單:指定偵測到的類別。
工作輸入內容 | 工作輸出內容 |
---|---|
Object Detector API 可接受下列任一資料類型的輸入內容:
|
Object Detector API 會針對偵測到的物件輸出下列結果:
|
設定選項
這項工作有以下設定選項:
選項名稱 | 說明 | 值範圍 | 預設值 |
---|---|---|---|
running_mode |
設定工作的執行模式。共有三種模式: IMAGE:單一圖片輸入的模式。 影片:影片已解碼影格的模式。 LIVE_STREAM:輸入資料串流 (例如攝影機) 的直播模式。在這個模式下,必須呼叫 resultListener 才能設定事件監聽器,以非同步方式接收結果。 |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
display_names |
設定標籤語言,用於工作模型中繼資料內的顯示名稱 (如有)。英文的預設值是 en 。您可以使用 TensorFlow Lite Metadata Writer API,在自訂模型的中繼資料中加入本地化標籤。 |
語言代碼 | en |
max_results |
設定要傳回的最高分數偵測結果數量上限 (選用)。 | 任何正數 | -1 (傳回所有結果) |
score_threshold |
設定預測分數門檻,覆寫模型中繼資料 (如有) 中提供的分數門檻。這個值下方的結果遭到拒絕。 | 不限浮點值 | 未設定 |
category_allowlist |
設定允許的類別名稱 (選用)。如果不是空白,則系統會篩除類別名稱不在這個組合中的偵測結果。系統會忽略重複或不明的類別名稱。這個選項與 category_denylist 互斥,且同時使用兩者會導致錯誤。 |
任何字串 | 未設定 |
category_denylist |
設定不允許使用的類別名稱清單。如果非空白,系統會篩除類別名稱在此集合中的偵測結果。系統會忽略重複或不明的類別名稱。這個選項與 category_allowlist 互斥,且同時使用兩者會導致錯誤。 |
任何字串 | 未設定 |
模型
如要使用 Object Detector API,您必須下載物件偵測模型並儲存在專案目錄中。如果您還沒有模型,請從預設的建議模型開始著手。本節介紹的其他模型會如何在延遲和準確率之間取得平衡。
EfficientDet-Lite0 模型 (建議)
EfficientDet-Lite0 模型使用 EfficientNet-Lite0 骨幹,輸入大小為 320x320 和 BiFPN 功能網路。COCO 資料集是大規模物件偵測資料集的訓練,內含 150 萬個物件例項和 80 個物件標籤。請參閱完整清單,瞭解支援的標籤。EfficientDet-Lite0 以 int8、float16 或 float32 形式提供。我們建議採用這種模型,是因為這個模型能在延遲時間和準確率之間取得平衡。不僅精確又輕巧,可滿足許多用途的需求。
模型名稱 | 輸入形狀 | 量化類型 | 版本 |
---|---|---|---|
EfficientDet-Lite0 (int8) | 320 x 320 | int8 | 最新 |
EfficientDet-Lite0 (浮點 16) | 320 x 320 | 浮點值 16 | 最新 |
EfficientDet-Lite0 (float 32) | 320 x 320 | 無 (float32) | 最新 |
EfficientDet-Lite2 模型
EfficientDet-Lite2 模型使用 EfficientNet-Lite2 骨幹,輸入大小為 448x448 和 BiFPN 功能網路。COCO 資料集是大規模物件偵測資料集的訓練,內含 150 萬個物件例項和 80 個物件標籤。請參閱完整清單,瞭解支援的標籤。EfficientDet-Lite2 提供 int8、float16 或 float32 模型。這個模型通常比 EfficientDet-Lite0 更準確,但速度也較慢,記憶體也較多。如果準確率和速度的優先程度較高,此模型就相當適用此模型。
模型名稱 | 輸入形狀 | 量化類型 | 版本 |
---|---|---|---|
EfficientDet-Lite2 (int8) | 448 x 448 | int8 | 最新 |
EfficientDet-Lite2 (浮點 16) | 448 x 448 | 浮點值 16 | 最新 |
EfficientDet-Lite2 (float 32) | 448 x 448 | 無 (float32) | 最新 |
SSD MobileNetV2 型號
SSD MobileNetV2 模型採用具有 256x256 輸入大小的 MobileNetV2 骨幹,以及 SSD 功能網路。COCO 資料集是大規模物件偵測資料集的訓練,內含 150 萬個物件例項和 80 個物件標籤。請參閱完整清單,瞭解支援的標籤。SSD MobileNetV2 提供 int8 和 float 32 的型號。這個模型比 EfficientDet-Lite0 更快且輕,但準確度通常較低。這個模型適用於需要快速、輕量級模型,且能提升部分準確率的用途。
模型名稱 | 輸入形狀 | 量化類型 | 版本 |
---|---|---|---|
SSDMobileNet-V2 (int8) | 256 x 256 | int8 | 最新 |
SSDMobileNet-V2 (float 32) | 256 x 256 | 無 (float32) | 最新 |
模型需求條件和中繼資料
本節說明若決定建構搭配此工作使用的模型,對於自訂模型的需求。自訂模型必須採用 TensorFlow Lite 格式,且必須包含說明模型操作參數的中繼資料。
設計需求
輸入內容 | 形狀 | 說明 |
---|---|---|
輸入圖片 | Float32 形狀 [1, 高度, 寬度, 3] | 正規化輸入圖片。 |
輸出內容 | 形狀 | 說明 |
---|---|---|
detection_boxes |
Float32 張量形狀 [1, num_boxes, 4] | 每個偵測到物件的方塊位置。 |
detection_classes |
Float32 形狀 [1, num_boxes] | 每個偵測到物件的類別名稱索引。 |
detection_scores |
float32 張量形狀 [1, num_boxes] | 每個偵測到物件的預測分數。 |
num_boxes |
大小為 1 的 Float32 張量 | 偵測到的包裝盒數量。 |
中繼資料相關規定
參數 | 說明 | 說明 |
---|---|---|
input_norm_mean |
輸入張量正規化中使用的平均值。 | 正規化輸入圖片。 |
input_norm_std |
輸入張量正規化中使用的欄位規範。 | 每個偵測到物件的方塊位置。 |
label_file_paths |
類別 Tensor 標籤檔案的路徑。如果模型沒有任何標籤檔案,請傳送空白清單。 | 每個偵測到物件的類別名稱索引。 |
score_calibration_md |
分類張量中的分數校正作業相關資訊。如果模型未使用分數 校正功能,則不需要這個參數。 |
每個偵測到物件的預測分數。 |
num_boxes |
大小為 1 的 Float32 張量 | 偵測到的包裝盒數量。 |
工作基準
以下是上述預先訓練模型的工作基準。延遲結果是 Pixel 6 使用 CPU / GPU 的平均延遲時間。
模型名稱 | CPU 延遲時間 | GPU 延遲時間 |
---|---|---|
EfficientDet-Lite0 float32 模型 | 61.30 毫秒 | 27.83 毫秒 |
EfficientDet-Lite0 float16 模型 | 53.97 毫秒 | 27.97 毫秒 |
EfficientDet-Lite0 int8 模型 | 29.31 毫秒 | - |
EfficientDet-Lite2 float32 模型 | 197.98 毫秒 | 41.15 毫秒 |
EfficientDet-Lite2 float16 模型 | 198.77 毫秒 | 47.31 毫秒 |
EfficientDet-Lite2 int8 模型 | 70.91 毫秒 | - |
SSD MobileNetV2 float32 模型 | 36.30 毫秒 | 24.01 毫秒 |
SSD MobileNetV2 float16 模型 | 37.35 毫秒 | 28.16 毫秒 |