目標檢測 YOLO v1-v5 全版本差異

YOLO: You Only Look Once. (But I have multiple versions)

Rice Yang
10 min readMay 17, 2021

YOLO (You Only Look Once)是目前輕量化目標檢測網路效果最好的結構之一,經過不同的更新與改進,現在已經到了第五個版本 (v5)。在面試時,如果你提及了自己正在使用 YOLO 進行一些工作,那麼面試官不免俗地大概會問你 YOLO 的原理是什麼?這個版本與上一版本的差異是什麼?

這篇文章把 YOLO 的原理與 v1 到 v5 的各版本差異與關鍵設計做了個統整性的整理,方便大家查詢。

Object Detection 效果圖。來源:Object detection — Wikipedia

YOLO 簡介

YOLO 是一種 Anchor-based One-Stage Object Detection 方法。輸入是一張圖,輸出會是 N 個 Bounding Box (x, y, w, h) +Label。(如上圖)

Object Detection 模型概述

對於固定大小的圖片輸入,Object Detection 方法輸出的 bounding box (以下簡稱為 bbox) 數量是固定的。圖片越大,輸出 bbox 數量就越多,但是模型裡面的 Weights 仍可以保持不變。雖然輸出的 bbox 數量很多,但是通常網路的輸出都會再經過 confidence 與 NMS (Non-Maximum Suppression) 做過濾/融合,因此只會最終顯示有意義的 bbox。

Anchor-based Detector

所有的 bbox 都是由少數幾個基準框 (稱為 Anchor) ,滑過圖片的每個區域,並且在每個區域對 Anchor 稍做縮放與拉伸所形成的。Anchor Box 在某些文章裡也被稱為 Prior Box,是同一件事情。

One-Stage Detector

對比於 Two-Stage Detector。在 Two-Stage 的網路結構中,feature map 會經過 RPN (Region Proposal Network) 單獨預測 bbox 的座標跟長寬,再連接原本的 feature map 做分類。

相反的,One-Stage Detector 省略了 RPN,直接從 feature map 回歸 bbox 與 label。與 Two-Stage 相比 ,One-Stage 減少了計算量,提升了速度,但是精度也會有一定程度的降低。

YOLO v1

YOLO v1 結構。來源:YOLO Paper

YOLO 的結構設計如上圖所示,是純粹經由 Conv+Maxpool+FC 的結構組成的。這種做法比較簡單,最後輸出 Feature map 的 Shape=[w, h, (b*5+c)],其中 w, h是 Feature Map 的長寬 (在上圖的例子中 w=b=7),b 是 bbox 的數量,5 代表 bbox 的編碼後的位置 (x, y)、長寬 (w, h)、信心度 (confidence),c 代表 bbox 的 Label 數量。

常見問題:YOLO 與 SSD 的差異?

SSD (Single Shot MultiBox Detector) 是另一種輕量化 Object Detection 結構,常常被拿來與 YOLO 做比較。最關鍵的差異如下圖所示,下面簡化兩具重點:

  • SSD: 各層 down-sampling 之前的特徵都會到透傳到最後的 FC 層,參與 bbox 檢測迴歸。這個設計提升了小物體的 Recall,因為淺層的網路具有更小的 Receptive Field
  • YOLO: 淺層的網路特徵不會傳到最後。這犧牲了小物體的檢測能力,但是速度會相比 SSD 較快。
YOLO 與 SSD 的差異。來源:SSD Paper

YOLO v2

YOLO v2 與 v1 的網路結構大致相同,但是加入了一些改進。整體的改進點與效果對比如下表。下面逐條說明改進點。

來源:YOLO v2 Paper
  • Batch Normalization (BN):每層之間加入了 BN 層,降低了 gradient 傳遞的難度。
  • High Resolution Classifier:v2 把 ImageNet 先做過一次 pretrain,然後再遷移到 Object Detection 的 dataset 裡面做訓練。
  • Convolutional With Anchor Boxes:雖說 v1 與 v2 都是 anchor-based 的方法,但是 v1 直接進入 FC 的設計相當於只有一個 1x1 的 anchor。v2 使用加入了其他長寬比的 anchor,提升了 7% 的 recall。
  • Dimension Clusters:使用 k-means 來自動計算應有的 anchor 數量與長寬比。
  • Direct location prediction:v2 設計了新的 bbox 座標編碼方式 (encoding)。相對於 v1 直接預測 bbox 座標與大小,v2 的做法更穩定。
  • Fine-Grained Features:具體可參考下圖,將淺層的特徵合併到深層做預測。與 SSD 的設計類似,這種做法可以增加小物體的recall。
Fine-Grained Features。來源:YOLO v2 物件偵測~論文整理 | by Leyan Bin Veon | 程式工作紡 | Medium
  • Multi-Scale Training:v2 在訓練過程中會不斷地更換輸入圖片的大小,讓網路能夠學到各種尺度的特徵。
  • Darknet-19:參考 VGG 的設計,提出新的 backbone 結構。

YOLO v3

v3 對比 v2 的改進點如下:

  • Bounding Box Prediction:在 bbox encoding 的過程上是一致的,但是在計算 bbox confidence 的 loss 公式稍有不同:v2 考慮了 IoU,但 v3 直接使用 logistic regression 預測 bbox 的信心度。
YOLO v3 Bounding Box encoding,σ 表示 sigmoid 函數,tx, ty, tw, th 是網路的原始預測值,bx, by, bw, bh 是輸出的 bbox。来源: YOLO v3 Paper
  • Class Prediction:v3 改用 Sigmoid 取代 Softmax 來做分類的輸出。這讓單個 bbox 可以對應多個 label,可以支援更複雜的 dataset。
  • Predictions Across Scales:v3 在 3 個不同大小的 Feature Map 上都加上了 prediction head。這提升 v3 對小物體的檢測 recall。
  • Anchor Boxes:v3 仍然使用 k-means 的方式產生 anchors,但 v3 對 3 個 prediction head 各自生成了 3 個 anchors,總共 9 個 anchors。
  • Darknet-53:加入了 ResNetresidual 設計,提出新的 backbone 結構。

v3 與其他方法的效果對比可參考下圖:

v3 的實驗結果。來源:YOLO v3 Paper

YOLO v4

YOLO v4 對於 Object Detector 的結構拆解。來源:YOLO v4 Paper

v4 與以往的 YOLO 差異較大,因為 v4 將 Object Detector 拆解成了不同的部分 (參考上圖),並做了一系列的對比實驗與修改,包括:backbone、數據擴增、activation 函數、loss 函數等等。

因此與其說 v4 與 v3 有甚麼差異,倒不如說 v4 與 v3 有甚麼相同的地方。

YOLO v4 與 v3 的相同點

  • Prediction head 的設計與 v3 相同。
  • Backbone 使用的是 CSPDarknet53,是 Darknet53 加入 CSP(Cross-Stage Paitial) 的變形系列。

YOLO v4 與 v3 的效果對比

YOLO v4 效果圖。來源:YOLO v4 Paper

YOLO v4 的改進

改動的地方真的太多了,我在這裡只列舉幾個:

  • Backbone:加入了 CSP,作用是把上層的部分 Channel 分成兩份,並複製其中一份到下層使用,是一種 DenseNet 的改進方案。CSP的設計如下圖。
CSP 的結構圖。來源:CSP Paper

Neck:YOLO v4 使用了 「PANet 的路徑聚合模塊 (path-aggregation)」 與 SPPNet 作為 Neck 的設計;在 v3 裡面並沒有 neck 這個部分。這裡簡單只用圖例大概說明這兩個設計的結構,細節大家可以參考論文。

SPPNet 與 PANet結構圖。來源:PANet Paper, SPPNet Paper
  • Data/Label:增加了馬賽克拼貼、CutMix的數據擴增方法,並使用 Smooth Label作為訓練輸入。
馬賽克拼貼數據擴增。來源:YOLO v4 Paper
  • Normalization:改進 CBN(Cross-Iteration Batch Normalization) 並應用到 YOLO v4 的結構中。CBNBN 的改進型,用來解決小 batch 時估計 feature map 的 mean/variance 不準確的問題。
CBN 圖例。來源:CBN Paper

YOLO v5

YOLO v5 目前沒有正式的論文出來,最原始的發布消息包括 Roboflow 與 Github。有趣的是作者一直在 GitHub 裡面說他要發 paper,但不知道是一直沒中還是怎麼樣,YOLO v5 成為 Yolo 系列中可能是唯一一篇沒有 paper 的工作。

在開發工具上,YOLO v5 使用了現在最流行的 pyTorch 來實作。從一些測試資料來看,v5 的優勢在於比 v4 更輕量化,並保持與 v4 相似的準確率。

YOLO v5 與 v4 的測試對比。來源:YOLOv5 PyTorch Object Detection Model (roboflow.com)

結語

YOLO 除了上述的五個版本之外,其實還有很多延伸的小版本 (ex: YOLO9000) 。如果花時間深入研究整個 YOLO 系列,可以學到很多的深度學習知識。

這篇文章的定位是協助大家準備面試,相當於重點筆記整理,因此就不深挖了。

--

--

Rice Yang

A Senior Engineer in AI. Experienced in NVIDIA, Alibaba, Pony.ai. Familiar with Deep Learning, Computer Vision, Software Engineering, Autonomous Driving