Object Detection : One-stage Detector YOLO

現有的目標檢測器主要分爲兩種類型:兩階段(two-stage)和單階段(one-stage)。這兩種檢測器的設計思想有很大的不同:兩階段檢測器主要將檢測問題歸結爲分類問題(classification),而單階段檢測器主要是將檢測問題定義爲迴歸問題(regression)。不僅如此,兩種檢測器在時間、性能上也有一定的差距。接下來我將會沿着單階段的主線,根據時間順序,進一步瞭解單階段檢測器的發展。

YOLO -> DenseBox -> SSD -> YOLO v2 -> Retina -> YOLO v3 -> CornerNet -> CenterNet -> AlignDet

You Only Look Once: Unified, Real-Time Object Detection

論文地址:1506.02640

1. YOLO的優缺點(Pros and Cons)

【從摘要(Abstract)和介紹(Introduction)】
在這裏插入圖片描述

  • 優點
    • 速度快(fast):採用迴歸思想,無需產生區域提議(proposals),是一個端到端的模型
    • 利用全局信息(global):輸入是整張圖片(entire image),而不是圖片其中的一部分(part)
    • 泛化能力(generalization):在非自然圖片(natual image)如藝術作品領域(artwork),檢測結果(results)較好
  • 缺點
    • 準確率不如兩階段檢測器(accuracy behind):體現在定位(localization)不夠準確,小目標(small object)檢測難
    • YOLO在檢測框的預測上有較強的空間限制(strong spatial constraints):一個網格單元預測兩個檢測框,並且一個網格單元內只能有一種類別預測。這導致模型缺乏對相鄰的多個目標檢測的能力,尤其是一大羣小目標(small objects that appear in groups)
    • YOLO對新的或者不尋常(new or unusual)的縱橫比、設置(configurations)的泛化能力較弱:因爲模型是從數據中學習如何預測檢測框,有一定的數據依賴性
    • 損失函數的設計有缺陷:對於大檢測框與小檢測框的錯誤一視同仁:對於某些小錯誤,在小檢測框會對IOU有很大的影響,在大檢測框上相對影響小一些。

2. YOLO的設計思想(Design)

YOLO 使用全圖特徵去預測檢測框(bounding boxes)及其類別(classes)。與兩階段檢測器的區域提議(region proposals)不同的是,YOLO不預先產生可能包含目標(objects)的區域(proposals),而是將一張圖片分割成S x S的網格(grid),每個網格單元(cell)都可能包含目標,換句話說,這些網格單元便是YOLO給出的可能包含目標的區域。對於每個網格單元,如果目標的中心(center)落在其中,該網格便負責對該目標進行檢測。
在這裏插入圖片描述
每個網格單元負責預測B個候選框及其對應的B個置信度(confidence scores), 此處置信度指網格單元包含目標及檢測框預測準確的置信度(原文鏈接1),定義爲Pr(Object)IOUpredtruthPr(Object)*IOU_{pred}^{truth}

當預測的檢測框(predicted boxes)中包含目標時,Pr(Object)=1Pr(Object)=1,即置信度等於預測檢測框與真實標註GT(ground truth)之間的IOU(intersection over union);當預測的檢測框中不包含目標時,Pr(Object)=0Pr(Object)=0,即置信度爲0.

原文鏈接1: These confidence scores reflect how confident the model is that the box contains an object and also how accurate it thinks the box is that it predicts.

每個檢測框包含五個預測值:x,y,w,h,confidencex, y, w, h, confidence。其中(x,y)(x, y)是該檢測框與負責它的網格單元邊界的相對座標(relative coordinates / offset),w,hw, h是該檢測框與原圖長寬的相對值,即x,y,w,hx,y,w,h都是在(0, 1)。confidenceconfidence是上文提到的置信度。

每個網格單元除了預測B個候選框,還預測C個類別條件概率(conditional class probabilities),定義爲Pr(ClassiObject)Pr(Class_i|Object)。需要注意的是,雖然每個網格單元預測B個候選框,但是隻預測一組C個類別的條件概率。

在測試階段,通過將類別條件概率與檢測框預測的置信度進行乘積可以得到每個檢測框的類別置信度(class-specific confidence scires),此處的置信度指該預測是該類及檢測框合適的置信度(原文鏈接2)

原文鏈接2: These scores encode both the probability of that class appearing in the box and how well the predicted box fits the object.

在PASCAL VOC數據集上,作者設置S = 7, B = 2,C = 20,所以最後YOLO輸出的預測結果是 7x7x(2x5+20) = 7x7x30。

2.1 網絡的設計

在這裏插入圖片描述
論文中提出了兩種版本:YOLO (45 FPS)與 Fast YOLO (155 FPS)

  • YOLO:24 layers + 2 FC
  • Fast YOLO: 9 layers + 2 FC (fewer filters)
    除了以上區別,訓練、測試的所有參數YOLO和Fast YOLO是一致的。

作者對模型的訓練模式:預訓練(pretrain) + 微調(finetune)

  • 預訓練:取Figure 3中的前20層+1 平均池化(average pooling)+1全連接層(fully connected layer)
  • 微調:取預訓練模型的前20層+4層卷積層(convolutional layers)+2 全連接層 (新添加的層是隨機初始化參數),有篇研究認爲這樣可以提升性能(詳見原文鏈接3)

原文鏈接3: Ren etal. show that adding both convolutional and connected layers to pretrained networks can improve performance.

因爲目標檢測任務需要更細粒度 (fine-grained)的視覺信息,所以作者將輸入的圖片尺寸從 224x224 增加到448x448。

對於激活函數(activation),YOLO最後一層(final layer)使用的是線性激活函數,其他層使用的是Leaky ReLU(leaky rectified linear activation)
ϕ(x)={x, if x>00.1x, otherwise  \phi(x)=\left\{\begin{array}{ll} {x,} & {\text { if } x>0} \\ {0.1 x,} & {\text { otherwise }} \end{array}\right.

對於損失函數(loss fucntion),YOLO使用易於優化的平方和誤差(sum square error, SSE)。不過需要考慮的是:

  • 賦予定位誤差(localization error)和分類誤差(classification error)以不同的權重
  • 增加包含目標的預測檢測框座標的損失(coordination prediction loss),減少不包含目標的預測檢測框置信度的損失:網格單元大多數不包含目標,這些單元預測的置信度爲0,對模型的學習不會產生太大的幫助,即無效梯度(原文鏈接4),會導致模型的不穩定(instablity)。
  • 大檢測框(large boxes)與小檢測框(small boxes)的預測損失應當不一致:在小檢測框裏的小改變(small deviation)應當比大檢測框裏的小改變更重要(原文鏈接5)

原文鏈接4: Also, 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 cell that do contain objects. This can lead to model instability, causing training to diverge early on.
原文鏈接5: Our error metric should reflect that small deviations in large boxes matter less than in small boxes. To partially address this we predict the square root of the bounding box width and height instead of the width and height directly.

作者通過引入兩個參數來解決優化時遇到的前兩個問題:λcoord=5,λnoobj=0.5\lambda_{coord}=5,\lambda_{noobj}=0.5,通過預測檢測框長寬的平方根來進一步減少第三個問題對模型訓練的影響 (partially address),即並沒完全解決這個問題。

回到訓練時預測的檢測框,YOLO規定每個網格單元產生的B個檢測框中與標註(GT)之間的IOU最大的檢測框,將負責該目標的檢測。這樣做的好處是可以使得檢測框的預測更加專業(specialization),能夠更好的預測特定大小(size),特定縱橫比(aspect ratio),特定類別(class)的目標,從而提升召回率(原文鏈接6)。

原文鏈接6: We assign one predictor to be responsible for each object. We assign one predictor to be “responsible” for predicting an object based on which prediction has the highest current IOU with the ground truth. This leads to specialization between the bounding box predictors. Each predictor gets better at predicting certain sizes, aspect ratio, or classes of objects, improving overall recall.

所以,最終優化的損失函數如下:
在這裏插入圖片描述

2.2 訓練細節

  • 數據集: Pascal VOC 2007 + 2012 train set && val set
  • 迭代週期(epochs): 135 epochs
  • 學習率(learning rate schedule) : 在第一個epoch,學習率從10310^{-3}緩緩提升到10210^{-2},然後以10210^{-2}再訓練74個epochs,接着用10310^{-3}訓練30個epochs,最後用10410^{-4}訓練30個epochs,一共135個epochs。一開始如果以較高的學習率可能會導致模型因爲不穩定的梯度(unstable gradient)出現偏離(diverges),所以在第一個epoch設置了學習率的熱身(warm-up)。
  • 批大小(batch size):135
  • 動量(momentum):0.9
  • 權重衰減(weight decay):0.0005
  • dropout層放在第一個全連接層之後,用於避免層間協同適應(co-adaptation)
  • 數據增強(data augmentation):(1)隨機尺度(random scales) 和 平移(translation),平移的最大距離是原圖片尺寸的20%;(2)通過HSV顏色空間(color space)隨機調整曝光值(exposure)和飽和度(saturation),最大調整比例爲1.5

2.3 預測細節

在Pascal VOC上,YOLO對於一張圖片預測98 (7x7x2) 個檢測框,併爲每個檢測框產生一組類別概率 (訓練中是給每個網格單元生成一組類別概率而不是爲每個檢測框產生一組)

對於一些大目標(large objects)或者靠近(near)多個網格單元邊界(border)的目標會被多個網格單元定位(localize),從而產生重疊的檢測(multiple detections)。作者採用非極大值抑制(Non-maximal supression, NMS)的方法去解決這個問題,可以提升(adds) 2~3% mAP。

3. 實驗部分

  • 與其他實時(real-time)、接近實時(less than real-time)檢測器的對比:

YOLO是當時實時檢測器中性能最好的,甚至Fast YOLO的性能是其他實時檢測器的兩倍。但是與兩階段檢測器相比,還是有些許性能的差距。
在這裏插入圖片描述

  • VOC 2007 錯誤分析(error analysis)

論文中定義了五類錯誤:

Correct: correct class && IOU >.5
Localization: correct class && .1 < IOU < .5
Similar: class is similar, IOU > .1
Other: class is wrong, IOU > .1
Background: IOU < .1 for any object

從下圖不難發現,YOLO在定位上(localization)上遜色於Fast R-CNN,但在假陽性(False Positive,FP)樣本上的錯誤更少,這意味着YOLO將背景類識別成目標的比例要低於Fast R-CNN。
在這裏插入圖片描述

  • 結合Fast R-CNN 和 YOLO

從上文的VOC 2007 錯誤分析,不難發現Fast R-CNN與YOLO可以進行優勢互補。分別訓練兩個模型進行預測,對於二者預測相似的檢測框,根據YOLO給出的概率(probability)和兩個檢測框的交疊(overlap)對預測進行改進(boost)。也就是將兩個模型的結果進行融合(combination),在速度上並沒有什麼增益。
在這裏插入圖片描述

  • Pascal VOC 2012的結果
    在這裏插入圖片描述
  • 泛化性:藝術作品中人物檢測

藝術作品(artwork)與自然圖片(natural image)在像素層面上(pixel level)上有很大的不同,但在目標的大小(size)和形狀(shape)方面相似,這也是YOLO爲何能做出預測的可能解釋。
在這裏插入圖片描述

4. 總結

YOLO是非常經典的單階段檢測器,首先它採用迴歸思想實現端到端訓練的目標檢測器,大大減少了模型的訓練時間;其次,通過全圖的特徵去預測檢測框和類別,而不去產生區域提議,大大提升了模型的檢測速度。


下面推薦一篇解析YOLO不錯的文章:
目標檢測|YOLO原理與實現


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章