YOLOv4團隊開源最新力作!1774fps、COCO最高精度,分別適合高低端GPU的YOLO

2021-02-16 極市平臺

論文標題: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

Abstract

該文提出一種「網路擴展(Network Scaling)」方法,它不僅針對深度、寬度、解析度進行調整,同時調整網絡結果,作者將這種方法稱之為Scaled-YOLOv4。

由此得到的YOLOv4-Large取得了SOTA結果:在MS-COCO數據集上取得了55.4%AP(73.3% AP50),推理速度為15fps@Tesla V100;在添加TTA後,該模型達到了55.8%AP(73.2%AP50)。截止目前,在所有公開論文中,YOLOv-Large在COCO數據集上取得最佳指標。而由此得到的YOLOv4-tiny取得了22.0%AP(42.0%AP50),推理速度為443fps@TRX 2080Ti;經由TensorRT加速以及FP16推理,batchsize=4時其推理速度可達1774fps。

該文的主要貢獻包含以下幾點:

設計了一種強有力的「網絡擴展」方法用於提升小模型的性能,可以同時平衡計算複雜度與內存佔用;分析了模型擴展因子之間的相關性並基於最優劃分進行模型擴展;通過實驗證實: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)並嘗試理解其相對於輸入大小、層數、通道數等的定量損失。

對於包含k層b個通道的CNN而言,ResNet的計算量為:

ResNeXt的是:

DarkNet的是:

假設用於調整圖像大小、層數以及通道數的因子分別為

CSPNet可以應用與不同的CNN架構中,且可以降低參數量與計算量,同時還可以提升精度與降低推理耗時。下表給出了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 .

相比大模型,輕量型模型的不同之處在於:參數利用率更高(保採用更少的計算量獲得更高的精度)。當進行模型擴展時,我們期望計算複雜度要儘可能的低。下表給出了兩種可以高效利用參數的模型對比。

對於通用CNN來說,

Minimize/balance size of feature map.

為獲得最佳的推理速度-精度均衡,作者提出了一個新的概念用於在CPSOSANet計算模塊之間進行梯度截斷。如果把CSPNet設計思想用到DenseNet或者R二十Net架構中,由於第當通道數為 。事實上,我們還要考慮硬體的帶寬CSPOSANet可以動態的調整通道分配

Maintain the same number of channels after convolution

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

其中Minimize Convolutional Input/Output(CIO)

CIO是一個用來評價DRAM的IO狀態的度量準則,下表給出了OSA,CSP的CIO對比。當

Scaling Large Models for High-End GPUS

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

圖像分類與目標檢測的最大區別在於:前者僅需要對圖像中的最大成分進行分類,而後者則需要預測圖像中每個目標的位置。在單階段目標檢測器中,每個位置的特徵向量用於預測類別、目標的大小,而目標大小的預測則依賴於特徵向量的感受野。在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階段的計算量為

Neck

更有效的降低參數量,作者將PAN架構引入到YOLOv4中。PAN架構的處理流程見下圖a,它主要集成了來自不同特徵金字塔的特徵。改進後的處理流程見下圖b,它還同時引入了ChannelSplitting機制。這種新的處理方式可以節省40%計算量。

SPP

原始的SPP模塊位於Neck中間部分,作者同樣將SPP插入到CSPPAN中間位置,見上圖b。

YOLOv4-tiny

YOLOv4是專為低端GPU而設計的一種架構,其計算模塊見下圖。在這裡,作者採用CSPOSANet+PCB架構構成了YOLOv4的骨幹部分。

在計算模塊中,

YOLOv4-large

YOLOv4-large是專為雲端GPU而設計的一種架構,主要目的在於獲得更好的目標檢測精度。作者基於前述分析設計了一個全尺寸的YOLOv4-P5並擴展得到了YOLOv4-P6和YOLOv4-P7。其對應的網絡結構示意圖見下圖。

作者通過實驗發現:YOLOv4-P6(寬度縮放因子1)可以達到30fps的實時處理性能;YOLOv4-P7(寬度縮放因子1.25)可以達到15fps的處理速度。

Experiments

作者在MSCOCO-2017數據集上驗證了所提Scaled-YOLOv4的性能,作者提到並未採用ImageNet進行預訓練,所有YOLOv4模型均從頭開始訓練。YOLOv4-tiny的訓練了600epoch;YOLOv4CSP訓練了300epoch;YOLOv4-large先訓練了300epoch,然後採用更強的數據增廣技術訓練了150epoch。其他訓練相關的超參作者採用k-mean與遺傳算法決定。

Ablation study on CSP-ized model

作者首先針對CSP-ized模型進行了消融實驗分析,結果見下表。作者從參數量、計算量、處理流程以及平均精度方面進行了CSP-ization的影響性分析。作者採用Darknet53作為骨幹網絡,選擇FPN+SPP與PAN+SPP作為neck進行消融分析。作者同時還採用了LeakyReLU與Mish進行對比分析。

從上表可以看到:CSP-ized模型可以極大的降低參數量與計算量達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倍。類似現象可見: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優化後的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

相關焦點

  • 你的YOLO V4該換了 | YOLO V4原班人馬改進Scaled YOLO V4,已開源(附論文+源碼)
    點擊訂閱【人工智慧初學者】,讓我們一起前行YOLOv4-large在COCO上最高可達55.8 AP!速度也高達15 FPS!YOLOv4-tiny的模型實現了1774 FPS!YOLOv4-tiny模型在RTX 2080Ti上以443FPS/s的速度實現了22.0%的AP(42.0%AP50),而使用TensorRT,batchsize=4和FP16精度,YOLOv4-tiny的模型實現了1774FPS/s。
  • 【源頭活水】YOLO之外的另一選擇,手機端97FPS的Anchor-Free目標檢測模型NanoDet現已開源~
    地址:https://www.zhihu.com/people/lu-cheng-qi-85華為P30上用NCNN移植跑benchmark,每幀僅需10.23毫秒,比yolov4-tiny快3倍,參數量小6倍,COCO mAP(0.5:0.95)能夠達到20.6 。
  • yolov5實戰之皮卡丘檢測
    按類似目錄方式防止數據,yolov5通過將圖片路徑中最後一個images換成labels去尋找對應的標籤coco/images/000000109622.jpg # imagecoco/labels/000000109622.txt # label本文中用的數據來源於 目標檢測數據集(皮卡丘) 中,但原文是mxnet用的rec格式,因此需要轉換成yolo格式。
  • PP-YOLO超越YOLOv4-目標檢測的進步
    當然,開源社區接過了指揮棒,繼續推動YOLO技術的發展。YOLOv4最近由Alexey AB在他的YOLO Darknet存儲庫中發表。YOLOv4主要是其他已知的計算機視覺技術的集合,通過研究過程進行了組合和驗證。請看這裡深入了解YOLOv4。
  • YOLOV4
    YOLO的純正血統的,因為Alexey就是前幾代yolo代碼在github上的維護者。現在yolov4和EfficientDet的D2網絡相比,精度相當,但是速度要快出D2的兩倍。V4相比V3,精度提升了10%,速度提升12%從文章數據來看,V4並不追求刷榜數據,其主要目的是設計一個能在實際工程中的應用的,且更快的目標檢測器,通過優化並行計算而不是降低理論計算量(BFLOP),不管理論計算量有多小,跑的快才是真的好!
  • 深度學習第31講:目標檢測算法經典論文研讀之 yolo v2/yolo 9000
    這樣做的一個問題在於從訓練模型切換到檢測模型時,模型需要對輸入大小做出調整,這在一定程度上影響了 yolo v1 的準確性。而 yolo v2 的改進方案在於在預訓練時先在 224 x 224 的輸入上訓練 160 輪,然後再調整輸入大小至 448 x 448,再訓練個 10 輪,此時再像檢測網絡切換時網絡就無需進行輸入尺寸的適應了。實驗表明通過這樣的改進使得 mAP 提升了 4%。
  • YOLOv5在建築工地中安全帽佩戴檢測的應用(已開源+數據集)
    該項目使用了YOLOv5s、YOLOv5m、YOLOv5l來訓練安全帽佩戴檢測數據集,代碼和權重均已開源!安全帽佩戴檢測數據集也是開源的(共含7581 張圖像)!項目教程也相當詳細,推薦入門練手學習!而且有意思的是,該項目和數據集的兩位作者均是中國人,點讚!
  • PyTorch版YOLOv4更新了,不僅適用於自定義數據集,還集成了注意力和...
    近日,有研究者在 GitHub 上開源了一個項目:基於 PyTorch 深度學習框架的 YOLOv4 復現版本,該版本基於 YOLOv4 作者給出的實現 AlexeyAB/darknet,並在 PASCAL VOC、COCO 和自定義數據集上運行。
  • YOLO v5 實現目標檢測(參考數據集&自製數據集)
    、寫作動機由於博主當前的研究問題涉及到圖片的局部圖像提取,於是決定使用目前比較流行且高效的目標檢測網絡框架YOLOv5(雖然其沿用了社區的版本號v5,但只是ultralytics團隊的開源實現,並未獲得官方的認可,此處暫且按下不表)來完成實驗任務。
  • 一文看懂YOLOv5(含網絡結構)
    之前已經對Yolov4的相關基礎知識做了比較系統的梳理(深入淺出Yolov3和Yolov4),但Yolov4後不久,又出現了Yolov5,雖然作者沒有放上和Yolov4的直接測試對比,但在COCO數據集的測試效果還是很可觀的。很多人考慮到Yolov5的創新性不足,對算法是否能夠進化,稱得上Yolov5而議論紛紛。
  • 深入淺出的Yolov5核心基礎知識完整講解
    四種網絡模型Yolov5官方代碼中,給出的目標檢測網絡中一共有4個版本,分別是Yolov5s、Yolov5m、Yolov5l、Yolov5x四個模型。Yolov5s網絡最小,速度最少,AP精度也最低。但如果檢測的以大目標為主,追求速度,倒也是個不錯的選擇。其他的三種網絡,在此基礎上,不斷加深加寬網絡,AP精度也不斷提升,但速度的消耗也在不斷增加。
  • 深度學習筆記 | 第7講:CNN目標檢測發家史之從R-CNN到yolo
    Mask R-CNN 在 coco 測試集上的圖像分割效果如下:縱然兩步走的目標檢測算法在不斷進化,檢測準確率也越來越高,但兩步走始終存在的速度的瓶頸。在一些實時的目標檢測需求的場景中,R-CNN 系列算法終歸是有所欠缺。因而一步走(one-stage)算法便應運而生了,其中以 yolo 算法系列為代表,演繹了一種端到端的深度學習系統的實時目標檢測效果。
  • 如何理解YOLO:YOLO詳解
    使用titan x GPU,fast YOLO可以達到155fps的檢測速度,但是mAP值也從YOLO的63.4%降到了52.7%,但卻仍然遠高於以往的實時物體檢測方法(DPM)的mAP值。2.2 輸出representation定義本部分給出YOLO全連接輸出層的定義。
  • 1.8M超輕量目標檢測模型NanoDet,比YOLO跑得快,上線兩天Star量超200
    模型性能目前開源的 NanoDet-m 模型在 320x320 輸入解析度的情況下,整個模型的 Flops 只有 0.72B,而 yolov4-tiny 則有 6.96B,小了將近十倍。模型的參數量也只有 0.95M,權重文件在使用 ncnn optimize 進行 16 位存儲之後,只有 1.8mb。
  • 1.8M超輕量目標檢測模型NanoDet,比YOLO快,上線兩天Star量超200
    模型性能目前開源的 NanoDet-m 模型在 320x320 輸入解析度的情況下,整個模型的 Flops 只有 0.72B,而 yolov4-tiny 則有 6.96B,小了將近十倍。在這種設置下,320 解析度輸入能夠達到 20.6 的 mAP,比 tiny-yolov3 高 4 分,只比 yolov4-tiny 低 1 個百分點。在將輸入解析度與 YOLO 保持一致,都使用 416 輸入的情況下,NanoDet 與 yolov4-tiny 得分持平。
  • YOLOv5 對決 Faster RCNN,誰贏誰輸?
    這些模型的推理速度和平均精度均值(mean average precision,mAP)如下圖所示:第一步就是克隆 YOLO-v5 的 repo,並安裝所有的依賴要求。我使用的是 PyTorch 1.5,代碼可以正常工作,沒有任何問題。
  • YOLOv5的妙用:學習手語,幫助聽力障礙群體
    建模David 選擇使用 YOLOv5 進行建模。將數據集中 90% 的圖像用作訓練數據,10% 的圖像用作驗證集。使用遷移學習和 YOLOv5m 預訓練權重訓練 300 個 epoch。在驗證集上成功創建具備標籤和預測置信度的新邊界框。由於損失值並未出現增長,表明模型未過擬合,因此該模型或許可以訓練更多輪次。
  • 【項目實踐】Pytorch YOLO項目推薦 建議收藏學習
    推薦項目Pytorch-YOLOv3項目地址:https://github.com/eriklindernoren/PyTorch-YOLOv3項目特點:代碼簡潔,適合學習,最原始的YOLOV3實現,沒有什麼特殊Trick。
  • 目標檢測介紹之---- YOLO V1 到 V4
    YOLOv2 題目:YOLO9000: Better, Faster, Stronger    下面分別從Better,Faster,Stronger三個方面分別介紹。Better1. 網絡結構的改變    VGG16的複雜度非常高,對於單張224×224解析度的圖像,VGG-16的卷積層需要30.69billion的浮點數操作。而基於Googlenet的定製網絡,雖然比VGG16快,但精度比VGG16差一些。v2提出了網絡Darknet-19。
  • 寫給小白的YOLO介紹(二)
    目標檢測是基於監督學習的,每張圖片的監督信息是它所包含的N個物體,每個物體的信息有五個,分別是物體的中心位置(x,y)和它的高(h)和寬(w),最後是它的類別。YOLO 的預測是基於整個圖片的,並且它會一次性輸出所有檢測到的目標信息,包括類別和位置。