?前言
本文是yolo系列算法文章的第三篇,也是目前為止yolo系列算法的最終篇。從原理上看,yolov3并沒有實質性的創(chuàng)新,主要是借鑒了一些時下state-of-the-art模型的優(yōu)秀思想。本文重點講解yolov3在v1和v2基礎上做的改進,因此對yolov1和v2的原理還不太熟悉的小伙伴可以先看一下前面的兩篇文章:yolo系列算法一和yolo系列算法二。
????相較于v1和v2,yolov3的改進主要包括三點:新的backbone基礎網絡;多尺度預測;損失函數(shù)的調整。
backbone基礎網絡
為了改進模型效果,作者提出了一個新的基礎網絡darknet-53進行特征提取,該網絡在darknet-19的基礎上進一步擴充了網絡深度,包括有53層卷積層,其網絡架構如下圖所示:
????乍一看,darknet-53和resnet網絡架構很像啊有木有。事實上,darknet-53可以說是青出于藍而勝于藍,具體改進如下:
充分借鑒了resnet網絡中的殘差結構,使得網絡能夠達到很深程度的同時避免了梯度消失問題;
去除了池化層而改用步長為2的卷積層的方式進行特征圖的降維,更好的保持了信息傳遞;
充分吸收了network in network的思想,使用1*1卷積既降低了參數(shù)量,又增強了不同通道間的特征融合。
? ? 吸收了諸多優(yōu)點的darknet-53最終取得了優(yōu)異的成績,能夠在性能超過resnet-101的同時速度快1.5倍,在速度快2倍的前提下達到和resnet-152相似的性能。
多尺度融合
yolo自誕生之日起,就被打上了一個不太友好的標簽:對小物體的檢測效果不佳。這是原理上的限制,yolov1僅僅利用最后一層卷積層進行特征預測,而小物體的信息經過層層卷積后幾乎完全喪失,從而制約了模型的效果。為了改進這一點,作者曾在yolov2中采用passthrough結構來改善細粒度特征的檢測,但是效果依舊不理想。至yolov3,作者充分借鑒了FPN網絡的思想,采用多尺度來對不同大小尺寸的目標物進行檢測。小糖豆在查找資料時發(fā)現(xiàn)了下面這幅圖,十分清晰明了的表示出yolov3中是如何進行多尺度級聯(lián)預測的(原圖出自Levio,感謝作者的勞作)。
416*416*3的圖像輸入網絡后,經過5次下采樣,得到第一張尺寸為13*13的預測特征圖。隨后,為了實現(xiàn)細粒度特征檢測,在第79層特征圖處進行上采樣,并與來自第61層的特征圖進行特征拼接,得到了第二張尺寸為26*26的預測特征圖。同樣地,在第91層特征圖處再次進行上采樣,與第36層特征圖進行特征拼接,得到了第三張尺寸為52*52的預測特征圖。
13*13的特征圖由于下采樣倍數(shù)大,單元網格的感受野比較大,適合檢測尺寸比較大的目標物;26*26的特征圖中單元網格感受野適中,適合檢測尺寸中等的目標物;52*52的特征圖中單元網格感受野相對較小,適合檢測尺寸較小的目標物。
? ?由于三張預測特征圖承擔的任務各不相同,相應的anchor box也需要進行調整。與v2中相同的是,v3延續(xù)了采用k-means聚類算法確定anchor box尺寸的方法,為每張?zhí)卣鲌D設定了3種anchor box,總共聚類得到9種尺寸的anchor box。在coco數(shù)據集上,這9個anchor box分別是(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。分配的方式見下表所示,遵循的原則是特征圖的尺寸越小,則分配的anchor box的尺寸越大。大家可以根據下面幾幅圖感受下不同anchor box對圖像感知視野的不同(黃色框是ground true box,藍色框是預先分配的anchor box)。
由于多尺度預測,yolov3對小物體的檢測效果大大加強,yolov2和v3的檢測效果對比如下圖所示(成效真的很顯著):
損失函數(shù)
損失函數(shù)的改進主要是在類別預測部分,用獨立的logistic classifiers取代了softmax。作者在文章中解釋道,這能幫助模型適應更復雜領域的數(shù)據集,比如Open Images數(shù)據集。在該數(shù)據集中,有很多標簽的含義是重疊的,例如女人和人。而softmax需要假定每一個需要預測的類別都是互相獨立的,很顯然不適合這種情況。
與其他模型的比較
集百家之長的yolov3終于成長為目標檢測界的標桿,傲視群雄。作者在此處很傲嬌的將yolov3畫在了第二象限(手動@作者,期盼yolov4早點問世哦)。
????另附上一段小糖豆非常推崇的yolov3的評語:
2015 年,R-CNN橫空出世,目標檢測DL世代大幕拉開。各路豪杰快速迭代,陸續(xù)有了SPP,fast,faster版本,至R-FCN,速度與精度齊飛,區(qū)域推薦類網絡大放異彩。奈何,未達實時檢測之基準,難獲工業(yè)應用之青睞。此時,憑速度之長,網格類檢測異軍突起,先有YOLO,繼而SSD,更是摘實時檢測之桂冠,與區(qū)域推薦類網絡二分天下。然準確率卻時遭世人詬病。遂有JR一鼓作氣,并coco,推v2,增加輸出類別,成就9000。此后一年,作者隱遁江湖,逍遙twitter。偶獲靈感,終推v3,橫掃武林!
霸氣!Niubility?。?!
下一代會是什么樣子
在這里小糖豆結合目標檢測領域的最新進展談談自己的看法。時下anchor-free類目標檢測模型如雨后春筍般出現(xiàn),yolov4很有可能會返璞歸真。在小糖豆看來,yolo最核心的思想是將圖像劃分成網格,包含物體中心點的網格負責預測該物體。如果說改進下?lián)p失函數(shù),使得模型能夠精準定位到這些包含物體中心點的網格,在此基礎上利用這些網格預測bounding box的其他屬性,則可以成功避免依靠窮舉法來獲得潛在目標位置。這個思路和今年新發(fā)布的 centerNet(Objects as Points)的思路頗為相似。后期小糖豆會在yolov3的基礎上嘗試運用anchor-free的思想,如果效果好的話再分享給大家。
總結
??? yolo系列算法的原理講解到這就暫告一段落了。小糖豆在前面的文章中也表達過自己的觀點,要想真正弄清楚一個算法,僅僅弄明白它的原理是不夠的,最合適的學習途徑還是在學會原理的基礎上動手實現(xiàn)它。因此,小糖豆在接下來的文章中會深入探索yolov3的代碼,帶領大家從零開始,動手實現(xiàn)yolov3的訓練與檢測。
????最后獻上一首詩與大家共勉:
古人學問無遺力,少壯功夫老始成。
紙上得來終覺淺,絕知此事要躬行!
參考:
https://arxiv.org/abs/1506.02640? ?yolov1
https://arxiv.org/abs/1612.08242? ?yolov2
https://arxiv.org/abs/1804.02767? ?yolov3