white security camera on post

← INSIGHTS & PERSPECTIVES | 機器學習

TensorFlow Object Detection API 功能介紹與模型選擇

介紹 TensorFlow Object Detection API 內建模型、YOLO 支援狀況、SSD MobileNet V2 FPNLite 選擇理由與預訓練模型檔案結構。

TensorFlow Object Detection API 提供多種在 COCO 2017 資料集上預訓練的目標檢測模型,例如 CenterNet、EfficientDet、SSD、Faster R-CNN 與 Mask R-CNN。我的需求是即時串流物件偵測,最後選擇 `SSD MobileNet V2 FPNLite 640x640`。

TensorFlow Object Detection API 有包含 YOLO 嗎?

TensorFlow Object Detection API 的 TF2 model zoo 不把 YOLO 放在主要內建模型列表中。官方模型集合主要提供 CenterNet、EfficientDet、SSD、Faster R-CNN 與 Mask R-CNN。

YOLO(You Only Look Once)是常見的即時目標檢測系統,但在我寫這篇時,TensorFlow 2 對 YOLO 的支援不像 PyTorch 生態系那麼快。若要在 TensorFlow 2 使用 YOLO,通常要另外找轉換版或社群實作,例如 YOLOv5 in TF2/Keras。

Object Detection API 常見模型差在哪?

Object Detection API 常見模型差異在速度、精度與輸出類型。SSD 偏向即時速度,Faster R-CNN 偏向精度,Mask R-CNN 可輸出實例分割 mask。

模型特點適合情境
CenterNet以物體中心點等關鍵點做檢測需要關鍵點或姿態資訊
EfficientDet以 EfficientNet 與 BiFPN 設計需要精度與效率平衡
SSDSingle Shot MultiBox Detector需要即時推論速度
Faster R-CNN使用區域提議網路追求較高精度
Mask R-CNNFaster R-CNN 延伸,可輸出 mask需要實例分割

Model Zoo 表格要怎麼讀?

Model Zoo 表格通常會列出模型名稱、Speed、COCO mAP 與 Outputs。Speed 數值越低代表推論越快,COCO mAP 越高通常代表檢測精度越好。

下表整理官方模型列表中幾個代表模型,取代整頁下載連結,方便快速比較;實際模型清單應以 TensorFlow 2 Detection Model Zoo 官方頁面為準。

模型系列Speed 特色Outputs
CenterNet MobileNetV2 FPN 512x512速度可到 6 ms 等級Boxes 或 Keypoints
SSD MobileNet V2 320x320約 19 msBoxes
SSD MobileNet V2 FPNLite 640x640約 39 msBoxes
Faster R-CNN ResNet50 V1 640x640約 53 msBoxes
Mask R-CNN Inception ResNet V2 1024x1024約 301 msBoxes/Masks

為什麼選 `SSD MobileNet V2 FPNLite 640x640`?

`SSD MobileNet V2 FPNLite 640x640` 適合需要即時串流偵測的情境。SSD 架構偏快,MobileNet 較輕量,FPNLite 則讓模型保留處理不同尺度物件的能力。

我的需求是偵測即時串流內的物件,因此速度比最高精度更重要。相比 ResNet,MobileNet 參數量與計算量較小;相比完整 FPN,FPNLite 又更輕。這也是我最後選擇 SSD MobileNet V2 FPNLite 的主要理由。

預訓練模型下載後有哪些檔案?

TensorFlow Object Detection API 預訓練模型通常包含 `pipeline.config`、`checkpoint` 與 `saved_model`。這些檔案分別對應訓練設定、權重與可載入模型。

我實際使用的模型是 `ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8`,下載連結如下(以 HTTPS 表示同一個官方檔案位置):

檔案用途如下:

  • `pipeline.config`:包含模型類型、輸入尺寸、learning rate、batch size 等訓練參數。
  • `checkpoint`:保存模型權重,可用於恢復訓練或微調。
  • `saved_model/saved_model.pb`:包含可載入的模型結構與參數。

如何從 SavedModel 建立 checkpoint?

TensorFlow 可用 `tf.train.Checkpoint` 包裝已載入的 SavedModel,再呼叫 `save()` 產生 checkpoint。這適合需要把推論模型轉成可接續使用的權重檔時測試。

```python

import tensorflow as tf

loaded = tf.saved_model.load(PATH_TO_SAVED_MODEL)

ckpt = tf.train.Checkpoint(model=loaded)

ckpt.save(PATH_TO_CKPT)

```

實作時要注意 TensorFlow 版本與 Object Detection API 版本是否相容。若後續要微調模型,通常還需要檢查 label map、pipeline config 路徑與 checkpoint restore 設定。

常見問題

QTensorFlow Object Detection API 適合初學者嗎?

TensorFlow Object Detection API 適合已經熟悉 TensorFlow 與基本訓練流程的人。若只是快速試推論,可以先使用預訓練模型;若要自訂資料集訓練,設定檔與環境相依性會比較多。

QYOLO 可以用 TensorFlow 2 做嗎?

可以,但通常不是直接使用 TensorFlow Object Detection API 內建模型。需要找 TensorFlow 2/Keras 版本的 YOLO 實作或自行轉換模型。

QSSD 和 Faster R-CNN 要怎麼選?

需要即時速度時優先測 SSD。需要較高精度且可以接受較慢推論時,再測 Faster R-CNN。

QCOCO mAP 是什麼?

COCO mAP 是模型在 COCO 資料集上的平均精度指標。COCO mAP 可用來粗略比較模型,但實際專案仍要用自己的資料集驗證。

Q預訓練模型一定可以直接用在自己的場景嗎?

不一定。預訓練模型的類別與資料分佈來自原始訓練資料,若你的物件類別或拍攝環境差異很大,就需要微調或重新訓練。

參考資料

  • TensorFlow 2 Detection Model Zoo: <https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2_detection_zoo.md>
  • TensorFlow Object Detection API: <https://github.com/tensorflow/models/tree/master/research/object_detection>
  • COCO Dataset: <https://cocodataset.org/>
  • YOLOv5 in TensorFlow 2 Keras(社群實作參考): <https://github.com/yyccR/yolov5_in_tf2_keras>

最後更新

Thu Jul 27 2023 08:00:00 GMT+0800 (Taiwan Standard Time)

延伸閱讀

關於作者 {#author}

Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。

首次發布:2023-07-27