【目標檢測簡史】進擊的YOLOv3,目標檢測網路的巔峰之作

YOLOv3的前世今生

2015年,R-CNN橫空出世,目標檢測DL世代大幕拉開。

各路豪傑快速迭代,陸續有了SPP,fast,faster版本,至R-FCN,速度與精度齊飛,區域推薦類網路大放異彩。

奈何,未達實時檢測之基準,難獲工業應用之青睞。

此時,憑速度之長,網格類檢測異軍突起,先有YOLO,繼而SSD,更是摘實時檢測之桂冠,與區域推薦類二分天下。然準確率卻時遭世人詬病。

遂有RBG一鼓作氣,並coco,推v2,增加輸出類別,成就9000。此後一年,作者隱遁江湖,逍遙twitter。偶獲靈感,終推v3,橫掃武林!

準確率不再是短板

自從YOLO誕生之日起,它就被貼上了兩個標籤,

1.速度很快。

2.不擅長檢測小物體。

而後者,成為了很多人對它望而卻步的原因。

由於原理上的限制,YOLO僅檢測最後一層卷積輸出層,小物體像素少,經過層層卷積,在這一層上的信息幾乎體現不出來,導致難以識別。

YOLOv3在這部分提升明顯。先看看小物體的識別。

YOLOv3的識別結果

直觀地看下和YOLOv2的對比圖如下。可以看出,對於小物體的識別,提高非常明顯。

無論是傳統的模式識別圖像檢測,還是基於CNN的視覺檢測,對於緊湊密集或者高度重疊目標的檢測通常是非常困難的。比如對合影的人群檢測在YOLOv2上的結果:

而下面是v3的結果:

前方高能預警。。。。。。。。。。。。。。。。

一次檢測到圖中90%的人,還增加了tie(領帶)這個新類別,非常驚艷!

再看看模型的泛化能力如何:

骷髏並不在訓練數據集中,但是通過訓練模型強大的泛化能力,自動將其歸類到了人類。(也算是最為合理的近似處理了)

這在YOLOv2中是檢測不到的。

那麼,模型泛化能力很強的副作用,就是分類結果跑偏,比如下面這張coser的識別圖,最左側的人識別成了馬:

訓練和檢測都很快

論文中做了詳盡的對比。

和前輩們比,YOLO 的速度非常快,比 R-CNN 快 1000 倍,比 Fast R-CNN 快 100 倍。

和同輩們比,YOLOv3-608檢測準確率比DSSD更高,接近FPN,但是檢測時間卻只用了後面兩者的三分之一不到。

原因如論文中所說,它在測試時觀察整張圖像,預測會由圖像中的全局上下文(global context)引導。它還通過單一網路評估做出預測,而不像 R-CNN 這種系統,一張圖就需要成千上萬次預測。

用了哪些黑科技?

  1. 多級預測:終於為yolo增加了top down 的多級預測,解決了yolo顆粒度粗,對小目標無力的問題。v2隻有一個detection,v3一下變成了3個,分別是一個下採樣的,feature map為13*13,還有2個上採樣的eltwise sum,feature map為26*26,52*52,也就是說v3的416版本已經用到了52的feature map,而v2把多尺度考慮到訓練的data採樣上,最後也只是用到了13的feature map,這應該是對小目標影響最大的地方。在論文中從單層預測五種boundingbox變成每層3種boundongbox;
  2. loss不同:作者v3替換了v2的softmax loss 變成logistic loss,由於每個點所對應的bounding box少並且差異大,每個bounding與ground truth的matching策略變成了1對1。當預測的目標類別很複雜的時候,採用logistic regression進行分類是更有效的,比如在Open Images Dataset數據集進行分類。在這個數據集中,會有很多重疊的標籤,比如女人、人,如果使用softmax則意味著每個候選框只對應著一個類別,但是實際上並不總是這樣。複合標籤的方法能對數據進行更好的建模。
  3. 加深網路: 採用簡化的residual block 取代了原來 1×1 和 3×3的block; (其實就是加了一個shortcut,也是網路加深必然所要採取的手段)。這和上一點是有關係的,v2的darknet-19變成了v3的darknet-53,為啥呢?就是需要上採樣啊,卷積層的數量自然就多了,另外作者還是用了一連串的3*3、1*1卷積,3*3的卷積增加channel,而1*1的卷積在於壓縮3*3卷積後的特徵表示。
  4. router:由於top down 的多級預測,進而改變了router(或者說concatenate)時的方式,將原來詭異的reorg改成了upsample

下一代YOLO長啥樣?

  1. mAP會繼續提高。隨著模型訓練越來越高效,神經網路層級的不斷加深,信息抽象能力的不斷提高,以及一些小的修修補補,未來的目標檢測應用mAP會不斷提升。
  2. 實時檢測會成為標配。目前所謂的「實時」,工業界是不認可的。為什麼呢,因為學術圈的人,驗證模型都是建立在TitanX或者Tesla這類強大的獨立顯卡上,而實際的潛在應用場景中,例如無人機/掃地/服務機器人/視頻監控等,是不會配備這些「重型裝備」的。所以,在嵌入式設備中,如FPGA,輕量級CPU上,能達到的實時,才是貨真價實的。
  3. 模型小型化成為重要分支。類似於tiny YOLO的模型分支會受到更多關注。模型的小型化是應用到嵌入式設備的重要前提。而物聯網機器人無人機等領域還是以嵌入式設備為主的。模型剪枝/二值化/權值共享等手段會更廣泛的使用。

說點題外話:

YOLO讓人聯想到龍珠里的沙魯(cell),不斷吸收同化對手,進化自己,提升戰鬥力:YOLOv1吸收了SSD的長處(加了 BN 層,擴大輸入維度,使用了 Anchor,訓練的時候數據增強),進化到了YOLOv2;

吸收DSSD和FPN的長處, 仿ResNet的Darknet-53,仿SqueezeNet的縱橫交叉網路,又進化到YOLO第三形態。

但是,我相信這一定不是最終形態。。。讓我們拭目以待吧!

論 文:pjreddie.com/media/file

翻 譯:zhuanlan.zhihu.com/p/34

代 碼:github.com/pjreddie/dar

官 網: pjreddie.com/darknet/yo

Youtube:youtube.com/watch?

舊 版:

pjreddie.com/darknet/yo

https://pjreddie.com/darknet/yolov1/

推薦閱讀:

類比人腦-自動駕駛神經網路設計理念是什麼?
【腦洞未來5】人工智慧篇5:阿爾法狗不是真正的「智能」(上)
郝景芳《人之彼岸》,人類迎接未來世界的正確姿態
人工智慧一小時vs人類的一萬年
未來會是什麼樣?人工智慧電視走向猜想

TAG:目標檢測 | 深度學習DeepLearning | 人工智慧 |