電腦視覺 - 影像追蹤:車流量計算

電腦視覺 - 影像追蹤:車流量計算

YOLO 能精準抓出車輛位置,但它卻無法知道「這台車是不是剛剛那一台」。本篇將帶你認識多目標追蹤 (MOT) 技術,透過賦予 AI「記憶」,實作車流量統計與軌跡追蹤!


在前幾天的文章中,我們見識了 YOLO (物件偵測) 驚人的速度與準確度。YOLO 可以在極短的時間內,在一張照片中框出所有的車輛。

然而,如果我們想把 YOLO 裝在高速公路的監視器上,用來計算今天的車流量,會發生什麼事?

答案是:大災難! 因為 YOLO 是「沒有記憶」的。對 YOLO 來說,影片只是一張張獨立的照片。同一台車在第一秒被框出來,在第二秒又被框出來,YOLO 會把它當成「兩台不同的車」。如果直接用 YOLO 來計數,一台車開過畫面可能會被重複計算幾十次。

為了解決這個問題,我們需要進入電腦視覺的下一個境界:物件追蹤 (Object Tracking)


一、 什麼是多目標追蹤 (MOT) 與其發展史?

MOT (Multiple Object Tracking,多目標追蹤) 的核心目標,就是為影片中每一個被偵測到的物件,賦予一個獨一無二的 身分證 (ID),並且在接下來的每一幀畫面中,持續追蹤這個 ID 的軌跡。

這讓 AI 從只能回答「畫面中有幾台車」,進化到能回答車輛的行駛軌跡、停留時間,以及精準的跨線計數

要讓 AI 擁有這份「記憶」,追蹤演算法經歷了幾次重要的技術演進,以下是產業界最經典的三大里程碑:

  1. SORT (2016 年): 全名是 Simple Online and Realtime Tracking。它是早期最優雅的解決方案,完美結合了「卡爾曼濾波 (預測位置)」與「匈牙利演算法 (配對框框)」。速度極快,奠定了現代追蹤演算法的基礎。但它有個致命傷:只要車子被樹木稍微遮擋一下,再次出現時就會被當成「新車」而重新發配 ID(這稱為 ID Switch)。
  2. DeepSORT (2017 年): 為了解決 SORT 遇到遮擋就失憶的問題,科學家在架構中加入了「深度學習外觀特徵擷取 (Re-ID)」。現在 AI 不只比對車子的位置,還會比對「車子的長相」。就算車子被大卡車擋住兩秒,再次出現時系統也能認出它的外觀,成功找回原來的 ID。它至今仍是極度經典的業界標準。
  3. ByteTrack / BoT-SORT (2021-2022 年起): 這是現代追蹤演算法的霸主。傳統演算法為了怕雜訊,通常會直接丟棄那些「信心度很低」的偵測框(例如被擋住一半的車)。但 ByteTrack 打破了這個慣例,將低信心度的框也撿回來進行二次匹配,大幅降低了物件被遮擋時的追蹤斷層。配合現在超強的 YOLOv8/v10 模型,效能與準確度都達到了極致。

二、 實戰解析:車流量計數的差異

我們用 Python 與 OpenCV 寫了一支模擬程式,來視覺化「單純物件偵測」與「加上物件追蹤」在車流量計算場景下的巨大差異:

多目標追蹤與車流量計算

1. 左圖:純物件偵測 (如 YOLO)

  • 特徵:每個綠色框框只標示了 Car 99%
  • 痛點:AI 根本不知道畫面中上面的車和下面的車,到底是不是同一台。如果我們在地上畫一條線,當車子壓在線上時,每一幀 (Frame) YOLO 都會回報「線上有車」,導致計數器瘋狂暴增。

2. 右圖:物件追蹤 (如 DeepSORT / ByteTrack)

  • 賦予記憶 (ID):現在,上面的車被標記為 ID: 104,下面的車是 ID: 102
  • 軌跡記錄 (Trajectory):黃色與紫色的點線,完美記錄了這兩台車過去幾秒鐘的行駛路徑。
  • 精準計數 (Counting):我們在畫面中間畫了一條紅色的 「虛擬計數線 (Counting Line)」。因為系統知道 ID: 102 的軌跡是「從線的上方移動到下方」,所以系統可以非常篤定地判定它「已經越線」,並讓左上角的計數器完美地加 1,絕對不會重複計算!

三、 追蹤演算法是怎麼運作的?

要讓電腦具備「記憶」,目前的業界主流(如 DeepSORT 或 ByteTrack)通常採用 「Tracking-by-Detection (先偵測後追蹤)」 的策略,背後依賴兩大數學法寶:

  1. 卡爾曼濾波 (Kalman Filter)「預測」。 當系統在上一秒看到 ID: 102 以時速 60 公里往下開,卡爾曼濾波會用物理運動學,預測出「下一秒這台車應該會出現在哪裡」。
  2. 匈牙利演算法 (Hungarian Algorithm)「配對」。 下一秒鐘,YOLO 又抓到了一個新的車輛框。系統會計算「YOLO 新抓到的框」跟「卡爾曼濾波預測的框」的重疊程度 (IOU)。如果兩者完美吻合,系統就會判定:「啊!這個新框框就是剛剛的 ID: 102!」,從而將軌跡連線起來。

四、 總結

  1. YOLO 沒有記憶,追蹤才有 ID:如果你的專案只需要知道「有沒有人闖入」,用 YOLO (偵測) 就夠了;但如果需要計算「今天店裡來了多少客人」,你就必須加上 MOT (追蹤) 演算法。
  2. 主流框架:目前工業界最常跟 YOLO 搭配的追蹤演算法是 ByteTrackBoT-SORT,它們輕量、極速、且追蹤穩定度非常高。
  3. 商業價值極大:有了 ID 與軌跡,我們不僅能做車流統計,還能做超商客流熱區圖 (Heatmap)、球賽中球員的跑動距離分析,大大擴展了電腦視覺的商業應用場景!