電腦視覺 - 物件偵測 - YOLO

電腦視覺 - 物件偵測 - YOLO

影像分類只能告訴你圖片裡有什麼,但如果想知道物件在「哪裡」,就需要物件偵測 (Object Detection)。本篇將帶你深入業界最流行、速度最快的 YOLO 架構,體驗 You Only Look Once 的強大威力!


Day 13 (CNN) 我們學會了影像分類 (Image Classification),機器能告訴我們「這張圖是一隻貓」。 但如果圖中有「一隻貓、兩隻狗、三個人」,而且我們想知道它們分別在圖片的哪個位置呢?

這就是 物件偵測 (Object Detection) 的任務:

  1. Classification (分類):是什麼?(Cat, Dog, Person)
  2. Localization (定位):在哪裡?(畫出 Bounding Box 框起來)

今天的主角是目前業界最流行、速度最快的模型:YOLO (You Only Look Once)


1. YOLO 演進史 (v1 - v8)

YOLO 的發展非常迅速,每一代都有顯著的進步:

版本年份主要特色
YOLOv12015開山始祖。將偵測視為回歸問題,速度極快 (45 FPS),但對小物件偵測效果差。
YOLOv22016Better, Faster, Stronger。引入 Anchor Boxes (錨點框) 與 Batch Normalization,提升準確度。
YOLOv32018集大成者。引入 FPN (Feature Pyramid Networks) 多尺度偵測,大幅改善小物件偵測能力。
YOLOv42020最佳化組合。由 Alexey Bochkovskiy 接手,整合了大量 Bag of Freebies (BoF) 與 Bag of Specials (BoS) 技巧。
YOLOv52020工程化落地。Ultralytics 發布 (非論文),改用 PyTorch 實作,極易使用,部署方便,生態系強大。
YOLOv72022架構創新。在速度與準確度上再次取得 SOTA (State-of-the-Art),專注於模型架構的最佳化 (E-ELAN)。
YOLOv82023全面升級。Ultralytics 最新力作。改用 Anchor-Free 機制,整合了分類、偵測、分割 (Segmentation) 等多種任務。

2. 核心概念:You Only Look Once

YOLO 的名字非常霸氣:「你只需要看一次」。 早期的物件偵測 (如 R-CNN) 需要看圖片好幾千次 (提取大量候選框),速度非常慢。 YOLO 將整張圖一次丟進神經網路,直接輸出所有物件的位置和類別,達到了 Real-time (即時) 的速度。

核心公式

如果要看懂 YOLO 的數學靈魂,主要有兩個部分:

1. 損失函數 (Loss Function)

2. 邊框解碼 (Bounding Box Decoding) 神經網路輸出的其實是 tx,ty,tw,tht_x, t_y, t_w, t_h (轉換前的數值),需要透過公式轉回真實座標 bx,by,bw,bhb_x, b_y, b_w, b_h(註:這是 YOLOv4/v5 常用的消除網格敏感度公式,v8 改用 Anchor-Free 但概念類似)

運作流程圖

YOLO 的核心精神就是「端對端 (End-to-End)」的預測。

Loading Diagram...

流程步驟詳解

  1. Input (輸入):將原始圖片丟入模型。
  2. Backbone (骨幹網路):強大的 CNN (如 CSPDarknet) 負責提取特徵,它能「看懂」圖片裡的線條與形狀。
  3. Grid (網格切分):邏輯上將圖片切分成 S×SS \times S 個格子。每個格子負責偵測「中心點」落在該格內的物件。
  4. Predict (預測):每個格子同時預測三件事:
    • Box:座標與大小 (x,y,w,hx, y, w, h)
    • Confidence:是不是物件的機率 (PcP_c)
    • Class:是什麼類別 (c1,c2,...c_1, c_2, ...)
  5. Raw Output (原始候選框):產生成千上萬個框。因為幾千個格子都在猜測,會有大量重疊與信心度低的框。
  6. NMS (非極大值抑制) 與 IoU:過濾的關鍵步驟,用來「去蕪存菁」。
    • IoU (Intersection over Union):衡量兩個框「重疊多少」。
IoU=Area of Overlap (交集面積)Area of Union (聯集面積)IoU = \frac{\text{Area of Overlap (交集面積)}}{\text{Area of Union (聯集面積)}}
  • 運作方式:選出信心度最高的框,如果其他同類別的框跟它重疊度極高 (IoU > 0.5),就刪除重複的框,直到每個物件只剩一個框。
  1. Output (最終結果):它將所有問題變成一個強大的數學回歸問題 (Regression Problem)

平行運算 (Parallel Grid Analysis)

  • 整張圖的所有網格是同時 (Simultaneously) 在運作的。
  • 負責「公車」的網格發現特徵,信心度飆高;負責「人」的網格也在同一時間發現人。
  • 這就是為什麼 YOLO 這麼快!它不用看完公車再看人,而是一眼全看。

3. 實戰:使用 YOLOv8 (Ultralytics)

現在最流行的版本是 YOLOv8 (由 Ultralytics 維護)。它封裝得非常好,甚至比 Scikit-Learn 還簡單。

安裝

pip install ultralytics opencv-python matplotlib

(注意:ultralytics 會自動安裝 PyTorch 環境)

程式碼實作

我們使用最輕量級的 yolov8n.pt (Nano版) 模型,它會自動從網路下載。

from ultralytics import YOLO

# 1. 載入模型
model = YOLO('yolov8n.pt')

# 2. 預測圖片 (支援 URL)
results = model('https://ultralytics.com/images/bus.jpg', save=True)

執行結果範例

下圖是我們執行的實際結果。YOLO 成功在圖片中偵測到了公車、多人以及一個不明顯的停車標誌,並精準地畫出了邊框。

YOLOv8 Detection Result

詳細偵測統計

  • Bus (公車):信心度 0.87 (非常確定)。
  • Person (人):偵測到 4 位,信心度分別為 0.87, 0.85, 0.83, 0.26。
  • Stop Sign (停車標誌):信心度 0.26 (雖然比較遠,但還是抓到了)。

關於 mAP 的補充: 在這個範例中,我們不會看到 mAP 分數。

  • mAP (mean Average Precision) 是需要標準答案 (Ground Truth) 才能計算的成績單。
  • 拿沒看過的圖進行 Inference 時,模型只能給出信心度 (Confidence)。若要算 mAP,需準備驗證集並執行 model.val()

4. 補充:AOI 瑕疵檢測與全景分割

YOLO vs 傳統 AOI (自動光學檢測)

製造業最常問:「產線該用傳統 AOI 還是 YOLO?」

特性傳統 AOIAI 物件偵測 (YOLO)
運作原理寫死規則。設定閥值、對比度、幾何匹配。學習特徵 (需客製化訓練)。收集瑕疵照透過 Fine-tuning 訓練出專屬模型。
優點精確度極高 (Pixel級)、速度極快、邏輯可解釋。適應性強。背景雜亂、光線變化、瑕疵形狀不固定都能抓。
缺點過殺率 (Overkill) 高。光線稍微一變就誤判。需要大量標註資料 (Labeling) 與 GPU 算力。
適用場景測量尺寸、檢查有無缺件 (環境固定)。表面刮痕、農產品分類、異物偵測 (變異大)。

全景分割

這是電腦視覺的終極任務之一,結合了以下兩者:

  • 語意分割 (Semantic Segmentation):只管「類別」,不管「個體」。(所有人都是紅色,所有草地都是綠色)。
  • 實例分割 (Instance Segmentation):只管「物件 (Things)」,不管「背景 (Stuff)」。(區分這個人、那個人)。
  • 全景分割 (Panoptic Segmentation)我全都要! 將影像中每個像素都賦予類別標籤與實例 ID。

5. 總結:電腦視覺的無所不在

從 Day 13 的 CNN 影像分類,到今天 YOLO 的即時物件偵測,我們見證了 AI 是如何真正「睜開眼睛」看懂這個世界的。 電腦視覺技術如今已經深深扎根在我們的生活中,常見的商業應用包括:

  • 智慧交通 (自動駕駛):即時偵測行人、車輛、紅綠燈與車道線 (極度依賴 YOLO 這類輕量極速模型)。
  • 智慧製造 (AOI):在產線上以毫秒級的速度找出產品外觀的微小瑕疵,取代人工目檢。
  • 智慧零售 (無人店):追蹤顧客拿取了哪些商品,實現「拿了就走」的結帳體驗。
  • 醫療影像 (輔助診斷):在 X 光或 MRI 影像中,精準定位出微小的腫瘤細胞 (常結合影像分割技術)。

透過 YOLO 這樣強大且開源的端對端模型,我們不再需要從零手刻複雜的特徵工程,而是能直接站在巨人的肩膀上,將 AI 落地到各種真實場景中。

下一關 (Day 29),我們將踏入「語音 AI」的領域! 我們不僅會教你機器是如何「聽懂」人話(語音辨識 Speech-to-Text),更會解密它是如何「說出」比人類還真實的聲音(語音合成 Text-to-Speech)。敬請期待這場聲音的魔術!