# 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提出的算法已經是非常新穎的了。