前言
本文是yolo系列算法文章的第三篇,也是目前為止yolo系列算法的最終篇。從原理上看,yolov3并沒(méi)有實(shí)質(zhì)性的創(chuàng )新,主要是借鑒了一些時(shí)下state-of-the-art模型的優(yōu)秀思想。本文重點(diǎn)講解yolov3在v1和v2基礎上做的改進(jìn),因此對yolov1和v2的原理還不太熟悉的小伙伴可以先看一下前面的兩篇文章:yolo系列算法一和yolo系列算法二。
相較于v1和v2,yolov3的改進(jìn)主要包括三點(diǎn):新的backbone基礎網(wǎng)絡(luò );多尺度預測;損失函數的調整。
backbone基礎網(wǎng)絡(luò )
為了改進(jìn)模型效果,作者提出了一個(gè)新的基礎網(wǎng)絡(luò )darknet-53進(jìn)行特征提取,該網(wǎng)絡(luò )在darknet-19的基礎上進(jìn)一步擴充了網(wǎng)絡(luò )深度,包括有53層卷積層,其網(wǎng)絡(luò )架構如下圖所示:
乍一看,darknet-53和resnet網(wǎng)絡(luò )架構很像啊有木有。事實(shí)上,darknet-53可以說(shuō)是青出于藍而勝于藍,具體改進(jìn)如下:
充分借鑒了resnet網(wǎng)絡(luò )中的殘差結構,使得網(wǎng)絡(luò )能夠達到很深程度的同時(shí)避免了梯度消失問(wèn)題;
去除了池化層而改用步長(cháng)為2的卷積層的方式進(jìn)行特征圖的降維,更好的保持了信息傳遞;
充分吸收了network in network的思想,使用1*1卷積既降低了參數量,又增強了不同通道間的特征融合。
吸收了諸多優(yōu)點(diǎn)的darknet-53最終取得了優(yōu)異的成績(jì),能夠在性能超過(guò)resnet-101的同時(shí)速度快1.5倍,在速度快2倍的前提下達到和resnet-152相似的性能。
多尺度融合
yolo自誕生之日起,就被打上了一個(gè)不太友好的標簽:對小物體的檢測效果不佳。這是原理上的限制,yolov1僅僅利用最后一層卷積層進(jìn)行特征預測,而小物體的信息經(jīng)過(guò)層層卷積后幾乎完全喪失,從而制約了模型的效果。為了改進(jìn)這一點(diǎn),作者曾在yolov2中采用passthrough結構來(lái)改善細粒度特征的檢測,但是效果依舊不理想。至yolov3,作者充分借鑒了FPN網(wǎng)絡(luò )的思想,采用多尺度來(lái)對不同大小尺寸的目標物進(jìn)行檢測。小糖豆在查找資料時(shí)發(fā)現了下面這幅圖,十分清晰明了的表示出yolov3中是如何進(jìn)行多尺度級聯(lián)預測的(原圖出自L(fǎng)evio,感謝作者的勞作)。
416*416*3的圖像輸入網(wǎng)絡(luò )后,經(jīng)過(guò)5次下采樣,得到第一張尺寸為13*13的預測特征圖。隨后,為了實(shí)現細粒度特征檢測,在第79層特征圖處進(jìn)行上采樣,并與來(lái)自第61層的特征圖進(jìn)行特征拼接,得到了第二張尺寸為26*26的預測特征圖。同樣地,在第91層特征圖處再次進(jìn)行上采樣,與第36層特征圖進(jìn)行特征拼接,得到了第三張尺寸為52*52的預測特征圖。
13*13的特征圖由于下采樣倍數大,單元網(wǎng)格的感受野比較大,適合檢測尺寸比較大的目標物;26*26的特征圖中單元網(wǎng)格感受野適中,適合檢測尺寸中等的目標物;52*52的特征圖中單元網(wǎng)格感受野相對較小,適合檢測尺寸較小的目標物。
由于三張預測特征圖承擔的任務(wù)各不相同,相應的anchor box也需要進(jìn)行調整。與v2中相同的是,v3延續了采用k-means聚類(lèi)算法確定anchor box尺寸的方法,為每張特征圖設定了3種anchor box,總共聚類(lèi)得到9種尺寸的anchor box。在coco數據集上,這9個(gè)anchor box分別是(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。分配的方式見(jiàn)下表所示,遵循的原則是特征圖的尺寸越小,則分配的anchor box的尺寸越大。大家可以根據下面幾幅圖感受下不同anchor box對圖像感知視野的不同(黃色框是ground true box,藍色框是預先分配的anchor box)。
由于多尺度預測,yolov3對小物體的檢測效果大大加強,yolov2和v3的檢測效果對比如下圖所示(成效真的很顯著(zhù)):

損失函數
損失函數的改進(jìn)主要是在類(lèi)別預測部分,用獨立的logistic classifiers取代了softmax。作者在文章中解釋道,這能幫助模型適應更復雜領(lǐng)域的數據集,比如Open Images數據集。在該數據集中,有很多標簽的含義是重疊的,例如女人和人。而softmax需要假定每一個(gè)需要預測的類(lèi)別都是互相獨立的,很顯然不適合這種情況。
與其他模型的比較

集百家之長(cháng)的yolov3終于成長(cháng)為目標檢測界的標桿,傲視群雄。作者在此處很傲嬌的將yolov3畫(huà)在了第二象限(手動(dòng)@作者,期盼yolov4早點(diǎn)問(wèn)世哦)。
另附上一段小糖豆非常推崇的yolov3的評語(yǔ):
2015 年,R-CNN橫空出世,目標檢測DL世代大幕拉開(kāi)。各路豪杰快速迭代,陸續有了SPP,fast,faster版本,至R-FCN,速度與精度齊飛,區域推薦類(lèi)網(wǎng)絡(luò )大放異彩。奈何,未達實(shí)時(shí)檢測之基準,難獲工業(yè)應用之青睞。此時(shí),憑速度之長(cháng),網(wǎng)格類(lèi)檢測異軍突起,先有YOLO,繼而SSD,更是摘實(shí)時(shí)檢測之桂冠,與區域推薦類(lèi)網(wǎng)絡(luò )二分天下。然準確率卻時(shí)遭世人詬病。遂有JR一鼓作氣,并coco,推v2,增加輸出類(lèi)別,成就9000。此后一年,作者隱遁江湖,逍遙twitter。偶獲靈感,終推v3,橫掃武林!
霸氣!Niubility?。?!
下一代會(huì )是什么樣子
在這里小糖豆結合目標檢測領(lǐng)域的最新進(jìn)展談?wù)勛约旱目捶?。時(shí)下anchor-free類(lèi)目標檢測模型如雨后春筍般出現,yolov4很有可能會(huì )返璞歸真。在小糖豆看來(lái),yolo最核心的思想是將圖像劃分成網(wǎng)格,包含物體中心點(diǎn)的網(wǎng)格負責預測該物體。如果說(shuō)改進(jìn)下?lián)p失函數,使得模型能夠精準定位到這些包含物體中心點(diǎn)的網(wǎng)格,在此基礎上利用這些網(wǎng)格預測bounding box的其他屬性,則可以成功避免依靠窮舉法來(lái)獲得潛在目標位置。這個(gè)思路和今年新發(fā)布的 centerNet(Objects as Points)的思路頗為相似。后期小糖豆會(huì )在yolov3的基礎上嘗試運用anchor-free的思想,如果效果好的話(huà)再分享給大家。
總結
yolo系列算法的原理講解到這就暫告一段落了。小糖豆在前面的文章中也表達過(guò)自己的觀(guān)點(diǎn),要想真正弄清楚一個(gè)算法,僅僅弄明白它的原理是不夠的,最合適的學(xué)習途徑還是在學(xué)會(huì )原理的基礎上動(dòng)手實(shí)現它。因此,小糖豆在接下來(lái)的文章中會(huì )深入探索yolov3的代碼,帶領(lǐng)大家從零開(kāi)始,動(dòng)手實(shí)現yolov3的訓練與檢測。
最后獻上一首詩(shī)與大家共勉:
古人學(xué)問(wèn)無(wú)遺力,少壯功夫老始成。
紙上得來(lái)終覺(jué)淺,絕知此事要躬行!
參考:
https://arxiv.org/abs/1506.02640 yolov1
https://arxiv.org/abs/1612.08242 yolov2
https://arxiv.org/abs/1804.02767 yolov3
https://www.jiqizhixin.com/articles/2018-05-14-4
聯(lián)系客服