📢 公告:OpenCV 系列文章目前正在重構整理中(進度約 60%),部分文章已暫時下架,後續會陸續補上,完成時間待定。感謝耐心等候!

Like Share Discussion Bookmark Smile

J.J. Huang   2026-03-02   Python OpenCV 07.物件偵測與辨識篇   瀏覽次數:次   DMCA.com Protection Status

Python | OpenCV 與深度學習框架整合

📚 前言

在上一篇 多物件偵測與追蹤 中,我們學會了以 YOLO + DeepSORT 進行即時多物件偵測與追蹤,這是偏向「應用層」的做法,直接利用 OpenCV 的 DNN 模組載入模型並完成任務。
然而,若要進一步開發專案或研究,就需要更高的彈性與可擴充性。

在進入框架整合之前,先退一步看看這一路走來的學習路徑。

🗺️ 這一路怎麼走過來的

這個系列的學習順序是刻意安排的——先做,後懂

如果一開始就從「深度神經網路的原理」、「框架的計算圖設計」這些概念開始講,大多數人學不到三頁就放棄了。所以我們從能馬上看到結果的東西開始,先建立信心,再一步步深入。

第一階段:純 OpenCV 操作

完全不碰任何模型,只用 OpenCV 內建的函式處理圖片與影片。讀取、顯示、縮放、濾波、畫框……這些都是基礎,但也是後面所有應用的地基。


圖:第一階段涵蓋入門、圖片處理、幾何繪圖、特徵與進階、視訊與互動篇五大區塊,全程只用 OpenCV 內建函式

第二階段:cv2 模型整合(不需安裝深度學習框架)

開始使用模型,但還不需要安裝 PyTorch 或 TensorFlow。Haar、LBP、MobileNet SSD、YOLOv3-tiny……這些模型直接透過 OpenCV 的 cv2.dnn 模組載入,傻傻拿來用就好,不用管底層框架是什麼。


圖:第二階段全程使用 OpenCV,透過 cv2.dnn 載入 Caffe、Darknet 等格式的模型進行推論,不需安裝 PyTorch 或 TensorFlow

第三階段:深度學習框架整合(現在這篇)

到了這裡,cv2.dnn 的限制開始出現——它只能推論,不能訓練,也不能修改網路結構。若要自己訓練模型、針對特定場景微調,就必須直接接觸 PyTorch 或 TensorFlow。


圖:第三階段開始使用 PyTorch 與 TensorFlow/Keras,載入預訓練模型並整合 OpenCV 進行推論

第四階段:自己訓練模型(後續篇章)

理解了框架的用法之後,下一步就是真正「自己訓練模型」。從資料蒐集、標註、選擇模型架構、到訓練、評估、匯出,以及如何避免過擬合、使用資料增強提升泛化能力——這些都是後續篇章的主題。


圖:第四階段涵蓋模型訓練與微調、YOLOv8 自訓練物件偵測兩條路線,最終都可匯出 ONNX 接回 OpenCV 部署

從這篇開始,你會陸續看到更多術語:PyTorch、TensorFlow、Keras、YOLO、ResNet、MobileNet……
這篇就是要把這些詞一次講清楚,讓你之後看到時不會一頭霧水。

🔎 先看懂這張全景圖

下面這張圖把電腦視覺常用的工具分成四層,搞懂四層的分工,後面就不會搞混了。


圖:電腦視覺工具四層架構,從左到右依序為:函式庫、深度學習框架、模型架構、執行模型的方式

第一層:函式庫(OpenCV)
OpenCV 是影像處理的工具箱,負責讀取、顯示、前處理圖片與影片。它本身不訓練模型,但有一個子模組 cv2.dnn,可以載入別人訓練好的模型直接推論。

第二層:深度學習框架(PyTorch / TensorFlow / Keras)
這是真正負責訓練模型的引擎。

  • PyTorch:Meta (Facebook) 開發,動態計算圖,程式碼直覺,學術研究主流。
  • TensorFlow:Google 開發,適合大規模部署與生產環境。
  • Keras:TensorFlow 的高階 API,用更少的程式碼就能建立模型,適合快速開發。

第三層:模型架構(YOLO / ResNet / MobileNet / Haar / LBP)
這些是「設計圖」,只是一種網路架構的概念,不能獨立運作,需要搭配框架或工具才能執行。

模型 用途 特色
YOLO 物件偵測 單次推論偵測多目標,速度快
ResNet 影像分類 殘差連接,解決深層網路訓練困難
MobileNet 影像分類 輕量化設計,適合嵌入式裝置
Haar Cascades 人臉偵測(傳統) 速度快,.xml 格式
LBP Cascades 人臉偵測(傳統) 比 Haar 更快,精度略低,.xml 格式

第四層:執行模型的方式
同一個模型,有不同的執行方式,依需求選擇:

  • ultralytics:YOLO 的高階工具套件,底層是 PyTorch,一行程式碼就能跑。
  • cv2.dnn:OpenCV 內建,不需安裝 PyTorch,僅限推論(不能訓練)。
  • PyTorch 直接跑:彈性最高,可訓練、可修改網路結構。

💡 DNN 這個詞有兩種意思,要分清楚:

  • cv2.dnn:OpenCV 裡的一個工具模組,只負責推論
  • DNN(Deep Neural Network):深度神經網路這個「概念」,PyTorch / TensorFlow 實作它

🔎 整合流程 — 影像怎麼流過這些工具

不管用哪個框架,整合 OpenCV 的流程都長這樣:


圖:OpenCV 與深度學習框架的整合流程,影像從讀取到顯示的完整路徑

  1. OpenCV 讀取圖片或影片
  2. 交給框架(PyTorch / TensorFlow / cv2.dnn)執行推論
  3. 拿回偵測結果(邊界框 + 類別 + 信心度)
  4. OpenCV 畫框、標籤、儲存或顯示

三種執行方式的差異:

  • PyTorch / ultralytics:需安裝 torch,呼叫 model("img.jpg") 自動處理全流程
  • TensorFlow / Keras:需安裝 tensorflow,呼叫 model.predict(img) 自動處理全流程
  • OpenCV cv2.dnn:僅需 OpenCV,呼叫 blob → forward() 推論,需手動解析結果

🔎 PyTorch 生態 — torchvision 與 ultralytics

PyTorch 底下有兩個常用的影像工具,功能定位不同:


圖:PyTorch 生態系,torchvision 主攻分類,ultralytics 主攻偵測與分割

  • torchvision:PyTorch 官方的影像工具集,提供現成的模型架構與預訓練權重,主攻影像分類任務。
  • ultralytics:YOLO 的高階套件,底層跑在 PyTorch 上,主攻物件偵測與分割,一行程式碼就能推論。

兩者都跑在 PyTorch 上,但功能定位不同,之後選擇時可以依任務需求決定。

🔎 模型格式 — 各框架存的檔案不一樣

訓練完的模型會存成檔案,各框架有自己的原生格式,但可以透過 ONNX 互相轉換:


圖:各框架模型格式對照,ONNX 是跨框架的通用橋樑

框架 原生格式 轉換後 可用於
PyTorch .pt / .pth .onnx cv2.dnn、ONNX Runtime
ultralytics .pt .onnx cv2.dnn、ONNX Runtime
TensorFlow SavedModel .onnx / .tflite 跨平台部署
Keras .h5 .onnx 跨框架推論

ONNX 是通用橋樑格式,PyTorch 或 TensorFlow 訓練的模型都可以匯出成 .onnx,再用 cv2.dnn 載入推論,不需要安裝 PyTorch。

🔎 任務對應 — 哪個模型做哪件事

看到這麼多模型名稱,新手最常問的就是「到底哪個用在哪裡」:


圖:模型與任務對應,左側為 YOLO 系列,右側為傳統與分類架構

YOLO 能做的事:

  • 物件偵測:同時找出圖中所有「車、人、動物」等目標,最常見用途
  • 影像分類:YOLOv8 之後才支援
  • 人臉偵測 / 自訂目標:換資料集重新訓練即可

傳統與分類架構:

  • Haar Cascades:人臉偵測專用,傳統方法
  • LBP Cascades:人臉偵測,比 Haar 更快,精度略低
  • ResNet / MobileNet:影像分類專用架構,判斷「這張圖是什麼」

🔎 分類 vs 偵測 — 以及 MobileNet SSD 是什麼

新手很容易把「MobileNet」和「MobileNet SSD」混為一談,但兩者完全不同類型:


圖:同一張馬路全景餵給分類模型 vs 偵測模型的差異,以及 MobileNet SSD 的組合方式

影像分類模型(ResNet18、MobileNet 純)設計上是「整張圖給我一個答案」,輸入複雜場景只會硬選一個最像的類別,結果往往奇怪。適合輸入單一主體的清晰照片。

物件偵測模型(YOLO、MobileNet SSD)才是設計來處理「一張圖裡有多個物件」的情境,輸出多個邊界框,每個框各自有類別與信心度,複雜場景才對味。

MobileNet SSD 的組合方式:MobileNet 作為骨幹(Backbone)負責提取特徵,SSD(Single Shot Detector)偵測頭接在後面負責輸出多個邊界框。整體是偵測模型,不是分類模型。

🔎 torchvision 有哪些模型可用

使用 PyTorch 的 torchvision 時,可以從以下分類中挑選現成的預訓練模型:


圖:torchvision 提供的模型清單,涵蓋分類、偵測、分割、影片等任務

🎯 結語

本篇把電腦視覺常見的術語與工具定位一次整理清楚,包含:四層架構全景圖、整合流程、PyTorch 生態、模型格式對照、任務與模型對應,以及這個系列的學習路徑設計理念。
下一篇進入 與深度學習框架整合 — 實作範例,直接用 PyTorch 與 TensorFlow/Keras 寫程式,對影像進行分類。

📖 如在學習過程中遇到疑問,或是想了解更多相關主題,建議回顧一下 Python | OpenCV 系列導讀,掌握完整的章節目錄,方便快速找到你需要的內容。

註:以上參考了
OpenCV 官方文件 — Tutorials
OpenCV 官方文件 — Python Tutorials
PyTorch 官方安裝指南
TensorFlow/Keras 官方文件