YOLO-v4

yolo更新了最新的v4版本,這幾天有關目標檢測方面的公衆號推送的全是關於yolo-v4的內容,趁熱打鐵,趕緊來了解一下性能強勁的yolo-v4!

​ 這個版本的作者是Alexey Bochkovskiy,4.24這天放出了所有的源碼和論文,其他內容什麼的先不說,先贊一個開源萬歲!原作者JosephRedmon在早前發文稱自己要退出CV圈,原因是yolo的工作被應用到了軍事武器以及侵犯大衆隱私的其他商業軟件中,自己的內心受到了很大的折磨,在內心不安中經過了衆多考慮後決定退出CV圈。

​ 乍一看覺得這個大神有點矯情,但是深思後覺得這個事情並不簡單,或許是我們這些CV小白們把事情考慮的太簡單了。CV對我們的影響有這麼大麼?

​ 仔細一想,還真是!

​ 隨着計算機硬件水平的提高以及價格的走低,大街上出現了隨處可見的攝像頭,甚至我家裏面都安裝兩個攝像頭用來防盜(一個放在門外監控樓道,另外一個安在客廳)。一張無形的網籠罩了我們整個社會,我們的每個舉動都有可能被監視,而監視我們的不一定是坐在另一頭顯示器前扣腳的大漢,有可能就是我們一直在致力於發展的CV。通過目標檢測結合ip地址可以給每個人打上標籤,標籤內容甚至可以包括家庭關係,之後再通過街頭巷尾的攝像頭進行reID以及人體關鍵點識別,我們的所有行徑所有動作都會被記錄下來,有了這些數據分析出消費習慣、消費能力應該不是什麼難事,當然如果僅僅是用於這些的話還好,只不過多了些定向投放的廣告,如果這些數據被不壞好意的人如詐騙的人看到呢,他們也可以進行定向犯罪了,想想就後怕,一會兒就把客廳的攝像頭拆了。

​ 在戰場上,更準確更快的目標檢測算法可以讓打擊更加精確,憑人類的騰挪躲閃幾乎無法躲避,這種要你三更死絕活不到五更的閻羅式打擊可以讓現代戰爭發展到另外一種可怕的境地,想想又後怕了。看到自己的學術成果被這樣利用,JosephRedmon的心裏很難受,這點是可以理解的。

不跑題了,進入正文。

​ 繼承了Ross Girshick的衣鉢,Alexey Bochkovskiy繼續將yolo發揚光大,利用了近兩年出現的衆多tricks來改進yolov-3,同時做了一點創新,將MS COCO數據集上的state-of-the-art提升到了43.5%AP(65.7% A P 50 AP_{50}​ ),速度達到了65 FPS (Tesla V100)。
在這裏插入圖片描述

​ 爲了方便衆多計算條件有限的學習者,發佈的代碼及訓練策略都是基於單GPU的,能夠更好地推進YOLO在更多領域的應用。這篇論文偏向於工程實踐的總結,事無鉅細地記錄了實驗的過程,衆多的實驗數據可見作者投入的精力有多大。

​ 作者將檢測網絡的結構分成了幾個部分:分別是骨幹

  1. 輸入

  2. 骨幹

  3. 脖子

其中輸入就是圖片,也可能是圖一張圖片的不同分辨率組成的圖片金字塔

骨幹是各種特徵提取網絡,包括resnet、vgg等基礎網絡。

脖子是對feature map做操作,包括對特徵層加權重或重排序等,論文中提出的是FPN、PANet、Bi-FPN等

頭就是各種目標檢測網絡的檢測方法,分爲基於anchor的和anchor-free兩種,本文將檢測方法分爲兩種:密集預測和稀疏預測,密集預測包括YOLO和SSD、cornernet等,這些方法都爲每個位置處預測了多個尺寸的檢測框,不同於密集預測,稀疏預測已經對候選的框做了篩選,候選框的數量比較少。

作者利用了近年來效果很好的tricks,包含了大量的論文。作者將這些方法分爲兩類:

  1. Bag of freebies

    這類tricks主要在不增加前向推理時間的前提下提升檢測準確率,故稱free,不用白不用

    包括:

    • 數據增強
      • CutOut
      • random erase
      • MixUp
      • GAN
    • 難例處理
      • 難例挖掘
      • focal loss
    • loss形式
      • IOU,代替 L 1 l o s s L_1 loss L 2 l o s s L_2 loss ,能夠實現尺度的統一
      • GIOU,反應檢測框的相交形式
      • DIOU,反應檢測框之間的距離
      • CIOU,在DIOU基礎上加入影響因子,表現最好的IOU loss
    • 標籤處理
      • 標籤平滑
  2. Bag of specials

​ 這類方法是犧牲很少的前向推理時間提升檢測準確率。

​ 主要包括對feature map的一些操作,包括SPP、SE、SAM等;此外還有**函數的類型,包括ReLU系列,Swish和Mish;NMS的形式也採用了衆多的形式,如DIOU NMS和soft NMS.

​ 有了這麼多的備選方法,作者做了以下選擇:

基礎網絡: CSPDarknet53

Additional blocks:FPN,PAN,ASFF,BiFPN

**函數:ReLU, leaky-ReLU, parametric-ReLU,ReLU6, SELU, Swish, or Mish

檢測框迴歸:MSE,IoU,GIoU,CIoU,DIoU

數據增強:Cutout,MixUp,CutMix

防過擬合方法: DropOut, DropPath,spatial DropOut或者DropBlock

Normalization:BN,CBN,Cross-GPU BN

跳躍連接: Residual connections, Weighted residual connections, Multi-input weighted residual
connections, or Cross stage partial connection

作者的創新:

1.數據增強方法Mosaic,將四張圖片拼成一張,增加單GPU的顯存利用率,提升單GPU的訓練能力。 還利用了Self-Adversarial Training。

2.優化超參數(嚴格不算創新吧)

3.對現有的方法做了改進,更時候單GPU訓練,包括SAM,PAN,Cross mini-batch BN。

在這裏插入圖片描述

最後的yolov4選擇了下面結構:

1.Backbone:CSPDarknet53

2.Neck:SPP,PAN

3.head:YOLOv3

作者做了非常詳實的實驗,花費了大量的精力。

在這裏插入圖片描述

上述的S,M等是各種方法的簡稱,
在這裏插入圖片描述
在這裏插入圖片描述

然後作者與現有的幾乎所有檢測模型都做了對比,

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

總結,YOLO-v4就是現有的最強大的目標檢測模型,甚至沒有之一。由於開源的代碼還是用的yolo老傳統darknet寫的,其他版本的實現相信馬上就被衆多代碼高手們推出了。期待ing。