YOLOv3沒(méi)有太多的創(chuàng)新,主要是借鑒一些好的方案融合到Y(jié)OLO里面。不過(guò)效果還是不錯(cuò)的,在保持速度優(yōu)勢(shì)的前提下,提升了預(yù)測(cè)精度,尤其是加強(qiáng)了對(duì)小物體的識(shí)別能力。
YOLO3主要的改進(jìn)有:
- 調(diào)整了網(wǎng)絡(luò)結(jié)構(gòu);
- 利用多尺度特征進(jìn)行對(duì)象檢測(cè);
- 對(duì)象分類用Logistic取代了softmax。
一、Backbone: darknet-53
為了達(dá)到更好的分類效果,作者自己設(shè)計(jì)訓(xùn)練了darknet-53。作者在ImageNet上實(shí)驗(yàn)發(fā)現(xiàn)這個(gè)darknet-53,的確很強(qiáng),相對(duì)于ResNet-152和ResNet-101,darknet-53不僅在分類精度上差不多,計(jì)算速度還比ResNet-152和ResNet-101強(qiáng)多了,網(wǎng)絡(luò)層數(shù)也比他們少。比較結(jié)果如下表所示,

darknet-53的網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示,YOLOv3使用了darknet-53的前52層卷積結(jié)構(gòu),去掉了全連接層,因此YOLOv3是個(gè)全卷積網(wǎng)絡(luò)。

darknet-53網(wǎng)絡(luò)的特點(diǎn):
- 使用了大量殘差的跳層連接,即表中的Residual塊;
- darknet-53為了降低池化帶來(lái)的梯度負(fù)面效果,作者直接摒棄了Pooling,作者使用步長(zhǎng)為2的卷積來(lái)進(jìn)行下采樣,即上圖中紅色橢圓的5次下采樣操作。
二、利用多尺度特征進(jìn)行對(duì)象檢測(cè)
YOLOv3采用了類似FPN的思想,在多個(gè)不同尺度上進(jìn)行對(duì)象檢測(cè)。

YOLO2曾采用passthrough結(jié)構(gòu)來(lái)檢測(cè)細(xì)粒度特征,在YOLO3更進(jìn)一步采用了3個(gè)不同尺度的特征圖來(lái)進(jìn)行對(duì)象檢測(cè)。
結(jié)合上圖看,卷積網(wǎng)絡(luò)在79層后,經(jīng)過(guò)下方幾個(gè)黃色的卷積層得到一種尺度的檢測(cè)結(jié)果。相比輸入圖像,這里用于檢測(cè)的特征圖有32倍的下采樣。比如輸入是416 * 416的話,這里的特征圖就是13 * 13了。由于下采樣倍數(shù)高,這里特征圖的感受野比較大,因此適合檢測(cè)圖像中尺寸比較大的對(duì)象。
為了實(shí)現(xiàn)細(xì)粒度的檢測(cè),第79層的特征圖又開(kāi)始作上采樣(從79層往右開(kāi)始上采樣卷積),然后與第61層特征圖融合(Concatenation),這樣得到第91層較細(xì)粒度的特征圖,同樣經(jīng)過(guò)幾個(gè)卷積層后得到相對(duì)輸入圖像16倍下采樣的特征圖。它具有中等尺度的感受野,適合檢測(cè)中等尺度的對(duì)象。
最后,第91層特征圖再次上采樣,并與第36層特征圖融合(Concatenation),最后得到相對(duì)輸入圖像8倍下采樣的特征圖。它的感受野最小,適合檢測(cè)小尺寸的對(duì)象。
9種尺度的先驗(yàn)框
隨著輸出的特征圖的數(shù)量和尺度的變化,先驗(yàn)框的尺寸也需要相應(yīng)的調(diào)整。YOLO2已經(jīng)開(kāi)始采用K-means聚類得到先驗(yàn)框的尺寸,YOLO3延續(xù)了這種方法,為每種下采樣尺度設(shè)定3種先驗(yàn)框,總共聚類出9種尺寸的先驗(yàn)框。
在COCO數(shù)據(jù)集這9個(gè)先驗(yàn)框是:(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。
- 最小的13 * 13特征圖上(有最大的感受野)應(yīng)用較大的先驗(yàn)框(116x90),(156x198),(373x326),適合檢測(cè)較大的對(duì)象;
- 中等的26 * 26特征圖上(中等感受野)應(yīng)用中等的先驗(yàn)框(30x61),(62x45),(59x119),適合檢測(cè)中等大小的對(duì)象;
- 較大的52 * 52特征圖上(較小的感受野)應(yīng)用較小的先驗(yàn)框(10x13),(16x30),(33x23),適合檢測(cè)較小的對(duì)象。

感受一下9種先驗(yàn)框的尺寸,下圖中藍(lán)色框?yàn)榫垲惖玫降南闰?yàn)框。黃色框式ground truth,紅框是對(duì)象中心點(diǎn)所在的網(wǎng)格。

這里注意bounding box 與anchor box的區(qū)別:
Bounding box它輸出的是框的位置(中心坐標(biāo)與寬高),confidence以及N個(gè)類別。
anchor box只是一個(gè)尺度即只有寬高。
輸入映射到輸出

不考慮神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)細(xì)節(jié)的話,總的來(lái)說(shuō),對(duì)于一個(gè)輸入圖像,YOLO3將其映射到3個(gè)尺度的輸出張量,代表圖像各個(gè)位置存在各種對(duì)象的概率。
我們看一下YOLO3共進(jìn)行了多少個(gè)預(yù)測(cè)。對(duì)于一個(gè)416 * 416的輸入圖像,在每個(gè)尺度的特征圖的每個(gè)網(wǎng)格設(shè)置3個(gè)先驗(yàn)框,總共有 13 * 13 * 3 + 26 * 26 * 3 + 52 * 52 * 3 = 10647 個(gè)預(yù)測(cè)。每一個(gè)預(yù)測(cè)是一個(gè)(4+1+80)=85維向量,這個(gè)85維向量包含邊框坐標(biāo)(4個(gè)數(shù)值),邊框置信度(1個(gè)數(shù)值),對(duì)象類別的概率(對(duì)于COCO數(shù)據(jù)集,有80種對(duì)象)。
對(duì)比一下,YOLO2采用13 * 13 * 5 = 845個(gè)預(yù)測(cè),YOLO3的嘗試預(yù)測(cè)邊框數(shù)量增加了10多倍,而且是在不同分辨率上進(jìn)行,所以mAP以及對(duì)小物體的檢測(cè)效果有一定的提升。
三、對(duì)象分類softmax改成logistic
預(yù)測(cè)對(duì)象類別時(shí)不使用softmax,改成使用logistic的輸出進(jìn)行預(yù)測(cè)。這樣能夠支持多標(biāo)簽對(duì)象(比如一個(gè)人有Woman 和 Person兩個(gè)標(biāo)簽)。
四、YOLOv3的整體網(wǎng)絡(luò)結(jié)構(gòu)
這張圖很好的總結(jié)了YOLOV3的結(jié)構(gòu),讓我們對(duì)YOLO有更加直觀的理解。

- 橙色塊DBL:是指代碼中的卷積+BN+Leaky relu;
- 綠色的resn:n代表數(shù)字,有res1,res2, … ,res8等等,表示這個(gè)res_block里含有多少個(gè)res_unit;
-
紅色的res unit:表示YOLOv3中的殘差結(jié)構(gòu);其中的前一個(gè)DBL是1x1卷積,后一個(gè)DBL是3x3卷積;
- 黃色梯形concat:張量拼接。將darknet中間層和后面的某一層的上采樣進(jìn)行拼接。拼接的操作和殘差層add的操作是不一樣的,拼接會(huì)擴(kuò)充張量的維度,而add只是直接相加不會(huì)導(dǎo)致張量維度的改變。




