YOLO論文精簡提煉筆記

人類在觀察一張圖像時,對於圖像中的物體通常可以秒辨認並定位,完全不用太多的思考。因此目標檢測的要求不僅要準,而且要快。而在YOLO出現之前,RCNN系列是目標檢測中最精準的算法,雖然faster rcnn比最初始的RCNN快了很多,但其速度也只有7fps。究其原因是RCNN系列將 Proposal 的選取和選定 Proposal 後的分類和迴歸分作兩個stage,就算用 RPN 網絡取代 selective search,仍然是兩個stage,因此導致了檢測的緩慢。

YOLO算是one stage的開山之作,雖然精度不及當時的Faster RCNN,但他的檢測速度達到Faster RCNN的6-7倍,此外還有更小更快的網絡 Fast YOLO,速度更是達到了Faster RCNN 的22倍。而精度方面,YOLO 的 mAP 雖不及 Faster RCNN,但相差的可以接受。

one stage意味着候選框的選定,分類和迴歸都是在一個CNN中,實現了端到端的訓練。
在這裏插入圖片描述
如上圖所示,YOLO將一張自然圖像分割爲7*7的grid cell,每一個grid負責預測兩個bounding box,每一個bounding box對應五個值:x, y, w, h和置信度。其中 (x, y) 表示bounding box 的座標中心相對於所處的grid cell的左上角的偏置; (w, h)表示候選框的長和寬與整個圖像長和寬的比值,這樣座標和長寬四個參數都可以做到歸一化(歸一化的目的是爲了防止計算loss時數值較大的參數產生的梯度覆蓋掉較小參數的影響);置信度表示該bbox中包含目標物體的信任度,可以用 Pr(Object)IOUpredtruthPr(Object)*IOU_{pred}^{truth} 來計算,第一項表示bbox中包含物體的可能性,如果候選框中沒有任何物體,那麼他的值爲0,整個置信度也爲0;如果有物體,那麼置信度就和bbox和GT的IOU相等。

一個grid cell除了預測兩個bbox,還需要預測這裏麪包含的物體類別,原文中採用PASCAL VOC數據集,因此總共20個類別。值得注意的是,一個grid cell只做一次類別預測,儘管裏面有兩個bbox,但相當於這兩個bbox預測某一類物體,這裏其實也是YOLO的一個不足之處。這裏可能會疑惑,既然預測同一類物體,爲何要用兩個box,一個不就夠了嗎?我的想法是,這相當於讓兩個人去做同一項任務,這兩個之間必然有一個做的更好,用在這裏應該也是一樣的,在兩個框中取IOU或置信度更高的那個。

此外還有一個 20 維的類別向量。訓練階段只需要判斷物體的中心是否在box中,如果在的話給這一維度的值打上 1 的標籤即可;而在測試階段,需要在這個預測值的基礎上乘置信度,對應論文中的 Pr(ClassiObject)Pr(Object)IOUpredtruthPr(Class_{i}|Object)Pr(Object)*IOU_{pred}^{truth},前一項是預測的每個類別的概率,後兩項乘積爲置信度,這是爲了防止Pr(ClassiObject)Pr(Class_{i}|Object)很大,而置信度接近 0 的情況,這種情況也不能認定bbox中有那個預測概率很大的物體。

因此整個網絡的輸出爲77(25+20)=77307*7*(2*5+20)=7*7*30。網絡的模型結構如下:
在這裏插入圖片描述
網絡模型受到GoogleNet啓發,不過並沒有用Inception模塊,而是用111*1後接333*3卷積的操作以減少模型參數,最後一層採用線性激活函數,其他層採用Leaky Relu。

模型輸入爲448448448*448的三通道圖像,經歷了若干卷積池化層以後,得到的輸出爲77307*7*30的向量,與上文相對應。

整個模型訓練時的損失函數如下:
在這裏插入圖片描述
其中λcoord\lambda_{coord}λnoobj\lambda_{noobj}是爲了平衡數量級用的調節參數,如果不加這個參數,可能導致有些項的數值和梯度太大,覆蓋了其他較小項的影響;1ijobj1_{ij}^{obj}表示的是第i個cell的第j個bbox包不包括物體,如果包括則該值爲1,需要考慮座標、置信度和類別的因素;如果不包括,則該值爲0,而1ijnoobj1_{ij}^{noobj}爲1,這時只需要考慮第四行的置信度項即可。

還有一點是爲什麼這裏的w和h都帶根號?這是因爲對於較大的框,些許的座標誤差影響不是太大;而較小的框更加敏感,些許的誤差帶來的影響可能會比較大。我的理解是,加上根號相當於自身是一個二階導不斷減小的增函數,因此在w和h較大的部分的平均變化率要更小。舉個例子現在有兩個預測box對應的的w1,w2w_{1},w_{2},其中w1<w2w_{1}<w_{2},所以第一個box的敏感程度更高,假設這兩個box都對應一個GT,GT的寬度表示爲w(w剛好等於二分之一的w1+w2w_{1}+w_{2}),那此時w1w|\sqrt w_{1}-\sqrt w|w2w|\sqrt w_{2}-\sqrt w|更大,loss懲罰在小候選框上更加嚴厲。

我們發現,損失函數的每一項都是L2 Loss,並且對於分類問題也是如此,因此YOLO將分類問題轉化爲了迴歸問題。

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