YOLO3主要的改進有:調整了網絡結構;利用多尺度特征進行對象檢測;對象分類用Logistic取代了softmax。
1.Darknet-53 network
在論文中雖然有給網絡的圖,但我還是簡單說一下。這個網絡主要是由一系列的1x1和3x3的卷積層組成(每個卷積層后都會跟一個BN層和一個LeakyReLU)層,作者說因為網絡中有53個convolutional layers,所以叫做Darknet-53(我數了下,作者說的53包括了全連接層但不包括Residual層)。下圖就是Darknet-53的結構圖,在右側標注了一些信息方便理解。(卷積的strides默認為(1,1),padding默認為same,當strides為(2,2)時padding為valid)
看完上圖應該就能自己搭建出Darknet-53的網絡結構了,上圖是以輸入圖像256 x 256進行預訓練來進行介紹的,常用的尺寸是416 x 416,都是32的倍數。下面我們再來分析下YOLOv3的特征提取器,看看究竟是在哪幾層Features上做的預測。


整個v3結構里面,是沒有池化層和全連接層的。前向傳播過程中,張量的尺寸變換是通過改變卷積核的步長來實現的,比如stride=(2, 2),這就等於將圖像邊長縮小了一半(即面積縮小到原來的1/4)。在yolo_v2中,要經歷5次縮小,會將特征圖縮小到原輸入尺寸的1/32。輸入為416x416,則輸出為13x13(416/32=13)。
yolo_v3也和v2一樣,backbone都會將輸出特征圖縮小到輸入的1/32。所以,通常都要求輸入圖片是32的倍數。
yolo_v3並沒有那么追求速度,而是在保證實時性(fps>60)的基礎上追求performance。不過還有一個tiny-darknet作為backbone可以替代darknet-53,在官方代碼里用一行代碼就可以實現切換backbone。搭用tiny-darknet的yolo,也就是tiny-yolo在輕量和高速兩個特點上,顯然是state of the art級別。
2.利用多尺度特征進行對象檢測
結合上圖看,卷積網絡在79層后,經過下方幾個黃色的卷積層得到一種尺度的檢測結果。相比輸入圖像,這里用於檢測的特征圖有32倍的下采樣。比如輸入是416*416的話,這里的特征圖就是13*13了。由於下采樣倍數高,這里特征圖的感受野比較大,因此適合檢測圖像中尺寸比較大的對象。
為了實現細粒度的檢測,第79層的特征圖又開始作上采樣(從79層往右開始上采樣卷積),然后與第61層特征圖融合(Concatenation),這樣得到第91層較細粒度的特征圖,同樣經過幾個卷積層后得到相對輸入圖像16倍下采樣的特征圖。它具有中等尺度的感受野,適合檢測中等尺度的對象。
最后,第91層特征圖再次上采樣,並與第36層特征圖融合(Concatenation),最后得到相對輸入圖像8倍下采樣的特征圖。它的感受野最小,適合檢測小尺寸的對象。
隨着輸出的特征圖的數量和尺度的變化,先驗框的尺寸也需要相應的調整。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的輸出進行預測。這樣能夠支持多標簽對象(比如一個人有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以及對小物體的檢測效果有一定的提升。
