YOLOv4團隊開源最新力作!1774fps、COCO最高精度,分別適合高低端GPU的YOLO
本文是YOLOv4的原班人馬(包含CSPNet一作與YOLOv4一作AB大神)在YOLO系列的繼續(xù)擴展,從影響模型擴展的幾個不同因素出發(fā),提出了兩種分別適合于低端GPU和高端GPU的YOLO。該文所提出的YOLO-large在MSCOCO取得前所未有的精度(已公開的研究成果中最佳),且可以保持實時推理;所提出的YOLO-tiny在RTX 2080Ti顯卡上結合TensorRT+FP16等技術,可以達到驚人的1774FPS@batch=4.

論文標題:Scaled-YOLOv4:Scaling Cross Stage Partial Network
鏈接:https://arxiv.org/2011.08036
代碼:?https://github.com/WongKinYiu/ScaledYOLOv4
YOLOv4-CSP: https://github.com/WongKinYiu/ScaledYOLOv4/tree/yolov4-csp
YOLOv4-tiny: https://github.com/WongKinYiu/ScaledYOLOv4/tree/yolov4-tiny
YOLOv4-large: https://github.com/WongKinYiu/ScaledYOLOv4/tree/yolov4-large
本文首發(fā)自極市平臺,作者@Happy,轉載需獲授權。
Abstract
該文提出一種“網路擴展(Network Scaling)”方法,它不僅針對深度、寬度、分辨率進行調整,同時調整網絡結果,作者將這種方法稱之為Scaled-YOLOv4。
由此得到的YOLOv4-Large取得了SOTA結果:在MS-COCO數(shù)據集上取得了55.4%AP(73.3% AP50),推理速度為15fps@Tesla V100;在添加TTA后,該模型達到了55.8%AP(73.2%AP50)。截止目前,在所有公開論文中,YOLOv-Large在COCO數(shù)據集上取得最佳指標。而由此得到的YOLOv4-tiny取得了22.0%AP(42.0%AP50),推理速度為443fps@TRX 2080Ti;經由TensorRT加速以及FP16推理,batchsize=4時其推理速度可達1774fps。
該文的主要貢獻包含以下幾點:
設計了一種強有力的“網絡擴展”方法用于提升小模型的性能,可以同時平衡計算復雜度與內存占用;
設計了一種簡單而有效的策略用于擴展大目標檢測器;
分析了模型擴展因子之間的相關性并基于最優(yōu)劃分進行模型擴展;
通過實驗證實:FPN structure is inherently a once-for-all structure
基于前述分析設計了兩種高效模型:YOLOv4-tiny與YOLOv4-Large。

Principles of model scaling
在這部分內容里面,我們將討論一下模型擴展的一些準則。從三個方面展開介紹:(1) 量化因子的分析與設計;(2) 低端GPU上tiny目標檢測器的量化因子;(3) 高端GPU上目標檢測器的量化因子設計分析。
General principle of model scaling
When the scale is up/down, the lower/higher the quantitative cost we want to increase/decrease, the better. ?----author
上面給出了模型擴展所需要考慮的一些因素。接下來,我們將分析幾種不同的CNN模型(ResNet, ResNeXt, DarkNet)并嘗試理解其相對于輸入大小、層數(shù)、通道數(shù)等的定量損失。
對于包含k層b個通道的CNN而言,ResNet的計算量為:

ResNeXt的是:

DarkNet的是:

假設用于調整圖像大小、層數(shù)以及通道數(shù)的因子分別為??,β,??,其調整對應的FLOPs變化見下表,可以看到:它們與FLOPs提升的關系分別是square, linear, square
。

CSPNet可以應用與不同的CNN架構中,且可以降低參數(shù)量與計算量,同時還可以提升精度與降低推理耗時。下表給出了CSPNet應用到ResNet,ResNeXt與DarkNet時的FLOPs變化,可以看到:新的架構可以極大的降低計算量,ResNet降低23.5%,ResNeXt降低46.7%,DarkNet降低50.0%。因此CSP-ized是適合模型擴張的最佳模型。
Scaling Tiny Models for Low-End Devices
對于低端設備而言,模型的推理速度不僅受計算量、模型大小影響,更重要的是,外部設備的硬件資源同樣需要考慮。因此,當進行tiny模型擴展時,我們必須考慮帶寬、MACs、DRAM等因素。為將上述因素納入考量范圍,其設計原則需要包含西面幾個原則:
Make the order of computation less than O(whkb).
相比大模型,輕量型模型的不同之處在于:參數(shù)利用率更高(保采用更少的計算量獲得更高的精度)。當進行模型擴展時,我們期望計算復雜度要盡可能的低。下表給出了兩種可以高效利用參數(shù)的模型對比。

對于通用CNN來說,g,b,k之間的性見上表(k<<g<b)。因此,DenseNet的計算復雜度為O(whgbk),OSANet的計算復雜度為O(max(whbg,whkg2))。兩者的計算復雜度階段都比ResNet(O(whkb2))的更低。在這里作者選用了OSANet作為tiny模型的選型。
Minimize/balance size of feature map.


Maintain the same number of channels after convolution
對于低端設備的計算復雜度評估,我們還需要考慮功耗,而影響功耗的最大因素當屬MAC(memory access cost)。通常來說,卷積的MAC計算方式如下:


Minimize Convolutional Input/Output(CIO)
CIO是一個用來評價DRAM的IO狀態(tài)的度量準則,下表給出了OSA,CSP的CIO對比。當kg>b/2時,本文所提出的CSPOSANet具有最佳CIO。

Scaling Large Models for High-End GPUS
由于我們期望提升擴張CNN模型的精度,同時保持實時推理速度,這就要求我們需要從目標檢測器的所有擴展因子中尋找最佳組合。通常而言,我們可以調整目標檢測器的輸入、骨干網絡以及neck的尺度因子,潛在的尺度因子見下表。

圖像分類與目標檢測的最大區(qū)別在于:前者僅需要對圖像中的最大成分進行分類,而后者則需要預測圖像中每個目標的位置。在單階段目標檢測器中,每個位置的特征向量用于預測類別、目標的大小,而目標大小的預測則依賴于特征向量的感受野。在CNN中,與感受野最相關的當屬stage,而FPN結構告訴我們:更高的階段更適合預測大目標。

上表匯總了與感受野相關因素,可以看到:寬度擴展不會影響感受野。當輸入圖像分辨率提升后,為保持感受野不變,那么就需要提升depth或者stage。也及時說:depth和stage具有最大的影響。因此,當進行向上擴增時,我們需要在輸入分辨率、stage方面進行擴增以滿足實時性,然后再進行depth和width的擴增。
Scaled-YOLOv4
接下來,我們將嘗試把YOLOv4擴展到不同的GPU(包含低端和高端GPU)。
CSP-ized YOLOv4
YOLOv4是一種針對通用GPU設計的實時目標檢測方案。在這里,作者對YOLOv4進行重新設計得到YOLOv4-CSP以獲取最佳的速度-精度均衡。
Backbone
在CSPDarknet53的設計中,跨階段的下采樣卷積計算量并未包含在殘差模塊中。因此,作者推斷:每個CSPDarknet階段的計算量為

從該推斷出發(fā),CSPDarknet比DarkNet具有更好的計算量優(yōu)勢(k>1)。CSPDarkNet53每個階段的殘差數(shù)量分別為1-2-8-8-4。為得到更好的速度-精度均衡,作者將首個CSP階段轉換為原始的DarkNet殘差層。
Neck
更有效的降低參數(shù)量,作者將PAN架構引入到YOLOv4中。PAN架構的處理流程見下圖a,它主要集成了來自不同特征金字塔的特征。改進后的處理流程見下圖b,它還同時引入了ChannelSplitting機制。這種新的處理方式可以節(jié)省40%計算量。

SPP
原始的SPP模塊位于Neck中間部分,作者同樣將SPP插入到CSPPAN中間位置,見上圖b。
YOLOv4-tiny
YOLOv4是專為低端GPU而設計的一種架構,其計算模塊見下圖。在這里,作者采用CSPOSANet+PCB架構構成了YOLOv4的骨干部分。

在計算模塊中,g=b/2,b/2+kg=2b。通過計算,作者推斷得到k=3,其對應的計算單元示意圖見上圖。至于YOLOv4-tiny的通道數(shù)信息,作者延續(xù)了YOLOv3-tiny的設計。
YOLOv4-large
YOLOv4-large是專為云端GPU而設計的一種架構,主要目的在于獲得更好的目標檢測精度。作者基于前述分析設計了一個全尺寸的YOLOv4-P5并擴展得到了YOLOv4-P6和YOLOv4-P7。其對應的網絡結構示意圖見下圖。

作者通過實驗發(fā)現(xiàn):YOLOv4-P6(寬度縮放因子1)可以達到30fps的實時處理性能;YOLOv4-P7(寬度縮放因子1.25)可以達到15fps的處理速度。
Experiments
作者在MSCOCO-2017數(shù)據集上驗證了所提Scaled-YOLOv4的性能,作者提到并未采用ImageNet進行預訓練,所有YOLOv4模型均從頭開始訓練。YOLOv4-tiny的訓練了600epoch;YOLOv4CSP訓練了300epoch;YOLOv4-large先訓練了300epoch,然后采用更強的數(shù)據增廣技術訓練了150epoch。其他訓練相關的超參作者采用k-mean與遺傳算法決定。
Ablation study on CSP-ized model
作者首先針對CSP-ized模型進行了消融實驗分析,結果見下表。作者從參數(shù)量、計算量、處理流程以及平均精度方面進行了CSP-ization的影響性分析。作者采用Darknet53作為骨干網絡,選擇FPN+SPP與PAN+SPP作為neck進行消融分析。作者同時還采用了LeakyReLU與Mish進行對比分析。

從上表可以看到:CSP-ized模型可以極大的降低參數(shù)量與計算量達32%,同時帶來性能上的提升;同時還可以看到:CD53s-CFPNSPP-Mish、CD53s-CPANSPP-Leaky與D53-FPNSPP-Leaky相同的推理速度,但具有更高的指標(分別搞1%和1.6%AP),且具有更低的計算量。
Ablation study on YOLOv4-tiny
接下來,我們將通過實驗來證實:CSPNet+partial的靈活性。作者將其與CSP-Darknet53進行了對比,結果見下表。

從上表可以看到:所設計的PCB技術可以使模型更具靈活性,因為它可以更具實際需要進行結構調整。同時也證實:線性縮放方式的局限性。作者最終選擇COSA-2x2x作為YOLOv4-tiny,因其取得最佳的精度-速度均衡。
Scaled-YOLOv4 for object detection
上圖給出了本文所提Scaled-YOLOv4與其他SOTA目標檢測方法的對比,可以看到:所提方法在不同約束下均取得了最佳的均衡。比如,YOLOv4-CSP與EfficientDet-D3具有相同的精度,但具有更開的推理速度(1.9倍);YOLOv4-P5與EfficientDet-D5具有相同的精度,推理速度則快2.9倍。類似現(xiàn)象可見:YOLOv4-P6 vs EfficientDet-D7, YOLOv4-P7 vs EfficientDet-D7x。更重要的是:所有Scaled-YOLOv4均達到了SOTA結果。
與此同時,作者還給出了添加TTA后的YOLOv4-large性能,可以看到分別可以得到1.1%,0.6%與0.4%AP的指標提升。
作者還對比了YOLOv4-tiny與其他tiny目標檢測器的性能對比,見下表。可以看到:YOLOv4-tiny取得了最佳的性能。

最后,作者在不同的嵌入式GPU上測試了YOLOv4-tiny的性能,見下圖。可以看到:無論哪種硬件平臺下,YOLOv4-tiny均可以達到實時性。經過TensorRT FP16優(yōu)化后的YOLOv40tiny最高可以達到1774fps的推理速度。

YOLO系列相關文章
1. YOLOv1: https://arxiv.org/abs/1506.026402. YOLO9000:https://arxiv.org/abs/1612.082423. YOLOv3: https://arxiv.org/abs/1804.027674. YOLO-Lite: https://arxiv.org/abs/1811.055885. Gaussian YOLOv3: https://arxiv.org/1904.046206. REQ-YOLO: https://arxiv.org/abs/1909.133967. xYOLO: https://arxiv.org/abs/1910.031598. YOLO-Nano: https://arxiv.org/abs/1910.012719. CSPNet:https://arxiv.org/abs/1911.1192910. YOLOv4: https://arxiv.org/abs/2004.1093411. Poly-YOLO: https://arxiv.org/abs/2005.1324312. PP-YOLO: https://arxiv.org/abs/2007.12099