電腦視覺

YOLO(You Only Look Once,單次偵測)

/ YOH-loh /

YOLO——「You Only Look Once」(你只看一次)的縮寫——是一種為速度而生的目標偵測風格。R-CNN一族要分兩趟走(先提議區域,再分類),YOLO卻在對圖像的一瞥之間把整件事做完。它把畫面切成網格,然後對每一個網格單元同時預測:可能有什麼物體的中心落在這裡,以及圍住它們的框。一次前向處理,所有框一併輸出——名字就是這麼來的。

正是這種單次處理的設計,讓YOLO能夠即時運行,在普通硬體上每秒處理幾十幀影片。這使它成為一切「現場直播」類任務的首選:行車記錄器、無人機、體育追蹤、工廠生產線、手機應用。坦白說,代價就是經典的「速度對準確率」拉鋸戰。早期的YOLO版本明顯不如那些更慢的兩階段偵測器準確,尤其是面對又小又密集的物體時。後來的許多版本已大幅縮小了這個差距,但基本取捨依舊成立:當延遲最關鍵時,你才選YOLO。

有一點要分清楚:「YOLO」不是某一個固定的程式,而是多年來由不同團隊發布、不斷演化的一長串版本,每個版本都重新調過架構。所以「YOLO能達到某某準確率」這種說法,若不交代是哪個版本、在哪個數據集上、以什麼速度跑,就毫無意義。和視覺領域裡一貫的情況一樣,真實世界中的可靠性,極大地取決於你的場景是否像訓練數據。

一架無人機以每秒30幀的速度回傳影片。一個YOLO模型在每幀上大約20毫秒內跑完,隨著無人機飛行即時地在人和車輛周圍畫框——快到足以追蹤它們,而畫面看起來不會卡頓。

每幀只看一次,讓即時偵測成為可能——這正是單階段設計的全部用意。

速度來自架構,而非魔法:單次處理的偵測器沒法回頭重看它一眼掃過的區域。現代YOLO版本遠比初代準確,但「即時」永遠以某個特定的解析度和硬體為前提——為了保住幀率而降低解析度,小物體就更難抓到了。

又稱
You Only Look Oncesingle-stage detectorone-stage detector单阶段检测器單階段偵測器