對於指定的圖片或影片串流,物件偵測模型可以識別可能存在的已知物件組,並提供物件在圖片中的位置資訊。
例如,這個範例應用程式的螢幕截圖顯示了如何辨識出兩個物件,以及如何標註其位置
開始使用
如要瞭解如何在行動應用程式中使用物件偵測,請瀏覽範例應用程式與指南。
如果您使用的平台不是 Android 或 iOS,或者您已熟悉 TensorFlow Lite API,則可以下載我們的入門物件偵測模型和隨附標籤。
如要進一步瞭解中繼資料和相關欄位 (例如:labels.txt),請參閱從模型讀取中繼資料
如果您想針對自己的工作訓練自訂偵測模型,請參閱模型自訂。
針對下列用途,您應使用不同類型的模型
範例應用程式與指南
如果您是 TensorFlow Lite 新手,並且使用 Android 或 iOS,建議您瀏覽下列範例應用程式,這能幫助您開始使用。
Android
您可以運用 TensorFlow Lite Task Library 的現成 API,只需幾行程式碼即可整合物件偵測模型。您也可以使用 TensorFlow Lite Interpreter Java API 建構自己的自訂推論管線。
以下 Android 範例分別示範了使用 Task library 和 interpreter API 這兩種方法的實作方式。
iOS
您可以使用 TensorFlow Lite Interpreter Swift API 整合模型。請參閱以下 iOS 範例。
模型說明
本節說明從 TensorFlow Object Detection API 轉換為 TensorFlow Lite 的 Single-Shot Detector 模型的簽名。
物件偵測模型經過訓練,可偵測多個類別物件的存在和位置。例如,模型可能會使用包含各種水果的圖片進行訓練,並搭配指定水果類別的「標籤」(例如:蘋果、香蕉或草莓),以及指定每個物件在圖片中顯示位置的資料。
後續將圖片提供給模型時,模型會輸出偵測到的物件清單、包含每個物件的邊界框位置,以及指出偵測正確信賴度的分數。
輸入簽名
模型會將圖片作為輸入。
假設預期的圖片為 300x300 像素,每個像素有三個通道 (紅、藍、綠)。這應以 270,000 位元組值的扁平緩衝區 (300x300x3) 饋送至模型。如果模型已量化,則每個值都應是單一位元組,代表介於 0 到 255 之間的值。
您可以查看我們的範例應用程式程式碼,瞭解如何在 Android 上執行此預先處理。
輸出簽名
模型會輸出四個陣列,對應至索引 0-4。陣列 0、1 和 2 說明 N 個偵測到的物件,每個陣列中的一個元素對應至每個物件。
索引 | 名稱 | 說明 |
---|---|---|
0 | 位置 | 介於 0 到 1 之間的 [N][4] 個浮點值多維陣列,內部陣列代表邊界框,格式為 [上、左、下、右] |
1 | 類別 | N 個整數 (輸出為浮點值) 陣列,每個整數都指出標籤檔案中類別標籤的索引 |
2 | 分數 | 介於 0 到 1 之間的 N 個浮點值陣列,代表偵測到類別的機率 |
3 | 偵測次數 | N 的整數值 |
例如,假設模型已訓練為偵測蘋果、香蕉和草莓。當提供圖片時,模型會輸出一組偵測結果數量 (在此範例中為 5)。
類別 | 分數 | 位置 |
---|---|---|
蘋果 | 0.92 | [18, 21, 57, 63] |
香蕉 | 0.88 | [100, 30, 180, 150] |
草莓 | 0.87 | [7, 82, 89, 163] |
香蕉 | 0.23 | [42, 66, 57, 83] |
蘋果 | 0.11 | [6, 42, 31, 58] |
信賴度分數
如要解讀這些結果,我們可以查看每個偵測到物件的分數和位置。分數是介於 0 到 1 之間的數字,表示物件確實偵測到的信賴度。數字越接近 1,表示模型越有信心。
根據您的應用程式,您可以決定一個截止門檻,低於此門檻您將捨棄偵測結果。對於目前的範例,合理的截止值是 0.5 分 (表示偵測有效的機率為 50%)。在這種情況下,陣列中的最後兩個物件會被忽略,因為這些信賴度分數低於 0.5
類別 | 分數 | 位置 |
---|---|---|
蘋果 | 0.92 | [18, 21, 57, 63] |
香蕉 | 0.88 | [100, 30, 180, 150] |
草莓 | 0.87 | [7, 82, 89, 163] |
香蕉 | 0.23 | [42, 66, 57, 83] |
蘋果 | 0.11 | [6, 42, 31, 58] |
您使用的截止值應根據您是否更能接受假陽性 (錯誤識別的物件,或圖片中錯誤識別為物件的區域,但實際上不是物件) 或假陰性 (因為信賴度較低而錯過的真實物件) 而定。
例如,在下圖中,梨子 (並非模型訓練偵測的物件) 被誤判為「人」。這是假陽性的範例,可以透過選擇適當的截止值來忽略。在此情況下,0.6 (或 60%) 的截止值可以輕鬆排除假陽性。
位置
對於每個偵測到的物件,模型都會傳回一個包含四個數字的陣列,代表環繞其位置的邊界矩形。對於提供的入門模型,數字順序如下
[ | 上, | 左, | 下, | 右 | ] |
「上」值表示矩形上邊緣與圖片頂端的距離,以像素為單位。「左」值表示左邊緣與輸入圖片左側的距離。其他值則以類似方式表示下邊緣和右邊緣。
效能基準
模型名稱 | 模型大小 | 裝置 | GPU | CPU |
---|---|---|---|---|
COCO SSD MobileNet v1 | 27 Mb | Pixel 3 (Android 10) | 22 毫秒 | 46 毫秒* |
Pixel 4 (Android 10) | 20 毫秒 | 29 毫秒* | ||
iPhone XS (iOS 12.4.1) | 7.6 毫秒 | 11 毫秒** |
* 使用 4 個執行緒。
** 在 iPhone 上使用 2 個執行緒以獲得最佳效能結果。
模型自訂
預先訓練模型
行動裝置最佳化偵測模型具有各種延遲和精確度特性,可在偵測動物園中找到。每個模型都遵循以下章節中說明的輸入和輸出簽名。
大多數下載的 zip 檔都包含 model.tflite 檔案。如果沒有,可以使用這些指示產生 TensorFlow Lite flatbuffer。TF2 Object Detection Zoo 的 SSD 模型也可以使用此處的指示轉換為 TensorFlow Lite。請務必注意,偵測模型無法使用 TensorFlow Lite Converter 直接轉換,因為它們需要產生行動裝置友善來源模型的中繼步驟。上述連結的指令碼會執行此步驟。
TF1 和 TF2 匯出指令碼都有參數,可啟用更多輸出物件或速度較慢但更精確的後處理。請搭配指令碼使用 --help 以查看完整支援引數清單。
目前,裝置端推論僅針對 SSD 模型進行最佳化。對於其他架構 (例如 CenterNet 和 EfficientDet) 的更佳支援仍在調查中。
如何選擇要自訂的模型?
每個模型都有自己的精確度 (以 mAP 值量化) 和延遲特性。您應選擇最適合您的用途和目標硬體的模型。例如,Edge TPU 模型非常適合在 Pixel 4 上 Google 的 Edge TPU 進行推論。
您可以使用我們的基準工具評估模型,並選擇最有效率的可用選項。
在自訂資料上微調模型
我們提供的預先訓練模型經過訓練,可偵測 90 個類別的物件。如需完整類別清單,請參閱模型中繼資料中的標籤檔案。
您可以使用稱為遷移學習的技術,重新訓練模型以辨識原始集合中沒有的類別。例如,您可以重新訓練模型以偵測多種蔬菜,即使原始訓練資料中只有一種蔬菜。若要執行此操作,您需要一組訓練圖片,用於訓練您希望訓練的每個新標籤。建議的方式是使用 TensorFlow Lite Model Maker 程式庫,這能簡化使用自訂資料集訓練 TensorFlow Lite 模型 (只需幾行程式碼) 的流程。它使用遷移學習來減少所需的訓練資料量和時間。您也可以從 Few-shot detection Colab 學習,瞭解如何使用少量範例微調預先訓練模型。
如要使用較大的資料集進行微調,請參閱以下指南,瞭解如何使用 TensorFlow Object Detection API 訓練自己的模型:TF1、TF2。訓練完成後,可以使用此處的指示將模型轉換為 TFLite 友善格式:TF1、TF2