今年初 YOLO 之父Joseph Redmon宣佈推出CV界,引發軒然大波,你們紛紛猜想YOLO是否不會再出v4版,退出歷史舞臺。git
今天,YOLOv4重磅發佈,做者爲俄羅斯開發者 Alexey Bochkovskiy 和兩位中國臺灣開發者 Chien-Yao Wang、Hong-Yuan Mark Liao。
瞭解:https://mp.weixin.qq.com/s/tjz9Kz7Of8sCnXg0qxNGwQ
獻上原論文和源碼:
github
-
原論文:https://pan.baidu.com/s/1_J17pIkPl7KwcR5Sr5HP-w
提取碼:acdn
算法 -
論文源碼:網絡
-
GitHub:https://github.com/AlexeyAB/darknet架構
-
百度雲:https://pan.baidu.com/s/1hEB0JS48Ax85Gnd6IL3new
提取碼:rk07
dom -
權重:https://pan.baidu.com/s/1xB0zUa0zM-4LXq8u5KnQSw
提取碼:9mp9
ide -
翻譯:
函數
摘要:性能
有大量的特徵被認爲能夠提升卷積神經網絡(CNN)的精度。須要在大型數據集上對這些特徵的組合進行實際測試,並對結果進行理論證實。某些特性對特定的模型具備決定性的做用,對於某些特定的問題僅適用於小規模數據集;而某些特性(如批處理規範化和剩餘鏈接)適用於大多數模型、任務和數據集。咱們假設這些通用特徵包括加權殘差鏈接(WRC)、跨階段部分鏈接(CSP)、跨小批量規範化(CmBN)、自對抗訓練(SAT)和Mish激活函數。咱們使用如下新功能:WRC、CSP、CmBN、SAT、Mish激活、Mosaic數據加強、CmBN、DropBlock正則化和CIoU_loss,並將其中一些功能結合起來,以達到最新的結果:43.5%AP(65.7%AP50)用於MS COCO數據集,在Tesla V100上以65 FPS的實時速度。源代碼位於https://github.com/AlexeyAB/darknet學習
1.引言:
大多數基於CNN的目標檢測器大多隻適用於推薦系統。例如,經過城市攝像機搜索免費停車位是由低精度模型執行的,而汽車碰撞警告則與高精度模型相關。經過提升實時目標檢測的準確性,不只能夠將其用於提示生成推薦系統,還能夠用於獨立的流程管理並能減小人工輸入。常規圖形處理單元(GPU)上的實時對象檢測器操做容許它們以可承受的價格進行大量使用。最精確的現代神經網絡不具有實時性,須要大量的gpu進行小批量的訓練。咱們經過建立一個CNN來解決這些問題,該CNN在常規GPU上實時運行,而且訓練僅須要一個常規GPU。
圖1:提出的YOLOv4和其餘最新物體探測器的比較。YOLOv4的運行速度比EfficientDet快兩倍,性能至關。使YOLOv3的AP和FPS分別提升10%和12%。
本文的主要目的是設計一種快速的目標探測器在生產系統中的工做速度,並對並行計算進行優化,而不是對低計算體積理論指標(BFLOP)進行優化。咱們但願所設計的對象能夠很容易地訓練和使用。例如,任何使用傳統GPU進行訓練和測試的人均可以得到實時、高質量和使人信服的目標檢測結果,如圖1所示的YOLOv4結果。咱們的貢獻總結以下:
1.咱們開發了一個高效而強大的目標檢測模型。它使得每一個人均可以使用1080ti或2080ti GPU來訓練一個超快速和精確的目標探測器。
2.咱們在探測器訓練期間驗證了SOTA大禮包(Bag-of Freebies 不增長推理成本的trick)和特價袋 (Bag-of-Specials 增長推理成本的trick)檢測方法的影響
3.咱們修改了SOTA方法,使它們更有效且更適合單個GPU訓練,包括CBN [89],PAN [49],SAM [8]
2.相關工做
2.1目標檢測模型
現代檢測器一般由兩部分組成,一個是在ImageNet數據上通過預訓練的骨幹網絡,另外一個是用來預測物體的類別和邊界框的頭部。對於在GPU平臺上運行的那些檢測器,其主幹多是VGG [68],ResNet [26],ResNeXt [86]或DenseNet [30]。對於在CPU平臺上運行的那些檢測器,其主幹能夠是SqueezeNet [31],MobileNet [2八、6六、2七、74]或ShuffleNet [9七、53]。至於頭部,一般分爲兩類,即一級目標檢測器和二級目標檢測器。最有表明性的兩級對象檢測器是R-CNN [19]系列,包括Fast R-CNN [18],Faster R-CNN [64],R-FCN [9]和Libra R-CNN [58]。也有可能使二級對象檢測器成爲無錨對象(anchor-free)檢測器,例如RepPoints [87]。對於一級目標檢測器,最具表明性的模型是YOLO [6一、6二、63],SSD [50]和RetinaNet [45]。近年來,開發了無錨的一級物體檢測器。這種檢測器是CenterNet [13],CornerNet [3七、38],FCOS [78]等。近年來開發的對象檢測器一般在骨架和頭部之間插入一些層,這些層一般用於收集特徵圖。從不一樣的階段。咱們能夠稱其爲對象檢測器的頸部。一般,頸部由幾個自下而上的路徑和幾個自上而下的路徑組成。配備此機制的網絡包括特徵金字塔(Feature Pyramid Network(FPN))[44], Path Aggregation Network (PAN)[49],BiFPN [77]和NAS-FPN [17]。
除上述模型外,一些研究人員將重點放在直接構建用於對象檢測的新主幹(DetNet [43],DetNAS [7])或新的整個模型(SpineNet [12],HitDetector [20])上。
綜上所述,普通的目標檢測器由如下幾個部分組成:
-
輸入:圖像、Patches、圖像金字塔
-
骨幹網絡:VGG16[68]、ResNet-50[26]、SpineNet[12]、EfficientNet-B0/B7[75]、CSPResNeXt50[81]、CSPDarknet53[81]
-
Neck:
- Additional blocks:SPP[25]、ASPP[5]、RFB[47]、SAM[85]
- Path-aggregation blocks:FPN[44]、PAN[49]、NAS-FPN[17]、Fully-connected FPN、BiFPN[77]、ASFF[48]、SFAM[98]
-
Heads:
-
密集預測(一階段):
(1)RPN[64]、SSD[50]、YOLO[61]、RetinaNet[45](基於錨)
(2)CornerNet[37]、CenterNet[13]、MatrixNet[60]、FCOS[78](無錨)
-
稀疏預測(兩階段):
(1)更快的R-CNN[64]、R-FCN[9]、掩碼RCNN[23](基於錨)
(2)RepPoints[87](無錨)
-
2.2Bag of freebies
一般,常規的物體檢測器是離線訓練的。所以,研究人員老是喜歡利用這一優點,並開發出更好的訓練方法,以使物體檢測器得到更好的精度而又不增長推理成本。咱們稱這些方法爲「bag of freebies」,即改變訓練策略或僅增長訓練成本。數據加強是對象檢測方法常常採用的並符合bag of freebies定義的數據。數據加強的目的是增長輸入圖像的可變性,從而使設計的物體檢測模型對從不一樣環境得到的圖像具備更高的魯棒性。例如,光度畸變和幾何畸變是兩種經常使用的數據加強方法,它們無疑有益於物體檢測任務。在處理光度失真時,咱們會調整圖像的亮度,對比度,色相,飽和度和噪點。對於幾何變形,咱們添加了隨機縮放,裁剪,翻轉和旋轉等方式。
上述數據加強方法都是逐像素調整,而且保留了調整區域中的全部原始像素信息。此外,一些從事數據加強的研究者把重點放在模擬物體遮擋問題上。在圖像分類和目標檢測方面取得了良好的效果。例如,隨機擦除[100]和CutOut[11]能夠隨機選擇圖像中的矩形區域,並填充0的隨機值或互補值。至於hide-and-seek(69)和grid mask(6),它們隨機或均勻地選擇圖像中的多個矩形區域,並將它們替換爲全零。若是將相似的概念應用於特徵地圖,則有DropOut[71]、DropConnect[80]和DropBlock[16]方法。此外,一些研究者還提出了利用多幅圖像進行數據加強的方法。例如,MixUp[92]使用兩個圖像以不一樣的係數比率進行乘法和疊加,而後使用這些疊加比率調整標籤。對於CutMix[91],它是將裁剪後的圖像覆蓋到其餘圖像的矩形區域,並根據混合區域的大小調整標籤。除了上述方法外,style transfer GAN[15]還用於數據加強,這樣的使用能夠有效地減小CNN學習到的紋理誤差。
與上面提出的各類方法不一樣,專門設計了一些其餘bag of freebies來解決數據集語義分佈中可能存在的誤差問題。在處理語義分佈誤差問題時,一個很是重要的問題是不一樣類之間存在數據不平衡的問題,一般能夠經過如下方法解決此問題:否認示例挖掘[72]或在線示例在線挖掘[67] ]兩級物體檢測器。可是示例挖掘方法不適用於第一級目標檢測器,由於該檢測器屬於密集預測體系結構。所以,林等[45]提出了焦點損失來解決各個類別之間的數據不平衡問題。另外一個很是重要的問題是,很難使用one-hot來表達不一樣類別的相關性之間的關係。執行標記時常用此表示方案,在[73]中提出的標籤平滑將硬標籤轉換爲軟標籤以進行訓練,這可使模型更健壯。爲了得到更好的軟標籤,Islam等 [33]介紹了知識蒸餾的概念來設計標籤細化網絡。
最後bag of freebies是邊界框(BBox)迴歸的目標函數。傳統的物體檢測器一般使用均方偏差(MSE)直接對BBox的中心點座標以及高度和寬度執行迴歸,即{xcenter,ycenter,w,h}或左上角和右下角點,即{xtop_left,ytop_left,xbottom_right,ybottom_right }。對於anchor-based的方法,將估計相應的偏移量,例如{xcenter偏移量,ycenter偏移量,woffset,hoffset}和{xtop左偏移量,ytop左偏移量,xbottom右偏移量,ybottom右偏移量}。可是,直接估計BBox的每一個點的座標值是將這些點視爲獨立變量,但實際上並未考慮對象自己的完整性。爲了使這個問題獲得更好的處理,一些研究者最近提出了IoU損失[90],該方法考慮了預測的BBox區域和地面真實BBox區域的覆蓋範圍。IoU損失計算過程將經過使用基本事實執行IoU,而後將生成的結果鏈接到整個代碼中,觸發BBox的四個座標點的計算。由於IoU是尺度不變表示,因此能夠解決傳統方法計算{x,y,w,h}的L1或者L2損失時會隨着尺度增長的問題。最近,一些研究人員繼續改善IoU損失。例如,GIoU損失[65]除了覆蓋區域外還包括對象的形狀和方向。他們建議找到能夠同時覆蓋預測的BBox和地面真值BBox的最小面積BBox,並使用該BBox做爲分母來代替最初用於IoU損失的分母。至於DIoU損失[99],它還考慮了對象中心的距離,而CIoU損失[99]同時考慮了重疊區域,中心點之間的距離和縱橫比。CIoU能夠在BBox迴歸問題上實現更好的收斂速度和準確性。
2.3. Bag of specials
對於那些只增長少許推理代價卻能顯著提升目標檢測精度的插件模塊和後處理方法,咱們稱之爲「bag of specials」。通常來講,這些插件模塊是爲了加強模型中的某些屬性,如擴大接受域、引入注意機制、加強特徵集成能力等,後處理是篩選模型預測結果的一種方法。
能夠用來加強感覺野的經常使用模塊是SPP [25],ASPP [5]和RFB [47]。SPP模塊起源於空間金字塔匹配(SPM)[39],SPM的原始方法是將特徵圖分割爲幾個d×d個相等的塊,其中d能夠爲{1,2,3,…},從而造成空間金字塔,而後bag-of-word袋特徵。SPP將SPM集成到CNN中,並使用最大池化操做而不是bag-of-word。因爲He等人提出的SPP模塊[25]將輸出一維特徵向量,在全卷積網絡(FCN)中應用是不可行的。所以,在YOLOv3 [63]的設計中,Redmon和Farhadi將SPP模塊改進爲內核大小爲k×k的最大池化輸出的級聯,其中k = {一、五、九、13},步幅等於1。在這種設計下,相對較大的k×k最大池化有效地增長了骨幹特徵的接收場。在添加了改進版本的SPP模塊以後,YOLOv3-608在MS COCO對象檢測任務上將AP50升級了2.7%,而額外的計算費用爲0.5%。ASPP [5]模塊和改進的SPP模塊之間的操做差別主要在於原始k×k內核大小,步幅的最大池化等於1到幾個3×3內核大小,dilated ratio等於k,步幅等於在膨脹卷積運算中爲1。RFB模塊將使用k×k個核的膨脹卷積,膨脹比等於k,步幅等於1,以得到比ASPP更全面的空間覆蓋範圍。RFB [47]僅需花費7%的額外推理時間便可將MS COCO上SSD的AP50提升5.7%
物體檢測中常用的注意力模塊主要分爲channel-wise注意和point-wise注意,這兩種注意模型的表明是Squeeze-and-Excitation(SE)[29]和Spatial Attention Module (SAM) [85]。儘管SE模塊能夠將ImageNet圖像分類任務中的ResNet50的功能提升1%至top-1精度,但其代價僅是將計算工做量增長2%,但在GPU上一般會增長大約10%的推理時間,所以更適合在移動設備中使用。可是對於SAM,它只須要0.1%的額外費用,就能夠在ImageNet圖像分類任務上將ResNet50-SE的top-1準確性提升0.5%。最好的是,它根本不影響GPU上的推理速度。
在特徵集成方面,早期的實踐是使用t跳躍鏈接[51]或hyper-column [22]將低層物理特徵集成到高層語義特徵。因爲諸如FPN的多尺度預測方法已變得流行,所以提出了許多集成了不一樣特徵金字塔的輕量級模塊。這種模塊包括SFAM [98],ASFF [48]和BiFPN [77]。SFAM的主要思想是使用SE模塊在多尺度級聯特徵圖上執行通道級重加權。對於ASFF,它使用softmax做爲逐點級別的權重,而後添加不一樣比例的特徵圖。在BiFPN中,提出了多輸入加權殘差鏈接以執行按比例的級別從新加權,而後添加不一樣比例的特徵圖。
在深度學習的研究中,有些人專一於尋找良好的激活功能。良好的激活函數可使梯度更有效地傳播,同時不會引發過多的額外計算成本。Nair和Hinton [56]在2010年提出ReLU來基本上解決傳統的tanh和S形激活函數中常常遇到的梯度消失問題。隨後,LReLU [54],PReLU [24],ReLU6 [28],比例指數線性單位(SELU)[35],Swish [59],hard-Swish [27]和Mish [55]等還提出了用於解決梯度消失問題的方法。LReLU和PReLU的主要目的是解決輸出小於零時ReLU的梯度爲零的問題。至於ReLU6和Hard-Swish,它們是專門爲量化網絡設計的。爲了對神經網絡進行自歸一化,提出了SELU激活函數來知足這一目標。要注意的一件事是,Swish和Mish都是連續可區分的激活函數。
在基於深度學習的對象檢測中一般使用的後處理方法是NMS,它能夠用於過濾那些很差地預測同一對象的BBox,並僅保留具備較高響應的候選BBox。NMS嘗試改進的方法與優化目標函數的方法一致。NMS提出的原始方法沒有考慮上下文信息,所以Girshick等 [19]在R-CNN中添加了分類置信度得分做爲參考,而且根據置信度得分的順序,從高分到低分的順序執行了貪婪的NMS。對於soft NMS [1],考慮了物體的遮擋可能會致使貪婪的NMS的IoU評分置信度下降的問題。DIoU NMS [99]開發人員的思惟方式是在softNMS的基礎上將中心點距離的信息添加到BBox篩選過程當中。值得一提的是,因爲上述後處理方法均未直接涉及捕獲的圖像特徵,所以在隨後的anchor-free方法開發中再也不須要後處理。
表1:用於圖像分類的神經網絡參數。
3.方法
其基本目標是神經網絡在生產系統中的快速運行和並行計算的優化,而不是使用低計算量理論指標(BFLOP)。咱們提出了兩種實時神經網絡方案:
- 對於GPU,咱們在卷積層中使用少許的羣(1-8):CSPResNeXt50/CSPDarknet53
- 對於VPU-咱們使用分組卷積,但不要使用Squeeze-and-excitement (SE)塊-具體來講,它包括如下模型:EfficientNet-lite / MixNet [76] / GhostNet [21] / MobileNetV3
3.1Selection of architecture
咱們的**目標是在輸入網絡分辨率,卷積層數,參數數量(filter size2 * filters * channel / groups)和層輸出(過濾器)的數量之間找到最佳平衡。**例如,咱們的大量研究代表,就ILSVRC2012(ImageNet)數據集上的對象分類而言,CSPResNext50與CSPDarknet53相比要好得多[10]。可是,相反,在檢測MS COCO數據集上的對象方面,CSPDarknet53比CSPResNext50更好。
下一個目標是針對不一樣的檢測器級別從不一樣的主幹級別中選擇其餘塊來增長接收場和參數彙集的最佳方法: FPN,PAN,ASFF,BiFPN。
對於分類最佳的參考模型對於檢測器並不是老是最佳的。與分類器相比,檢測器須要知足如下條件:
- 更高的輸入網絡規模(分辨率)-用於檢測多個小型物體
- 更高的層數-更高的感覺範圍,以覆蓋輸入網絡不斷擴大的規模
- 更多參數–具備更大的模型容量,可在單個圖像中檢測不一樣大小的多個對象
假設,咱們能夠假設一個感覺野較大的模型(卷積層數爲3×3)和參數較多的模型做爲主幹。表1顯示了CSPResNeXt50、CSPDarknet53和EfficientNet B3的信息。CSPResNext50僅包含16個卷積層3×三、425×425感覺野和20.6M參數,CSPDarknet53包含29個卷積層3×三、725×725感覺野和27.6M參數。理論證實和大量實驗代表,CSPDarknet53神經網絡是兩者做爲探測器骨幹的最優模型。
不一樣大小的感覺野的影響總結以下:
- 最大對象大小-容許查看整個對象
- 最大網絡大小-容許查看對象周圍的上下文
- 超出網絡大小-增長圖像點和最終激活之間的鏈接數
咱們在CSPDarknet53上添加了SPP塊,由於它顯著地增長了接收場,分離出最重要的上下文特徵,而且幾乎沒有下降網絡運行速度。咱們用PANet代替YOLOv3中的FPN,從不一樣的主幹層對不一樣的檢測器層進行參數聚合。
最後,選擇CSPDarknet53骨幹網、SPP附加模塊、PANet path-aggregation neck和YOLOv3(基於錨的)頭部做爲YOLOv4的體系結構。(重點,網絡結構)
將來,咱們計劃大幅擴展用於探測器的Bag of Freebies(BoF)的內容,從理論上講,它能夠解決一些問題並提升探測器的準確性,並以實驗方式依次檢查每一個功能的影響。
咱們不使用跨GPU批量標準化(CGBN或SyncBN)或昂貴的專用設備。這使任何人均可以在常規圖形處理器上重現咱們的最新技術成果,例如 GTX 1080Ti或RTX 2080Ti。
3.2. Selection of BoF and BoS
爲了改進目標檢測訓練,CNN一般使用如下方法:
- 激活:ReLU、leaky ReLU、parametric ReLU、ReLU六、SELU、Swish或Mish
- 邊界框迴歸損失:MSE、IoU、GIoU、CIoU、DIoU
- 數據加強:剪切、混合、剪切
- 正則化方法:DropOut、DropPath[36]、space DropOut[79]或DropBlock
- 空間DropOut [79]或DropBlock
- 經過均值和方差對網絡激活進行歸一化:批歸一化(BN)[32],Cross-GPU批歸一化(CGBN或SyncBN)[93],過濾器響應歸一化(FRN)[70]或交叉迭代批歸一化(CBN)[89]
- 跳過鏈接:殘留鏈接,加權殘留鏈接,多輸入加權殘留鏈接或跨階段局部鏈接(CSP)
至於訓練激活函數,因爲PReLU和SELU更難訓練,而且ReLU6是專門爲量化網絡設計的,所以咱們將上述激活函數從候選列表中移除。在從新量化方法中,發表DropBlock的人詳細比較了他們的方法和其餘方法,他們的正則化方法贏得了不少。所以,咱們絕不猶豫地選擇DropBlock做爲正則化方法。至於規範化方法的選擇,因爲咱們關注的是一種只使用一個GPU的訓練策略,因此不考慮syncBN。
圖3:Mosaic表明了一種新的數據擴充方法。
3.3. 其餘改進
爲了使所設計的檢測器更適合單GPU的訓練,咱們作了以下的額外設計和改進:
- 咱們介紹了一種新的數據加強Mosaic, and Self-Adversarial Training (SAT)方法
- 咱們在應用遺傳算法的同時選擇了最佳超參數
- 咱們修改了一些現有方法,使咱們的設計適合進行有效的訓練和檢測-改進的SAM,改進的PAN和Cross mini-Batch Normalization(CmBN)
Mosaic表示一種新的數據加強方法,該方法混合了4個訓練圖像。所以,有4種不一樣的上下文混合,而CutMix僅混合2個輸入圖像。這樣能夠檢測正常上下文以外的對象。此外,批量歸一化從每層上的4張不一樣圖像計算激活統計信息。這大大減小了對大批量生產的需求。
Self-Adversarial Training (SAT)也表明了一項新的數據加強技術,該技術可在2個向前和向後的階段進行操做。在第一階段,神經網絡會更改原始圖像,而不是網絡權重。以這種方式,神經網絡對其自身執行對抗攻擊,從而改變原始圖像以產生對圖像上沒有指望物體的欺騙。在第二階段,訓練神經網絡以正常方式檢測此修改圖像上的對象。
CmBN表示CBN修改版本,如圖4所示,定義爲交叉微型批處理規範化(CmBN)。這僅收集單個批次中的迷你批次之間的統計信息。
咱們將SAM從空間注意改成點注意,並將PAN的快捷鏈接替換爲串聯,分別如圖5和圖6所示。
圖4:跨小批量標準化。
圖5:修改過的SAM。
圖6:改性平底鍋。
3.4. YOLOv4
在本節中,咱們將詳細介紹YOLOv4。
YOLOv4包括:
- 主幹網:CSPDarknet53[81]
- 頸部:SPP[25],PAN[49]
- 頭部:YOLOv3[63]
YOLO v4使用:
- Bag of Freebies (BoF) for backbone:CutMix和Mosaic數據加強,DropBlock正則化,類標籤平滑
- Bag of Specials (BoS) for backbone:Mish activation, Cross-stage partial connections (CSP), Multiinput weighted residual connections (MiWRC)
- Bag of Freebies (BoF) for detector:CIoU-loss, CmBN, DropBlock regularization, Mosaic data augmentation, Self-Adversarial Training, Eliminate grid sensitivity, Using multiple anchors for a single ground truth, Cosine annealing scheduler [52], Optimal hyperparameters, Random training shapes
- Bag of Specials (BoS) for detector::Mish activation, SPP-block, SAM-block, PAN path-aggregation block, DIoU-NMS
4.實驗
在ImageNet(ILSVRC 2012 val)數據集上測試了不一樣訓練改進技術對分類器精度的影響,而後在MS-COCO(test dev 2017)數據集上測試了檢測器的精度。
4.1實驗設置
在ImageNet圖像分類實驗中,默認的超參數以下:訓練步驟爲8,000,000;批量大小和最小批量大小分別爲128和32;採用多項式衰減學習率調度策略,初始學習率爲0.1。預熱步驟(warm-up steps)爲1000;動量和權重衰減分別設置爲0.9和0.005。咱們全部的BoS實驗都使用與默認設置相同的超參數,而且在BoF實驗中,咱們添加了額外的50%訓練步驟。在BoF實驗中,咱們驗證了MixUp,CutMix,Mosaic,模糊數據加強和標籤平滑正則化方法。在BoS實驗中,咱們比較了LReLU,Swish和Mish激活功能的效果。全部實驗均使用1080 Ti或2080 Ti GPU進行訓練
在MS COCO對象檢測實驗中,默認的超參數以下:訓練步驟是500,500;採用步階衰減學習率調度策略,初始學習率爲0.01,並分別在400,000步和450,000步處乘以係數0.1。動量和權重衰減分別設置爲0.9和0.0005。全部架構都使用單個GPU以64的批量大小執行多尺度訓練,而最小批量大小是8或4,這取決於架構和GPU內存限制。除了使用遺傳算法進行超參數搜索實驗外,全部其餘實驗均使用默認設置。遺傳算法使用YOLOv3-SPP訓練GIoU損失,並搜索300個紀元的最小值5k集。對於遺傳算法實驗,咱們採用搜索學習率0.00261,動量0.949,IoU閾值來分配ground truth 0.213,並使用損失歸一化器0.07。咱們已經驗證了大量BoF,包括消除網格敏感度,鑲嵌數據加強,IoU閾值,遺傳算法,類標籤平滑,交叉小批量標準化,自對抗訓練,餘弦退火調度程序,動態小批量大小,DropBlock,優化錨,不一樣類型的IoU損失。咱們還對各類BoS進行了實驗,包括Mish,SPP,SAM,RFB,BiFPN和高斯YOLO [8]。對於全部實驗,咱們僅使用一個GPU進行訓練,所以未使用可優化多個GPU的諸如syncBN之類的技術。
圖7:各類數據擴充方法。
表2:BoF和Mish對CSPRESEXT-50分級機精度的影響。
表3:BoF和Mish對CSPDarknet-53分級機精度的影響。
4.2不一樣特徵對分類器訓練的影響
首先,咱們研究不一樣特徵對分類器訓練的影響;具體來講,如圖7所示,類別標籤平滑化的影響,不一樣數據加強技術的影響,雙邊模糊,MixUp,CutMix和Mosaic的影響,以及Leaky-ReLU(默認狀況下),Swish等不一樣激活的影響和Mish。
在咱們的實驗中,如表2所示,經過引入如下功能提升了分類器的準確性:**CutMix和Mosaic數據加強,類標籤平滑和Mish激活。**所以,咱們用於分類器訓練的BoFbackbone(Bag of Freebies))包括如下內容:CutMix和Mosaic數據加強和類標籤平滑。此外,咱們使用Mish激活做爲補充選項,如表2和表3所示。
表4:免費包消融研究。(CSPResNeXt50面板SPP,512x512)。
4.3不一樣特徵對探測器訓練的影響
進一步的研究涉及到不一樣的Bag-of Freebies(BoF-detector)對探測器訓練精度的影響,如表4所示。咱們經過研究在不影響FPS的狀況下提升探測器精度的各類功能來顯着擴展BoF列表:
- S: 消除網格敏感度,公式bx =σ(tx)+ cx,其中cx和cy始終是整數,在YOLOv3中用於評估對象座標,所以,對於接近c x或cx + 1值的bx值,須要很是高的tx絕對值。基本事實咱們經過將sigmoid乘以超過1.0的因數來解決此問題,從而消除了沒法檢測到物體的網格的影響。
- M:鑲嵌數據擴充-在訓練過程當中使用4幅圖像而非單幅圖像
- IT:IoU閾值-對單個ground truth IoU(真相,錨點)> IoU閾值使用多個錨點
- GA:遺傳算法-使用遺傳算法在網絡訓練的前10%的時間段內選擇最佳超參數•
- LS:類標籤平滑-使用類標籤平滑進行S型激活
- CBN:CmBN-使用交叉mini-batch收集整個批次內的統計信息,而不是在單個mini-batch內收集統計信息
- CA:餘弦退火調度程序-在正弦曲線訓練期間更改學習率
- DM:動態微型批次尺寸-在小分辨率下自動增長微型批次尺寸使用隨機訓練形狀進行訓練
- OA:優化的錨點-使用優化的錨點以512x512網絡分辨率進行訓練
- GIoU,CIoU,DIoU,MSE-使用不一樣的損失算法進行有界框迴歸
進一步的研究涉及不一樣的Bagof-Specials(BoS-探測器)對探測器訓練精度的影響,包括PAN,RFB,SAM Gaussian YOLO 和ASFF,如表5所示。在咱們的實驗中,探測器得到了使用SPP,PAN和SAM時的最佳性能。
表5:特殊包的消融研究。(尺寸512x512)。
4.4不一樣骨幹和預訓練重量對探測器訓練的影響
進一步,咱們研究了不一樣主幹模型對檢測器精度的影響,如表6所示。咱們注意到,具備最佳分類精度的模型在檢測器精度方面並不老是最佳的。
首先,儘管與CSPDarknet53模型相比,通過不一樣功能訓練的CSPResNeXt50模型的分類準確性更高,可是CSPDarknet53模型在對象檢測方面顯示出更高的準確性。
其次,將BoF和Mish用於CSPResNeXt50分類器訓練可提升其分類精度,可是將這些預訓練權重進一步用於檢測器訓練會下降檢測器準確性。可是,對CSPDarknet53分類器訓練使用BoF和Mish能夠提升分類器和使用該分類器預訓練加權的檢測器的準確性。
最終結果是,骨幹CSPDarknet53比CSPResNeXt50更適合於檢測器。咱們觀察到,因爲各類改進,CSPDarknet53模型顯示出提升檢測器精度的更大能力。
表6:使用不一樣的分類器預訓練權重進行檢測器訓練(全部其餘訓練參數在全部模型中都類似)。
4.5不一樣小批量對檢測器訓練的影響
最後,咱們分析了使用不一樣小批量大小訓練的模型得到的結果,結果顯示在表7中。從表7中顯示的結果中,咱們發如今添加BoF和BoS訓練策略以後,小批量大小對檢測器的性能幾乎沒有影響。該結果代表,在引入BoF和BoS以後,再也不須要使用昂貴的GPU進行訓練。換句話說,任何人都只能使用常規的GPU來訓練出色的檢測器。
5.結論
圖8顯示了與其餘最早進的目標探測器的比較結果。咱們的YOLOv4位於Pareto最優曲線上,在速度和精度方面都優於最快和最精確的檢測器。
因爲不一樣的方法使用不一樣體系結構的gpu進行推理時間驗證,咱們對經常使用的Maxwell、Pascal和Volta體系結構的gpu進行了YOLOv4運算,並與其餘最新方法進行了比較。表8列出了使用Maxwell GPU的幀速率比較結果,能夠是GTX Titan X(Maxwell)或Tesla M40 GPU。表9列出了使用Pascal GPU的幀速率比較結果,能夠是Titan X(Pascal)、Titan Xp、GTX 1080 Ti或Tesla P100 GPU。至於表10,它列出了使用Volta GPU的幀速率比較結果,能夠是Titan Volta或Tesla V100 GPU。
圖8:不一樣目標探測器的速度和精度比較。(有些文章只對其中一個gpu的FPS進行了說明:Maxwell/Pascal/Volta)
表8:MS COCO數據集上不一樣目標探測器的速度和精度比較(testdev 2017)。(此處突出顯示FPS 30或更高的實時探測器。咱們將結果與batch=1進行比較,而不使用tensorRT。)
表9:MS COCO數據集上不一樣目標探測器的速度和精度比較(測試開發2017)。(此處突出顯示FPS 30或更高的實時探測器。咱們將結果與batch=1進行比較,而不使用tensorRT。)
表10:MS COCO數據集上不一樣目標探測器的速度和精度比較(測試開發2017)。(此處突出顯示FPS 30或更高的實時探測器。咱們將結果與batch=1進行比較,而不使用tensorRT。)
6.總結
咱們提供最早進的探測器,比全部可用的替代探測器更快(FPS)和更精確(MS COCO AP50…95和AP50)。所述檢測器可在8-16gb-VRAM的傳統GPU上訓練和使用,這使得其普遍應用成爲可能。一級錨定探測器的最初概念已經證實了它的可行性。咱們已經驗證了大量的特徵,並選擇使用這些特徵來提升分類器和檢測器的精度。這些特性能夠做爲從此研究和開發的最佳實踐。
7.感謝
做者但願感謝格倫Jocher提出的馬賽克數據加強、利用遺傳算法選擇超參數以及解決網格敏感性問題的思想https://github.com/ultralytics/yolov3
文獻
略