1. 程式人生 > >YOLO文章詳細解讀

YOLO文章詳細解讀

文章《You Only Look Once: Unified, Real-Time Object Detection》提出方法下面簡稱YOLO。

目前,基於深度學習演算法的一系列目標檢測演算法大致可以分為兩大流派:
1.兩步走(two-stage)演算法:先產生候選區域然後再進行CNN分類(RCNN系列),
2.一步走(one-stage)演算法:直接對輸入影象應用演算法並輸出類別和相應的定位(YOLO系列)

之前的R-CNN系列雖然準確率比較高,但是即使是發展到Faster R-CNN,檢測一張圖片如下圖所示也要7fps(原文為5fps),為了使得檢測的工作能夠用到實時的場景中,提出了YOLO。
這裡寫圖片描述

YOLO的檢測思想不同於R-CNN系列的思想,它將目標檢測作為迴歸任務來解決。
下面來看看YOLO的整體結構:
這裡寫圖片描述
這裡寫圖片描述

由上兩圖所示,網路是根據GoogLeNet改進的,輸入圖片為448*448大小,輸出為 7 × 7 ×

( 2 × 5 + 20 ) ,現在看來這樣寫輸出維度很奇怪,下面來看一下輸出是怎麼定義的。

將圖片分為 S

× S 個單元格(原文中S=7),之後的輸出是以單元格為單位進行的:
1.如果一個object的中心落在某個單元格上,那麼這個單元格負責預測這個物體。
2.每個單元格需要預測B個bbox值(bbox值包括座標和寬高,原文中B=2),同時為每個bbox值預測一個置信度(confidence scores)。也就是每個單元格需要預測B×(4+1)個值。
3.每個單元格需要預測C(物體種類個數,原文C=20,這個與使用的資料庫有關)個條件概率值.
所以,最後網路的輸出維度為 S × S × ( B × 5 + C ) ,這裡雖然每個單元格負責預測一種物體(這也是這篇文章的問題,當有小物體時可能會有問題),但是每個單元格可以預測多個bbox值(這裡可以認為有多個不同形狀的bbox,為了更準確的定位出物體,如下圖所示)。
這裡寫圖片描述

因為這裡是當作迴歸問題來解決的,所以所有的輸出包括座標和寬高最好都定義在0到1之間。網上看見一張比較詳細的圖如下。

來看一下每個單元格預測的B個(x,y,w,h,confidence)的向量和C的條件概率中,每個引數的含義(假設圖片寬為{w_i}高為{hi},將圖片分為 S × S ):
1.(x,y)是bbox的中心相對於單元格的offset
對於下圖中藍色框的那個單元格(座標為 ( x c o l = 1 , y r o w = 4 ) ),假設它預測的輸出是紅色框的bbox,設bbox的中心座標為 ( x c , y c ) ,那麼最終預測出來的(x,y)是經過歸一化處理的,表示的是中心相對於單元格的offset,計算公式如下:
x = x c w i S x c o l , y = y c h i S y r o w

2.(w,h)是bbox相對於整個圖片的比例
預測的bbox的寬高為 w b , h b ,(w,h)表示的是bbox的是相對於整張圖片的佔比,計算公式如下:
w = w b w i , h = h b h i

3.confidence
這個置信度是由兩部分組成,一是格子內是否有目標,二是bbox的準確度。定義置信度為 P r ( O b j e c t ) I O U p r e d t r u t h
這裡,如果格子內有物體,則 P r ( O b j e c t ) = 1 ,此時置信度等於IoU。如果格子內沒有物體,則 P r ( O b j e c t ) = 0 ,此時置信度為0

4.C類的條件概率
條件概率定義為 P r ( C l a s s i | O b j e c t ) ,表示該單元格存在物體且屬於第i類的概率。

在測試的時候每個單元格預測最終輸出的概率定義為,如下兩圖所示(兩幅圖不一樣,代表一個框會輸出B列概率值)
P r ( C l a s s i | O b j e c t ) P r ( O b j e c t ) I O U p r e d t r u t h = P r ( C l a s s i ) I O U p r e d t r u t h



最後將 ( S × S ) × B × 20 列的結果送入NMS,最後即可得到最終的輸出框結果

最後來看一下訓練YOLO使用的損失函式定義(本想自己用latex打的,後來有個符號一直打不出來,使用網友的圖如下)

這裡強調兩點:
1.每個圖片的每個單元格不一定都包含object,如果沒有object,那麼confidence就會變成0,這樣在優化模型的時候可能會讓梯度跨越太大,模型不穩定跑飛了。為了平衡這一點,在損失函式中,設定兩個引數 λ c o r r d λ n o o b j ,其中