Real-Time Object Detection-YOLO V1筆記

YOLO之前的Object Detection方法主要是通過Region Proposal產生大量的Bounding Box,再用Classifier判斷每個Bounding Box是否包含Object,以及Object所屬類別的Probability。

YOLO提出了一種新的Object Detection方法,它將Object Detection作為一個空間分離的Bounding Box和對應Class Probability的Regression問題來處理。YOLO使用單個神經網絡直接從整幅圖像預測Bounding Box和Class Probability,也正因為整個檢測過程是單個神經網絡組成的,所以YOLO可以直接端到端的優化物體檢測表現。

YOLO物體檢測方法的速度非常快,Base版本可以達到45幀/秒,Fast YOLO版本可以在保證mAP達到其它實時檢測系統2倍情況下,檢測頻率仍然達到155幀/秒。相對於其它state-of-the-art的檢測方法,YOLO產生更多的Localization Error,但在背景中預測出不存在的物體的情況會比較少。同時,YOLO學習到General的Object Representation,因為相對於其它物體檢測方法(如DPM和R-CNN),YOLO從Natural Images泛化到其它領域(如Artwork)的表現更好。

Real-Time Object Detection-YOLO V1筆記

1.Introduction

人類看一眼圖像,就會立刻知道圖像中有哪些物體,它們在哪裡,以及它們是如何相互作用的。人類的視覺系統快速、準確,允許我們執行諸如駕駛車輛等複雜的任務。快速精確的Object Detection算法能夠向人類用戶傳遞實時的場景信息,並釋放通用的響應式機器人系統的潛力。

當前目標檢測系統主要使用分類器的方法做目標檢測。為了檢測物體,這些系統使用目標分類器在測試圖像的不同位置和不同尺度上進行目標檢測和評估。比如Deformable Parts Models(DPM)系統使用滑動窗口方法,使用分類器在整副圖像上均勻進行目標查找。

最近的R-CNN系統使用Region Proposal的方法,首先對圖像生成潛在的Proposed Bounding Box,然後在Proposed Bounding Box上運行分類器,分類後,使用post-processing來refine bounding box,消除重複檢測,並根據場景中的其他物體重新評估Boxes的得分。由於每個單獨的模塊都需要獨立訓練,所以這種組合Pipeline不僅速度慢,而且優化難度非常大。

YOLO將Object Detection重新定義為直接從圖像像素到Bounding Box座標和Class Probability的Regression問題。使用YOLO系統,只需查看一次圖像,就可以預測存在哪些對象以及它們在哪裡。

與滑動窗口技術和基於Region Proposal的技術不同,YOLO在訓練和測試時對整幅圖像進行處理,因而可以隱含的對分類的上下文信息和物體的外表進行編碼,所以在物體檢測時,有更好的全局性。在頂級的檢測方法Fast RCNN中由於不能看到更大的上下文信息,因而會把背景誤識別為物體,YOLO可以背景的的誤識別率降低一半。

YOLO的泛化能力也遠超DPM和RCNN,所以當把YOLO模型應用於新的領域或者遇到預期之外的輸入時,它也能很好的進行處理。

YOLO的不足在於它的精度仍低於目前state-of-the-art的檢測系統,並且對於小物體的檢測定位效果不佳。

2.Unified Detection

YOLO使用整幅圖像作為輸入,同時預測物體的Bounding Box和Class,把Object Detection過程統一為單個神經網絡的統一過程。YOLO的這種設計使得它在保持很高AP的情況下,仍然可以進行端到端的Training和達到實時的檢測速度。

Confidence Score

YOLO系統將輸入圖像分成S x S的網格,如果Object的中心落在哪個網格中,該網格就負責檢測該Object。每個網格預測B個Bounding Box和對應的Confidence Score。

Real-Time Object Detection-YOLO V1筆記

Confidence Score反映了: 1) Bounding Box是否包含Object,即多大程度上確信Bounding Box包含了Object;2) Bounding Box對自身座標預測精度的評估。如果一個網格中沒有Object存在,它的Confidence Score應該為0;反之,Confidence Score的值等於Predicted Box和Ground Truth的IOU。

Real-Time Object Detection-YOLO V1筆記

Coordinate

每個Bounding Box包含5個預測值:x,y,w,h和confidence。(x,y)表示Box的中心點座標(相對於網格邊界);w,h時Bounding Box的寬度和高度(相對於整個圖像);Confidence表示Predicted Box和Ground Truth Box的IOU。

如下圖所示,圖像的大小為448 x 448,Grid Cell的大小為149 x 149;待檢測的Object的寬度為224,高度為143,中心點為(220,190);與待檢測的Object的IOU最大的Grid Cell的左上角座標為(149, 149)。

x=(Object中心點x座標 - Grid Cell左上角x座標)/Grid Cell的寬度

= (220-149)/149 = 0.48

y=(Object中心點y座標 - Grid Cell左上角y座標)/Grid Cell的高度

= (190-149)/149 = 0.28

w=Object的寬度 / 圖像的寬度 = 224 / 448 = 0.5

h=Object的高度 / 圖像的高度 = 143 / 448 = 0.32

Real-Time Object Detection-YOLO V1筆記

Classification

每個網格還要預測C個條件分類概率 Pr(class_i|object) ,不管每個網格預測多少個Bounding Box,YOLO只預測一組分類概率。

在測試階段,將每個網格的conditional class probabilities與每個bounding box的 confidence相乘:

Real-Time Object Detection-YOLO V1筆記

上述乘積既反映了預測bounding box中class的 probability信息,也反映了預測bounding box是否含有Object和bounding box座標的準確度。

在PASCAL VOC數據集上測試YOLO時, 我們設置S = 7, B = 2,PASCAL VOC包含20個標籤分類,因此C = 20。最終的預測結果是一個7 × 7 × (2 * 5 + 20) = 7 x 7 x 30的tensor.

Real-Time Object Detection-YOLO V1筆記

2.1. Network Design

YOLO網絡架構受到GoogleNet的啟發,但是未使用Inception Module,而是使用1x1 reduction layer + 3x3 convolutional layers替代。完整的網絡結構如下圖所示,它包含24個卷積層+2個全連接層。

Real-Time Object Detection-YOLO V1筆記

2.2 Loss函數

YOLO的Loss函數使得coordinate(x,y,w,h),confidence,classification三方面達到很好的平衡。 由於均方和(sum-squared error)誤差更容易優化,所以YOLO模型把均方和(sum-squared error)誤差作為優化目標。

Real-Time Object Detection-YOLO V1筆記

1_{i}^{obj} 表示第i個Cell是否包含Object; 1_{ij}^{obj} 判斷第i個Cell的第j個Bounding Box是否負責預測該Object,與Object的GoundTruth的IOU最大的Bounding Box負責預測該Object。

損失函數中的Coordinate部分

Real-Time Object Detection-YOLO V1筆記

Coordinate採用(x,y,w,h)的均方誤差來衡量Loss。預測的Bounding Box的寬(w)和高(h)的絕對偏差並不能衡量預測的準確度,比如同樣的偏差,小的Bounding Box受到的影響比大的Bounding Box要大,為了緩和這個問題,作者採用width和height的平方根替代width和height計算均方誤差。

如下圖所示,對相同的

Real-Time Object Detection-YOLO V1筆記

w的值越大,

Real-Time Object Detection-YOLO V1筆記

的差值變化越小。

Real-Time Object Detection-YOLO V1筆記

損失函數中的Confidence部分

Real-Time Object Detection-YOLO V1筆記

Confidence誤差也採用均方差的形式。在Object Detection過程中,不包含Object的Grid Cell往往比包含Object的Grid Cell要多很多,使得它們的Confidence Loss的貢獻要大於包含Object的Grid Cell,為了解決這個問題,降低不包含Object的Grid Cell的的影響,設置兩個權重常數:

Real-Time Object Detection-YOLO V1筆記

原文中描述如下:

in every image many grid cells do not contain any object. This pushes the “confidence” scores of those cells towards zero, often overpowering the gradient from cells that do contain objects. This can lead to model instability, causing training to diverge early on.

損失函數中的Classification部分

Real-Time Object Detection-YOLO V1筆記

YOLO中每個Grid Cell都會生成多個Bounding Box,但是不是每個Bounding Box都會預測一個Classification,而是每個Grid Cell對應一個Classification,這也是YOLO對於稠密小物體檢測效果差的原因所在。

2.3 Trainning細節

我們在PASCAL VOC 2007 and 2012數據集上訓練了135個Epochs,Training Batch Size=64,momentum=0.9,decay=0.0005。訓練過程中Learning Rate的設置如下:第一個Epoch將Learning Rate從 10^{-3} 緩慢增加到 10^{-2} ,之所以要這麼做,是因為如果一開始就設置一個很高的Learning Rate,我們的模型就會因為不穩定的梯度導致模型不收斂。然後使用Learning Rate= 10^{-2} 訓練75個Epoch,使用Learning Rate= 10^{-3} 訓練30個Epoch,使用Learning Rate= 10^{-4} 訓練30個Epoch。

為了避免過擬合,我們使用了Dropout和Extensive Data Augmentation;Dropout Rate=0.5;對20%的原始圖像進行隨機的縮放和平移,還隨機調整圖像的曝光和飽和度(在HSV顏色空間中最多調整1.5倍)以實現Data Augmentation。

實驗顯示在預訓練的神經網絡上增加捲積層和全連接層可以提升神經網絡的表現。所以我們首先在ImageNet 1000-Class數據集上預訓上圖中的前20層卷積層 + Average-Pooling Layer + Fully Connected Layer,在經過一週的訓練後,在ImageNet 2012驗證集上得到了88%的準確率。然後在預訓練的神經網絡基礎上增加4個卷積層和2個隨機初始化權重的全連接層。Detection需要豐富的視覺信息,所以我們將網絡的輸入分辨率從224 x 224 增加到 448 x 448。

神經網絡最後一層使用線性激活函數,其它層使用如下的Leaky rectified線性激活函數。

Real-Time Object Detection-YOLO V1筆記

2.4 Inference

YOLO的Grid Cell的設計消除了空間預測的多樣性,大多數情況下,Object落在哪個Grid Cell中都是非常明確的,因此一個Object都會只生成一個Bounding Box。但是對於比較大的Objects或者落在多個網格邊界處的Object,多個Grid Cell都能產生不錯的預測結果,因此需要採用非最大值抑制(NMS,Non-maximal suppression)解決重複預測的問題。

與R-CNN 或者 DPM不同,NMS對於YOLO不是關鍵流程,可以將YOLO的mAP提升2%~3%。

2.5 Limitations of YOLO

1、YOLO每個Grid Cell只預測兩個Bounding Box,並且只能有一個Class,這種空間約束限制了YOLO模型預測成群出現的小物體(如鳥群)的能力。

2、由於YOLO模型從大量數據中學習邊界框預測,所以它對沒有見過的Object或者不常見姿勢或者形態的Object的泛化能力不強。

3、YOLO使用Loss函數衡量模型表現,Loss函數處理小Bounding Box和大Bounding Box的誤差處理邏輯相同,但實際上,Large Box上的小誤差通常不會有實質性的影響,但是Small Box的小誤差往往會對IOU的計算有更大的影響。YOLO的主要錯誤來源就是定位錯誤。

3 Experiments

Real-Time Object Detection-YOLO V1筆記

Fast YOLO是目前已知的在PASCAL數據集上最快的Object方法,同時52.7%的mAP是其它實時檢測系統的2倍以上。YOLO在保持實時表現的同時,mAP達到了63.4%。

Real-Time Object Detection-YOLO V1筆記

Error Analysis: Fast R-CNN vs. YOLO

YOLO的Localization Error超過其它來源的Error之和;Fast RCNN的Localization Error較少,但是Background Error較大,是YOLO的Background Error的3倍之多。

Real-Time Object Detection-YOLO V1筆記

Model combination experiments on VOC 2007

既然YOLO可以對Background Error的處理效果很好,因此將YOLO和Fast R-CNN結合起來,可以很好的彌補Fast RCNN的短板。實驗顯示,Fast RCNN在VOC 2007測試數據集上的mAP最高達到了71.8%,結合YOLO之後,mAP提升3.2%到75%;Fast RCNN與其它模型結合帶來的提升則非常有限。

Real-Time Object Detection-YOLO V1筆記

Generalization results on Picasso and People-Art

用於Object Detection的Academic Dataset的訓練集和測試集都服從相同的分佈。在實際應用中,這種情況是很少見的。為了對比YOLO和其它Detection System的泛化能力,我們在Picasso Dataset和People-Art Dataset對Person Detection做了對比測試,試驗證明,YOLO的泛化能力要遠超其它Detection System。

Real-Time Object Detection-YOLO V1筆記

Qualitative Results


更多文章見微信公眾號: 「半杯茶的小酒杯」



分享到:


相關文章: