---
# System prepended metadata

title: YOLOv2 (2016)
tags: [Object detection]

---

# YOLOv2 (2016)
YOLOv2 共提出了 8 種改進策略來提升 YOLOv1 模型的 Precision 和 Recall，從而提高 mAP，YOLOv2 的改進策略如下圖所示：
![](https://i.imgur.com/7cYbtEV.png)
## 1. Batch Normalization (63.4% to 65.8%)
在每個卷積層後面加 batch normalization，這樣就不需要加 dropout 層了，使用後，YOLOv2 的 mAP 提升了 2.4%。

## 2. High Resolution Classifier (65.8% to 69.5%)
YOLO 訓練分為兩個階段，用 224×224 的圖片訓練分類器，再將圖片的解析度提高至 448×448 用來訓練物件偵測，但是直接切換解析度，偵測模型可能難以快速適應高解析度。因此 YOLOv2 在訓練分類器時的最後 10 個 epoch 中使用 448×448 的解析度來訓練分類器，這可以使得模型在偵測資料集上 finetune 之前已經適用高解析度輸入。

## 3. Convolutional With Anchor Boxes (69.5% to 69.2%)
由於各個圖片中存在不同尺度和長寬比（scales and ratios）的物體，YOLOv1 在訓練過程中學習適應不同物體的形狀是比較困難的，這也導致 YOLOv1 在精確定位方面表現較差。所以 YOLOv2 使用 anchor boxes 來預測邊界框。例如，我們可以使用 9 個 anchor boxes，這樣在 YOLOv1 的情况下，原本的 98 (7x7x2) 個框就變成了 441 個（7x7x9）。

![](https://i.imgur.com/4viGyhh.png)

同時為了使偵測所用的特徵圖解析度更高，移除其中一個 pool 層，因此 downsampling 的步長由 64 變為 32，但原本影像的尺寸為 448x448 (448/32=14)，這樣一來會導致物體的中心點落在 4 個 cell 中，不方便分配，因此作者把影像的尺寸改成了 416x416 (416/32=13)，中心點只有一個。

![](https://i.imgur.com/80y5TF9.png)

使用 Anchor Boxes 使得 mAP 從 69.5% 減少到 69.2%，但是 Recall 從 81% 提高到 88%。也就是說，即使準確率略有降低，但是它增加了偵測到所有 ground truth 物體的機率。

## 4. New Network: Darknet-19 (69.2% to 69.6%)
YOLOv2 採用了一個新的基礎模型（特徵提取器），稱為 Darknet-19，包括 19 個卷積層和 5 個 maxpooling 層，如下圖所示。Darknet-19 與 VGG16 模型設計原則是一致的，主要採用 3x3 卷積，採用 2x2 的 maxpooling 層之後，特徵圖維度降低2倍，而同時將特徵圖的 channles 增加兩倍。與 NIN (Network in Network) 類似， Darknet-19 最終採用 global avgpooling 做預測，並且在 3x3 卷積之間使用 1x1 卷積來壓縮特徵圖 channles 以降低模型計算量和引數。Darknet-19 每個卷積層後面同樣使用了 batch norm 層以加快收斂速度，降低模型過擬合。

![](https://i.imgur.com/B88eetU.png)

在 ImageNet 分類資料集上，Darknet-19 的 top-1 準確度為 72.9%，top-5 準確度為 91.2%，但是模型參數相對少一些。使用 Darknet-19 之後，YOLOv2 的 mAP 值沒有顯著提升，但是計算量卻可以減少約 33%。

## 5. Dimension Clusters
之前說使用固定 9 個 anchor boxes 來幫助我們預測 Bbox，而這 9 個 anchor boxes 是 Faster R-CNN 手工精心挑選的，未必是最好的。但作者認為可以靠 K-means 從訓練集中聚類得到更好的 anchor boxes (prior boxes) 。 因為設定 prior boxes 的主要目的是為了使得 Bbox 與 ground truth 的 IoU 更好，所以聚類分析時選用 box 與聚類中心 box 之間的 IoU 值作為距離指標：

$$𝑑(𝑏𝑜𝑥, 𝑐𝑒𝑛𝑡𝑟𝑜𝑖𝑑)=1−𝐼o𝑈(𝑏𝑜𝑥, 𝑐𝑒𝑛𝑡𝑟𝑜𝑖𝑑)$$

下圖為在 VOC 和 COCO 資料集上的聚類分析結果，隨著聚類中心數目的增加，平均 IOU 值是增加的，但是綜合考慮模型複雜度和 Recall，作者最終選取 5 個聚類中心作為 anchor box (prior box)

![](https://i.imgur.com/JV3dabF.png)

兩種方法選取的 Anchors boxes

![](https://i.imgur.com/vonUHmU.png)

和使用手工挑選的 anchor boxes 相比，使用 K-means 得到的 anchor boxes 表現更好。使用 5 個 K-means 得到的 anchor boxes 的效能（IOU 61.0）和使用 9 個手工挑選的 anchor boxes 的效能（IOU 60.9）相當。這意味著使用 k-means 獲取 anchor boxes 來預測 Bbox 能讓模型更容易學習。

![](https://i.imgur.com/9wP3YBw.png)

## 6. Direct location prediction (69.6% to 74.4%)
我們對 anchors 的偏移量 (offsets) 進行預測，他預測了 5 個參數 $(t_x, t_y, t_w, t_h, t_o)$，為了將邊界框中心點約束在當前 cell 中，使用了 $\sigma(x)$ 函式處理偏移值，使其在 $(0, 1)$ 範圍之間 (每個 cell 的尺度看做 1)

![](https://i.imgur.com/0Dyow7L.png)

下圖為視覺化。藍框為預測的 boundary box，虛線矩形為 anchor box

![](https://i.imgur.com/Xo0boL4.png)

對於類別機率的預測，在 YOLOv1 中是 1 個 cell 共享一組機率，而在 YOLOv2 中 是每個 Bbox 預測一組機率。

![](https://i.imgur.com/t6uYETR.png)

使用 Dimension Clusters 得到 prior boxes ，並用 prior boxes 預測 offsets 使得 YOLOv2 的mAP 值提升了 4.8%。

## 7. Fine-Grained Features (74.4% to 75.4%)
YOLOv2 的輸入圖片大小為 416x416，經過 5 次 maxpooling 之後得到 13x13 大小的特徵圖，並以此特徵圖採用卷積做預測。13x13 大小的特徵圖對檢測大物體是足夠了，但是對於小物體還需要更精細的特徵圖（Fine-Grained Features）。YOLOv2 提出了一種 passthrough 層來利用更精細的特徵圖，passthrough 層與 ResNet 網路的 shortcut 類似，以前面更高解析度的特徵圖為輸入，然後將其連線到後面的低解析度特徵圖上。對於 26x26x512 的特徵圖經 passthrough 層處理後就變成了 13x13x2048 的新特徵圖，然後再連接原始的 13x13x1024 的特徵圖，變成 13x13x3072 的特徵圖，最後在此特徵圖基礎上卷積做預測。
![](https://i.imgur.com/VZIBKPE.png)

使用 Fine-Grained Features 之後 YOLOv2 的 mAP 值提升了 1%。

## 8. Multi-Scale Training (75.4% to 78.6%)
由於 YOLOv2 模型中只有卷積層和池化層，所以 YOLOv2 的輸入可以不限於 416x416 大小的圖片。為了增強模型的強健性，YOLOv2 採用了多尺度輸入訓練策略，具體來說就是在訓練過程中每間隔一定的 iterations 之後改變模型的輸入圖片大小。
由於 YOLOv2 的 downsampling 總步長為 32，所以輸入圖片大小選擇一系列為 32 倍數的值：{320, 352, …, 608}，每隔 10 個 iterations 隨機選擇一種圖片大小，由於模型看過不同的圖片大小，這會使得模型可以勝任不同圖片大小的偵測任務。

![](https://i.imgur.com/ywCfMcs.png)

在測試時，YOLOv2 採用不同大小的圖片作為輸入，在 VOC 2007 資料集上的效果如下圖所示。可以看到採用低解析度 (288x288) 輸入時，mAP 值較低，但是速度更快，而採用高解析度 (544x544) 輸入時，mAP 值更高，但是速度略有下降。

![](https://i.imgur.com/Pj8SmBj.png)

對於使用 416x416 的解析度時 mAP 為 76.8%，而使用較高解析度 544x544 時 mAP 高達 78.6%，提升了 3.2%。

## performance

![](https://i.imgur.com/KBzFkJO.png)

###### tags: `Object detection`