YOLOv3沒有太多的創新,主要是借鑒一些好的方案融合到YOLO里面。不過效果還是不錯的,在保持速度優勢的前提下,提升了預測精度,尤其是加強了對小物體的識別能力。
本文主要講v3的改進,由於是以v1和v2為基礎,關於YOLO1和YOLO2的部分析請移步YOLO v1深入理解 和 YOLOv2 / YOLO9000 深入理解。
YOLO3主要的改進有:調整了網絡結構;利用多尺度特征進行對象檢測;對象分類用Logistic取代了softmax。
新的網絡結構Darknet-53
在基本的圖像特征提取方面,YOLO3采用了稱之為Darknet-53的網絡結構(含有53個卷積層),它借鑒了殘差網絡residual network的做法,在一些層之間設置了快捷鏈路(shortcut connections)。

上圖的Darknet-53網絡采用256*256*3作為輸入,最左側那一列的1、2、8等數字表示多少個重復的殘差組件。每個殘差組件有兩個卷積層和一個快捷鏈路,示意圖如下:

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

YOLO2曾采用passthrough結構來檢測細粒度特征,在YOLO3更進一步采用了3個不同尺度的特征圖來進行對象檢測。
結合上圖看,卷積網絡在79層后,經過下方幾個黃色的卷積層得到一種尺度的檢測結果。相比輸入圖像,這里用於檢測的特征圖有32倍的下采樣。比如輸入是416*416的話,這里的特征圖就是13*13了。由於下采樣倍數高,這里特征圖的感受野比較大,因此適合檢測圖像中尺寸比較大的對象。
為了實現細粒度的檢測,第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)。
分配上,在最小的13*13特征圖上(有最大的感受野)應用較大的先驗框(116x90),(156x198),(373x326),適合檢測較大的對象。中等的26*26特征圖上(中等感受野)應用中等的先驗框(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在精確率上的表現就弱了一些。如下圖所示。

參考
[1]YOLOv3: An Incremental Improvement
[2]Deep Residual Learning for Image Recognition
[3]What’s new in YOLO v3?
[4]How to implement a YOLO (v3) object detector from scratch in PyTorch
作者:X豬
鏈接:https://www.jianshu.com/p/d13ae1055302
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。