进击的YOLOv3,目标检测网络的巅峰之作 | 内附实景大片
作者丨浩克匠心
研究方向丨基于深度學(xué)習(xí)的實(shí)時目標(biāo)檢測
知乎專欄丨計算視覺與深度學(xué)習(xí)的小屋
YOLOv3的前世今生
2015 年,R-CNN 橫空出世,目標(biāo)檢測 DL 世代大幕拉開。
各路豪杰快速迭代,陸續(xù)有了 SPP,fast,faster 版本,至 R-FCN,速度與精度齊飛,區(qū)域推薦類網(wǎng)絡(luò)大放異彩。
奈何,未達(dá)實(shí)時檢測之基準(zhǔn),難獲工業(yè)應(yīng)用之青睞。
此時,憑速度之長,網(wǎng)格類檢測異軍突起,先有 YOLO,繼而 SSD,更是摘實(shí)時檢測之桂冠,與區(qū)域推薦類二分天下。然準(zhǔn)確率卻時遭世人詬病。
遂有 JR 一鼓作氣,并 coco,推 v2,增加輸出類別,成就 9000。此后一年,作者隱遁江湖,逍遙 twitter。偶獲靈感,終推 v3,橫掃武林!
準(zhǔn)確率不再是短板
自從 YOLO 誕生之日起,它就被貼上了兩個標(biāo)簽:
速度很快
不擅長檢測小物體
而后者,成為了很多人對它望而卻步的原因。
由于原理上的限制,YOLO 僅檢測最后一層卷積輸出層,小物體像素少,經(jīng)過層層卷積,在這一層上的信息幾乎體現(xiàn)不出來,導(dǎo)致難以識別。
YOLOv3 在這部分提升明顯,先看看小物體的識別。
▲?YOLOv3的識別結(jié)果
直觀地看下和 YOLOv2 的對比圖如下。可以看出,對于小物體的識別,提高非常明顯。
無論是傳統(tǒng)的模式識別圖像檢測,還是基于 CNN 的視覺檢測,對于緊湊密集或者高度重疊目標(biāo)的檢測通常是非常困難的。比如對合影的人群檢測在 YOLOv2 上的結(jié)果:
而下面是 v3 的結(jié)果
一次檢測到圖中 90% 的人,還增加了 tie(領(lǐng)帶)這個新類別,非常驚艷!
再看看模型的泛化能力如何:
骷髏并不在訓(xùn)練數(shù)據(jù)集中,但是通過訓(xùn)練模型強(qiáng)大的泛化能力,自動將其歸類到了人類(也算是最為合理的近似處理了)。
這在 YOLOv2 中是檢測不到的。
那么,模型泛化能力很強(qiáng)的副作用,就是分類結(jié)果跑偏,比如下面這張 coser 的識別圖,最左側(cè)的人識別成了馬:
訓(xùn)練和檢測都很快
論文中做了詳盡的對比。?
和前輩們比,YOLO 的速度非常快,比 R-CNN 快 1000 倍,比 Fast R-CNN 快 100 倍。?
和同輩們比,YOLOv3-608 檢測準(zhǔn)確率比 DSSD 更高,接近 FPN,但是檢測時間卻只用了后面兩者的三分之一不到。?
原因如論文中所說,它在測試時觀察整張圖像,預(yù)測會由圖像中的全局上下文(global context)引導(dǎo)。它還通過單一網(wǎng)絡(luò)評估做出預(yù)測,而不像 R-CNN 這種系統(tǒng),一張圖就需要成千上萬次預(yù)測。
用了哪些黑科技?
1. 多級預(yù)測
終于為 YOLO 增加了 top down 的多級預(yù)測,解決了 YOLO 顆粒度粗,對小目標(biāo)無力的問題。
v2 只有一個 detection,v3 一下變成了 3 個,分別是一個下采樣的,feature map 為 13*13,還有 2 個上采樣的 eltwise sum,feature map 為 26*26,52*52,也就是說 v3 的 416 版本已經(jīng)用到了 52 的 feature map,而 v2 把多尺度考慮到訓(xùn)練的 data 采樣上,最后也只是用到了 13 的 feature map,這應(yīng)該是對小目標(biāo)影響最大的地方。
在論文中從單層預(yù)測五種 boundingbox 變成每層 3 種 boundongbox。
2.?loss不同
作者 v3 替換了 v2 的 softmax loss 變成 logistic loss,由于每個點(diǎn)所對應(yīng)的 bounding box 少并且差異大,每個 bounding 與 ground truth 的 matching 策略變成了 1 對 1。
當(dāng)預(yù)測的目標(biāo)類別很復(fù)雜的時候,采用 logistic regression 進(jìn)行分類是更有效的,比如在 Open Images Dataset 數(shù)據(jù)集進(jìn)行分類。
在這個數(shù)據(jù)集中,會有很多重疊的標(biāo)簽,比如女人、人,如果使用 softmax 則意味著每個候選框只對應(yīng)著一個類別,但是實(shí)際上并不總是這樣。復(fù)合標(biāo)簽的方法能對數(shù)據(jù)進(jìn)行更好的建模。
3. 加深網(wǎng)絡(luò)
采用簡化的 residual block 取代了原來 1×1 和 3×3 的 block(其實(shí)就是加了一個 shortcut,也是網(wǎng)絡(luò)加深必然所要采取的手段)。
這和上一點(diǎn)是有關(guān)系的,v2 的 darknet-19 變成了 v3 的 darknet-53,為啥呢?就是需要上采樣啊,卷積層的數(shù)量自然就多了,另外作者還是用了一連串的 3*3、1*1 卷積,3*3 的卷積增加 channel,而 1*1 的卷積在于壓縮 3*3 卷積后的特征表示。
4. Router
由于 top down 的多級預(yù)測,進(jìn)而改變了 router(或者說 concatenate)時的方式,將原來詭異的 reorg 改成了 upsample。
下一代YOLO長啥樣?
1. mAP 會繼續(xù)提高:隨著模型訓(xùn)練越來越高效,神經(jīng)網(wǎng)絡(luò)層級的不斷加深,信息抽象能力的不斷提高,以及一些小的修修補(bǔ)補(bǔ),未來的目標(biāo)檢測應(yīng)用mAP會不斷提升。?
2. 實(shí)時檢測會成為標(biāo)配:目前所謂的“實(shí)時”,工業(yè)界是不認(rèn)可的。為什么呢,因為學(xué)術(shù)圈的人,驗證模型都是建立在 TitanX 或者 Tesla 這類強(qiáng)大的獨(dú)立顯卡上,而實(shí)際的潛在應(yīng)用場景中,例如無人機(jī)/掃地/服務(wù)機(jī)器人/視頻監(jiān)控等,是不會配備這些“重型裝備”的。所以,在嵌入式設(shè)備中,如 FPGA,輕量級 CPU 上,能達(dá)到的實(shí)時,才是貨真價實(shí)的。?
3. 模型小型化成為重要分支:類似于 tiny YOLO 的模型分支會受到更多關(guān)注。模型的小型化是應(yīng)用到嵌入式設(shè)備的重要前提。而物聯(lián)網(wǎng)機(jī)器人無人機(jī)等領(lǐng)域還是以嵌入式設(shè)備為主的。模型剪枝/二值化/權(quán)值共享等手段會更廣泛的使用。
說點(diǎn)題外話
YOLO 讓人聯(lián)想到龍珠里的沙魯(cell),不斷吸收同化對手,進(jìn)化自己,提升戰(zhàn)斗力:YOLOv1 吸收了 SSD 的長處(加了 BN 層,擴(kuò)大輸入維度,使用了 Anchor,訓(xùn)練的時候數(shù)據(jù)增強(qiáng)),進(jìn)化到了 YOLOv2;?
吸收 DSSD 和 FPN 的長處,仿 ResNet 的 Darknet-53,仿 SqueezeNet 的縱橫交叉網(wǎng)絡(luò),又進(jìn)化到 YOLO 第三形態(tài)。?
但是,我相信這一定不是最終形態(tài)。讓我們拭目以待吧!
YOLOv3實(shí)景大片兒
這周忙里偷閑,把 darknet 的代碼擼了一遍,里面有趣的東西很多。
能看出來作者是有野心的,YOLO 不只是一個目標(biāo)檢測應(yīng)用,它還是一個完全基于 C 語言的通用神經(jīng)網(wǎng)絡(luò)架構(gòu),以及很多以此為基礎(chǔ)的深度學(xué)習(xí)應(yīng)用,比如基于 RNN 的莎士比亞戲劇劇本自動生成器:
基于策略網(wǎng)絡(luò)的 darknet 版阿法狗(DarkGo):
基于 GAN 的 darknet 版 Deep Dream(Nightmare):
挑戰(zhàn) SqueezeNet 的壓縮網(wǎng)絡(luò) TinyYOLO(Redmon 號稱后者比前者更快、小、準(zhǔn))等等。
當(dāng)然,做得最好的還是目標(biāo)檢測。darknet 自帶有視頻檢測,及網(wǎng)絡(luò)攝像頭實(shí)時視頻檢測。?
但是,目前網(wǎng)上介紹的 YOLO 的文章多是用的論文和 Github 工程自帶的 sample 圖片(dog,kite…),其實(shí)這不太公平。?
在源代碼基礎(chǔ)上加了一點(diǎn)保存視頻的代碼(代碼鏈接在文尾),生成了如下的視頻,看看當(dāng) Mr Bean 遇到 YOLO 會產(chǎn)生什么樣的化學(xué)反應(yīng)!?
▲?YOLOv3效果展示
查看高清版視頻
https://zhuanlan.zhihu.com/p/36478097
注:本視頻基于 coco 數(shù)據(jù)集,YOLOv3 cfg 和 weights。檢測視頻沒有聲音,音軌是后加的。
存在一些識別錯誤,但是整體來說,亮點(diǎn)很多。
截取幾個瞬間
▲?性能提升最大的是小物體或者遠(yuǎn)處的物體識別
▲?重疊遮擋物體的識別
▲?運(yùn)動模糊物體的識別
▲?高密度汽車的識別
▲?密集人群識別
相關(guān)鏈接
[1].?論文
https://pjreddie.com/media/files/papers/YOLOv3.pdf
[2]. 翻譯
https://zhuanlan.zhihu.com/p/34945787
[3]. 代碼
https://github.com/pjreddie/darknet
[4]. 官網(wǎng)
https://pjreddie.com/darknet/yolo/
[5]. YouTube
https://www.youtube.com/watch?v=MPU2HistivI
[6]. 舊版
https://pjreddie.com/darknet/yolov2/
https://pjreddie.com/darknet/yolov1/
[7]. 源碼分享
https://github.com/muyiguangda/darknet
[8]. YOLOv3在Windows下的配置(無GPU)
https://blog.csdn.net/baidu_36669549/article/details/79798587
點(diǎn)擊以下標(biāo)題查看其他文章:?
自適應(yīng)注意力機(jī)制在Image Caption中的應(yīng)用
CVPR 2018值得一看的25篇論文,都在這里了
視覺跟蹤之端到端的光流相關(guān)濾波
Wasserstein距離在生成模型中的應(yīng)用
深度學(xué)習(xí)在CTR預(yù)估中的應(yīng)用
▲?戳我查看招募詳情
#作 者 招 募#
讓你的文字被很多很多人看到,喜歡我們不如加入我們
關(guān)于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學(xué)術(shù)平臺。如果你研究或從事 AI 領(lǐng)域,歡迎在公眾號后臺點(diǎn)擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
▽ 點(diǎn)擊 |?閱讀原文?| 進(jìn)入作者知乎專欄
總結(jié)
以上是生活随笔為你收集整理的进击的YOLOv3,目标检测网络的巅峰之作 | 内附实景大片的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线下报名 | NVIDIA JETSON
- 下一篇: 等你Battle!——11万个真实场景配