YOLO v3論文詳解

YOLOv3: An Incremental Improvement

聲明:筆者翻譯論文僅爲學習研究,如有侵權請聯繫作者刪除博文,謝謝
源論文地址:https://pjreddie.com/media/files/papers/YOLOv3.pdf
:文字中標粗和亮色的部分爲筆者認爲有創新改進餘地和需要注意的地方,斜體部分爲筆者的一些想法,因水平所限,部分筆觸可能有不實和錯誤之處,敬請廣大讀者批評指正,讓我們一起進步~

YOLO V1 | YOLO V2的論文詳解見:YOLO V1 | YOLO V2

源論文翻譯比較好的兩個博客:
https://blog.csdn.net/sinat_35907936/article/details/90447297
https://www.cnblogs.com/wj-1314/p/9744146.html

因爲原論文中部分討論與技術無關的話題,且創新點和技術分佈較爲零散。故集中整理如下:

YOLO v3 相對 v2 主要的改進有:調整了網絡結構;利用多尺度特徵進行對象檢測;對象分類用Logistic取代了softmax。

新的網絡結構Darknet-53

       在基本的圖像特徵提取方面,YOLO v3採用了稱之爲Darknet-53的網絡結構(含有53個卷積層),它借鑑了殘差網絡residual network的做法,在一些層之間設置了快捷鏈路(shortcut connections)。
 圖1 Darknet-53
        上圖的Darknet-53網絡採用256×256×3作爲輸入,最左側那一列的1、2、8等數字表示多少個重複的殘差組件。每個殘差組件有兩個卷積層和一個快捷鏈路,示意圖如下:
在這裏插入圖片描述

利用多尺度特徵進行對象檢測

在這裏插入圖片描述
       YOLO2曾採用passthrough結構來檢測細粒度特徵,在YOLO3更進一步採用了3個不同尺度的特徵圖來進行對象檢測
       結合上圖看,卷積網絡在79層後,經過下方几個黃色的卷積層得到一種尺度的檢測結果。相比輸入圖像,這裏用於檢測的特徵圖有32倍的下采樣。比如輸入是416416的話,這裏的特徵圖就是1313了。由於下采樣倍數高,這裏特徵圖的感受野比較大,因此適合檢測圖像中尺寸比較大的對象。
       爲了實現細粒度的檢測,第79層的特徵圖又開始作上採樣(從79層往右開始上採樣卷積),然後與第61層特徵圖融合(Concatenation),這樣得到第91層較細粒度的特徵圖,同樣經過幾個卷積層後得到相對輸入圖像16倍下采樣的特徵圖。它具有中等尺度的感受野,適合檢測中等尺度的對象。
       最後,第91層特徵圖再次上採樣,並與第36層特徵圖融合(Concatenation),最後得到相對輸入圖像8倍下采樣的特徵圖。它的感受野最小,適合檢測小尺寸的對象。

9種尺度的先驗框

       隨着輸出的特徵圖的數量和尺度的變化,先驗框的尺寸也需要相應的調整。YOLO2已經開始採用K-means聚類得到先驗框的尺寸,YOLO3延續了這種方法,爲每種下采樣尺度設定3種先驗框,總共聚類出9種尺寸的先驗框。在COCO數據集這9個先驗框是:(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。
       分配上,在最小的1313特徵圖上(有最大的感受野)應用較大的先驗框(116x90),(156x198),(373x326),適合檢測較大的對象。中等的2626特徵圖上(中等感受野)應用中等的先驗框(30x61),(62x45),(59x119),適合檢測中等大小的對象。較大的52*52特徵圖上(較小的感受野)應用較小的先驗框(10x13),(16x30),(33x23),適合檢測較小的對象。
在這裏插入圖片描述       感受一下9種先驗框的尺寸,下圖中藍色框爲聚類得到的先驗框。黃色框式ground truth,紅框是對象中心點所在的網格。
在這裏插入圖片描述

對象分類softmax改成logistic

       預測對象類別時不使用softmax,改成使用logistic的輸出進行預測。這樣能夠支持多標籤對象(比如一個人有Woman 和 Person兩個標籤)

輸入映射到輸出結構圖

在這裏插入圖片描述
       不考慮神經網絡結構細節的話,總的來說,對於一個輸入圖像,YOLO3將其映射到3個尺度的輸出張量,代表圖像各個位置存在各種對象的概率。
       我們看一下YOLO3共進行了多少個預測。對於一個416×416的輸入圖像,在每個尺度的特徵圖的每個網格設置3個先驗框,總共有 13×13×3 + 26×26×3 + 52×52×3 = 10647 個預測。每一個預測是一個(4+1+80)=85維向量,這個85維向量包含邊框座標(4個數值),邊框置信度(1個數值),對象類別的概率(對於COCO數據集,有80種對象)。
       對比一下,YOLO2採用13×13×5 = 845個預測,YOLO3的嘗試預測邊框數量增加了10多倍,而且是在不同分辨率上進行,所以mAP以及對小物體的檢測效果有一定的提升。

小結

       YOLO3借鑑了殘差網絡結構,形成更深的網絡層次,以及多尺度檢測,提升了mAP及小物體檢測效果。如果採用COCO mAP50做評估指標(不是太介意預測框的準確性的話),YOLO3的表現相當驚人,如下圖所示,在精確度相當的情況下,YOLOv3的速度是其它模型的3、4倍。
在這裏插入圖片描述       不過如果要求更精準的預測邊框,採用COCO AP做評估標準的話,YOLO3在精確率上的表現就弱了一些。如下圖所示。
在這裏插入圖片描述

最後,作者也做了些“失敗”的嘗試:

       我們在實現YOLOv3的過程中嘗試了很多東西,但是很多都失敗了,以下是我們還記得的一些失敗的嘗試。
       “錨點框”x,y偏移預測。**我們嘗試使用常見的“錨點框”機制,通過使用線性激活將x,y的偏移預測爲邊框寬度或高度的倍數。但我們發現這種做法降低了模型的穩定性而且效果不佳。
       線性x,y預測而不是邏輯預測。我們嘗試使用線性激活來直接預測x,y的偏移,而不是使用邏輯激活。這降低了mAP成績。
       focal loss。我們嘗試使用focal loss,但它大概喫掉了我們2個點的mAP。 這可能是因爲具有單獨的對象預測和條件類別預測的YOLOv3對於focal loss試圖解決的問題已經具有相當的魯棒性。是對於大多數例子,類別預測沒有損失?還是其他什麼原因?我們並不完全確定。
       雙IOU閾值和真值分配。在訓練期間,Faster- R-CNN用了兩個IOU閾值,如果預測的邊框與標註邊框的重合度不低於0.7,那判定它爲正樣本。如果在0.3-0.7之間,則忽略。如果低於0.3,就判定它爲負樣本。我們也嘗試了這種方法,但最終的效果並不好。
       我們非常喜愛我們現在的模型,它至少已經是目前的最佳狀態。上述的有些技術可能會使我們的模型更好,但我們可能還需要對他們做一些調整。

PS:如果你有多餘的時間,請一定讀一下YOLO v3這篇有趣的原論文,你就會發現,在我們還在矇頭學技術而焦頭爛額的時候,大神們早已經在思考技術存在的意義了…

參考文章:
這個博主建議關注一手,文章質量都很高~本文的大多數圖片和部分文字借鑑與此 :https://zhuanlan.zhihu.com/p/49556105
這裏有YOLO v3的代碼loss函數:https://www.jianshu.com/p/da153a395a3c

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