---
# System prepended metadata

title: YOLO 論文閱讀
tags: [Object Detection, YOLO]

---

# YOLO 論文閱讀
paper: https://arxiv.org/pdf/1506.02640.pdf

## Introduction
![](https://i.imgur.com/c8Da8mk.jpg)

YOLO論文中提出一framework，將物件偵測視為一迴歸問題，而輸出包含bounding box+confidence及class probability。與[Scalable Object Detection using Deep Neural Networks](https://arxiv.org/pdf/1312.2249.pdf)文中不同的是YOLO加入了是哪種物件的可能性，而非在使用另一個分類模型進行分類，因此YOLO為一end-to-end的架構。雖然YOLO在準確度略低於Mask RCNN等RCNN演算法，但其在inference的速度遠高於RCNN類型的演算法。

## Unified Detection
![](https://i.imgur.com/VgA5bcy.jpg =400x260)
YOLO演算法是將輸入影像分成SxS的網格，而每個網格中會預測B個bounding box與其信心值，當物件的中心在某個網格中時，則由該網格的bounding box對其進行預測。另一方面，每個網格都會預測這個網格是C個物件類別的可能性，因此模型最後的輸出為：$S*S*(B*5+C)$，而在PASCAL VOC的任務中設置$S=7$, $B=2$, $C=20$最後張量為$7*7*30$。

### Network Design
YOLO使用的模型架構是參考GoogleNet，但是將inception modules 改為使用1x1的reduction layer連接3x3的convolution layer，而最後兩層則連接全連接層，最後的Output tensor依然為$7*7*30$，而在模型中，除了最後一層使用linear activation function外，其餘層都採用leaky ReLU(negative slope=0.1)。
![](https://i.imgur.com/xgwRVZx.jpg)

### Training
在正式訓練前論文中提到先將前20層convolutional layers接上Average pooling及fully connected layer在ImageNet 1000-class (224x224)上做預訓練，之後保留前20層再接上4層convolutional layers及兩層全連接層並隨機初始化這6層的參數後才進行物件偵測的訓練，並在訓練中將輸入影像的解析度提升至448x448。

* YOLO的Objective function 如下：

| Loss | 意義 |
| ------------- | ------------- |
| ![](https://i.imgur.com/oj3Wy5q.png =360x70)| Bnd Box的中心點座標 |
|![](https://i.imgur.com/hWoC7bW.png =440x70)|Bnd Box的寬高|
|![](https://i.imgur.com/8iIWu3H.png =250x70)|第i個cell的第j個有物件的預測框的信心值|
|![](https://i.imgur.com/yRgkF3B.png =300x70)|第i個cell的第j個無物件的預測框的信心值|
|![](https://i.imgur.com/KIuuXz9.png =300x70)|第i個cell的物件類別|

文中採用sum-squared error計真實值與預測值間的loss，而除了Bnd Box是先開根號在相減外其他都是直接相減，主要是因為在訓練時對於小尺寸的預測的偏移容忍度較小，因此開根號是為了消除大小尺寸的差異，另外，因為大多數的網格中的預測框都是沒有物件的，在訓練時其信心值會趨於0導致訓練不穩定，因此論文中將$λcoord$設為5而$λnoobj$設為0.5，以減少這些無物件預測框對訓練的影響。

### Inference
網路最後會輸出98個預測框，而篩選預測框的方式使用NMS(文中僅提到使用NMS會提高3%mAP，也不確定閥值設多少)，最後留下來的預測框在與class probability map結合輸出結果。

### Limitation of YOLO
因為YOLO在每個網格中僅會預測2個Bnd Box且僅來自7x7的網格中，因此相較於SSD演算法(multiple feature maps for detection)，尺寸較小的物件會比較不容易被偵測到。

## Experiments
文中以PASCAL VOC 2007比較了YOLO 與Faster RCNN等其他演算法的差異，結果顯示YOLO在速度方面真的可以做到real time等級(Fast YOLO可以達到155FPS)，以當時的背景來說，不過準確度卻還是沒辦法超越Faster RCNN(YOLO僅有63.4mAP)，不過這項缺點也在SSD演算法推出，及YOLOv2參考SSD的輸出部分後大幅改善。
![](https://i.imgur.com/FOMoGmV.png)

## Conclusions
YOLO在當時的時空背景下是可以達到real time等級的演算法，相比於其他舊時代的演算法其準確率也可以維持得很高，而YOLO也為目前物件偵測演算法奠定了非常重要的基礎，雖然YOLO在經過幾代改版後除了作者換了幾輪，算法也已經跟最原始的算法相差甚遠，不過在當時YOLO提出的算法已經是非常新穎的了。
