CVPR 2023|YOLOv7強勢收錄!時隔6年,YOLOv系列再登CVPR!

極市平臺 發佈 2024-04-08T01:02:06.141546+00:00

在5FPS到160FPS的範圍內,無論是速度或是精度,YOLOv7都超過了目前已知的檢測器,並且在GPU V100上進行測試, 精度為56.8% AP的模型可達到30 FPS以上的檢測速率,與此同時,這是目前唯一一款在如此高精度下仍能超過30FPS的檢測器。

作者丨GiantPandaCV

來源丨陳er

編輯丨極市平台

Alexey Bochkovskiy 宣布 YOLOv7 收錄 CVPR 2023!

時隔 6 年,YOLOv 系列再登頂會 CVPR!(最近的是YOLOv2 CVPR 2017,後面的YOLOv3沒有投稿,YOLOv4沒有收錄,YOLOv5沒有論文,YOLOv6暫時未知,YOLOv8論文還在撰寫中)其實 YOLOv4 團隊有一篇 Scaled-YOLOv4 收錄 CVPR 2021,但這裡不算作正式v數字系列。

YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors

論文:https://arxiv.org/abs/2207.02696

代碼(已破8k stars):https://github.com/WongKinYiu/yolov7

在v7論文掛出不到半天的時間,YOLOv3和YOLOv4的官網上均掛上了YOLOv7的連結和說明,由此看來大佬們都比較認可這款檢測器:

官方版的YOLOv7相同體量下比YOLOv5精度更高,速度快120%(FPS),比 YOLOX 快180%(FPS),比 Dual-Swin-T 快1200%(FPS),比 ConvNext 快550%(FPS),比 SWIN-L快500%(FPS)。

在5FPS到160FPS的範圍內,無論是速度或是精度,YOLOv7都超過了目前已知的檢測器,並且在GPU V100上進行測試, 精度為56.8% AP的模型可達到30 FPS(batch=1)以上的檢測速率,與此同時,這是目前唯一一款在如此高精度下仍能超過30FPS的檢測器。另外,YOLOv7所獲得的成果不止於此,例如:

  • YOLOv7-e6 (55.9% AP, 56 FPS V100 b=1) by +500% FPS faster than SWIN-L Cascade R-CNN (53.9% AP, 9.2 FPS A100 b=1)
  • YOLOv7-e6 (55.9% AP, 56 FPS V100 b=1) by +550% FPS faster than ConvNeXt-RCNN (55.2% AP, 8.6 FPS A100 b=1)
  • YOLOv7-w6 (54.6% AP, 84 FPS V100 b=1) by +120% FPS faster than YOLOv5-X6-v6.1 (55.0% AP, 38 FPS V100 b=1)
  • YOLOv7-w6 (54.6% AP, 84 FPS V100 b=1) by +1200% FPS faster than Dual-Swin-RCNN (53.6% AP, 6.5 FPS V100 b=1)
  • YOLOv7 (51.2% AP, 161 FPS V100 b=1) by +180% FPS faster than YOLOX-X (51.1% AP, 58 FPS V100 b=1)

一、前言

實時目標檢測是計算機視覺中一個重要的課題,而運行實時檢測器的計算設備通常是一些移動端CPU或GPU,以及由近幾年由製造商研發的 神經處理單元(NPU)。上述提到的一些邊緣設備針對不同的卷積結構有不同的加速效果,如普通卷積(npu/gpu)、深度卷積(CPU/npu)或MLP操(gpu/npu)。

  • GPU/NPU邊緣架構: 在本文中,作者提出的實時目標探測器能夠更好的支持邊緣移動端GPU設備和高算力GPU設備。特別是近幾年來,實時探測器處在大力適配邊緣設備的潮流中。如MCUNet和NanoDet,專注於適配低功耗移動端,以提高邊緣設備CPU的推理速度。對於YOLOX和YOLOR等算法,他們專注於提高檢測器在GPU上的推理速度。近年來,實時探測器的發展主要集中在高效的結構設計上。
  • CPU邊緣架構: 對於可以在CPU上使用的實時探測器,骨幹設計主要基於MobileNet、Shufflenet或Ghostnet。
  • 高算力GPU/NPU:另一些主流的實時檢測器是為GPU開發的,它們主要使用ResNet、DarkNet或DLA,然後借鑑CSPNet中的跨級策略來優化架構。
  • Bag-of-freebies: 除了架構優化外,作者提出的方法還集中在訓練過程的優化,以提高檢測器的準確性,但不增加推理耗時。作者稱所提出的模塊和優化方法為可訓練的免費禮包(bag-of-freebies)。

近年來,模型結構重參化和動態標籤分配已成為網絡訓練和目標檢測中的重要優化方向。在本文中,作者提出一些已經發現的問題,例如:

  • 對於模型結構重參化,用梯度傳播路徑的概念分析了適用於不同網絡中各層結構重參化策略,提出了規劃的模型結構重參化
  • 當使用動態標籤分配策略時,多輸出層的模型在訓練時會產生新的問題,比如怎樣才能為不同分支更好的輸出分配動態目標。針對這個問題,作者提出了一種新的標籤分配方法,稱為coarse-to-fine(由粗到細)引導標籤分配策略

本文做出的貢獻如下:

  1. 設計了幾種可訓練的bag-of-freebies,使實時檢測器可以在不提高推理成本的情況下大大提高檢測精度;
  2. 對於目標檢測的發展,作者發現了兩個新的問題,即模塊重參化如何高效替代原始模塊,以及動態標籤分配策略如何處理好不同輸出層的分配。因此在本文中提出了方法進行解決。
  3. 作者為實時探測器提出了「擴展」和「複合縮放」(extend」 and 「compound scaling」)方法,可以更加高效地利用參數和計算量,同時,作者提出的方法可以有效地減少實時探測器50%的參數,並且具備更快的推理速度和更高的檢測精度。(這個其實和YOLOv5或者Scale YOLOv4的baseline使用不同規格分化成幾種模型類似,既可以是width和depth的縮放,也可以是module的縮放)

二、相關工作

2.1 實時檢測器

目前最先進的實時探測器主要基於YOLO和FCOS,如果需要研發更先進的實時檢測器,通常需要具備以下特徵:

  • (1)更快和更高效的網絡架構;
  • (2)更有效的特徵積分方法;
  • (3)更準確的檢測方法;
  • (4)更魯棒的損失函數;
  • (5)更有效的標籤分配方法;
  • (6)更有效的訓練方式。

2.2 模型重參化

模型重參化策略在推理階段將多個模塊合併為一個計算模塊,可以看作是一種集成技術(model ensemble,其實筆者覺得更像是一種基於feature的distillation),可以將其分為模塊級集成和模型級集成兩類。對於模型級重新參數化有兩種常見的操作:

  • 一種是用不同的訓練數據訓練多個相同的模型,然後對多個訓練模型的權重進行平均。
  • 一種是對不同疊代次數下模型權重進行加權平均。

模塊重參化是近年來一個比較流行的研究課題。這種方法在訓練過程中將一個整體模塊分割為多個相同或不同的模塊分支,但在推理過程中將多個分支模塊集成到一個完全等價的模塊中。然而,並不是所有提出的重參化模塊都可以完美地應用於不同的架構。考慮到這一點,作者開發了新的重參數化模塊,並為各種架構設計了相關的應用程式策略。下圖是作者使用重參化實現構建的多個module,按照分組數不同進行排列,為什麼作者會選擇32的分組數,應該搞過部署的佬們會清楚一些,模塊參考:https://github.com/WongKinYiu/yolov7/blob/main/models/common.py~

(此處做一張PPT,把common中的所有rep模塊畫成樹狀圖)

2.3 模型縮放

模型縮放通過擴大或縮小baseline,使其適用於不同的計算設備。模型縮放方法通常包括不同的縮放因子,如:

  • input size(輸入圖像大小)
  • depth(層數)
  • width(通道數)
  • stage(特徵金字塔數量)

從而在網絡的參數量、計算量、推理速度和精度方面實現很好的權衡。網絡架構搜索(NAS)也是目前常用的模型縮放方法之一。

三、模型設計架構

3.1 高效的聚合網絡

在大多數關於設計高效網絡的論文中,主要考慮的因素是參數量、計算量和計算密度。但從內存訪存的角度出發出發,還可以分析輸入/輸出信道比、架構的分支數和元素級操作對網絡推理速度的影響(shufflenet論文提出)。在執行模型縮放時還需考慮激活函數,即更多地考慮卷積層輸出張量中的元素數量。

  • 圖2(b)中CSPVoVNet是VoVNet的一個變體。除了考慮上述幾個設計問題外,CSPVoVNet的體系結構還分析了梯度路徑,使不同層能夠學習更多樣化的特徵。上面描述的梯度分析方法還能使推理速度更快、模型更準確(看下圖!其實和Resnext有點像,但比它複雜一些)。
  • 圖2(c)中的ELAN出於以下設計考慮——「如何設計一個高效的網絡?」得出結論是:通過控制最短最長梯度路徑,更深的網絡可以有效地進行學習並更好地收斂。
  • 因此,在本文中,作者提出了基於ELAN的擴展版本E-ELAN,其主要架構如圖2(d)所示。在大規模ELAN中,無論梯度路徑長度和計算模塊數量如何,都達到了穩定的狀態。但如果更多計算模塊被無限地堆疊,這種穩定狀態可能會被破壞,參數利用率也會降低。本文提出的E-ELAN採用expand、shuffle、merge cardinality結構,實現在不破壞原始梯度路徑的情況下,提高網絡的學習能力。

在體系結構方面,E-ELAN只改變了計算模塊中的結構,而過渡層的結構則完全不變。作者的策略是利用分組卷積來擴展計算模塊的通道和基數,將相同的group parameter和channel multiplier用於計算每一層中的所有模塊。然後,將每個模塊計算出的特徵圖根據設置的分組數打亂成G組,最後將它們連接在一起。此時,每一組特徵圖中的通道數將與原始體系結構中的通道數相同。最後,作者添加了G組特徵來merge cardinality。除了維護原始的ELAN設計架構外,E-ELAN還可以指導不同的分組模塊來學習更多樣化的特性。(難以置信,要是在CPU上運行,分分鐘可能爆)

3.2 基於連接的模型的模型縮放

縮放這個就不說了,和YOLOv5、Scale YOLOv4、YOLOX類似。要不就depth and width,要不就module scale,可參考scale yolov4的P4、P5、P5結構。

四、可訓練的贈品禮包(bag-of-freebies)

4.1 卷積重參化

儘管RepConv在VGG上取得了優異的性能,但將它直接應用於ResNet和DenseNet或其他網絡架構時,它的精度會顯著降低。作者使用梯度傳播路徑來分析不同的重參化模塊應該和哪些網絡搭配使用。通過分析RepConv與不同架構的組合以及產生的性能,作者發現RepConv中的identity破壞了ResNet中的殘差結構和DenseNet中的跨層連接,這為不同的特徵圖提供了梯度的多樣性(題外話,之前在YOLOv5 Lite上做過此類實驗,結果也是如此,因此v5Lite-g的模型也是砍掉了identity,但分析不出原因,作者也沒給出具體的分析方案,此處蹲坑)。

基於上述原因,作者使用沒有identity連接的RepConv結構。圖4顯示了作者在PlainNet和ResNet中使用的「計劃型重參化卷積」的一個示例。

4.2 輔助訓練模塊

深度監督是一種常用於訓練深度網絡的技術,其主要概念是在網絡的中間層增加額外的輔助頭,以及以輔助損失為指導的淺層網絡權重。即使對於像ResNet和DenseNet這樣收斂效果好的網絡結構,深度監督仍然可以顯著提高模型在許多任務上的性能(這個和Nanodet Plus相似,按筆者理解可以當成是深層局部網絡的ensemble,最後將輔助頭和檢測頭的權重做融合)。圖5(a)和(b)分別顯示了「沒有」和「有」深度監督的目標檢測器架構,在本文中,作者將負責最終的輸出頭稱為引導頭,將用於輔助訓練的頭稱為輔助頭。

接下來討論標籤分配的問題。在過去,在深度網絡的訓練中,標籤分配通常直接指的是ground truth,並根據給定的規則生成hard label(未經過softmax)。然而近年來,以目標檢測為例,研究者經常利用網絡預測的質量分布來結合ground truth,使用一些計算和優化方法來生成可靠的軟標籤(soft label)。例如,YOLO使用bounding box預測和ground truth的IoU作為軟標籤。

在本文中,作者將網絡預測結果與ground truth一起考慮後再分配軟標籤的機制稱為「標籤分配器」。無論輔助頭或引導頭,都需要對目標進行深度監督。那麼,『』如何為輔助頭和引導頭合理分配軟標籤?」,這是作者需要考慮的問題。目前最常用的方法如圖5(c)所示,即將輔助頭和引導頭分離,然後利用它們各自的預測結果和ground truth執行標籤分配。

本文提出的方法是一種新的標籤分配方法,通過引導頭的預測來引導輔助頭以及自身。換句話說,首先使用引導頭的prediction作為指導,生成從粗到細的層次標籤,分別用於輔助頭和引導頭的學習,具體可看圖5(d)和(e)。

Lead head guided label assigner: 引導頭引導「標籤分配器」預測結果和ground truth進行計算,並通過優化(在utils/loss.py的SigmoidBin()函數中,傳送門:https://github.com/WongKinYiu/yolov7/blob/main/utils/loss.py 生成軟標籤。這組軟標籤將作為輔助頭和引導頭的目標來訓練模型。(之前寫過一篇博客,【淺談計算機視覺中的知識蒸餾】]https://zhuanlan.zhihu.com/p/497067556)詳細講過soft label的好處)這樣做的目的是使引導頭具有較強的學習能力,由此產生的軟標籤更能代表源數據與目標之間的分布差異和相關性。此外,作者還可以將這種學習看作是一種廣義上的餘量學習。通過讓較淺的輔助頭直接學習引導頭已經學習到的信息,引導頭能更加專注於尚未學習到的殘餘信息。

Coarse-to-fine lead head guided label assigner: Coarse-to-fine引導頭使用到了自身的prediction和ground truth來生成軟標籤,引導標籤進行分配。然而,在這個過程中,作者生成了兩組不同的軟標籤,即粗標籤和細標籤,其中細標籤與引導頭在標籤分配器上生成的軟標籤相同,粗標籤是通過降低正樣本分配的約束,允許更多的網格作為正目標(可以看下FastestDet的label assigner,不單單只把gt中心點所在的網格當成候選目標,還把附近的三個也算進行去,增加正樣本候選框的數量)。原因是一個輔助頭的學習能力並不需要強大的引導頭,為了避免丟失信息,作者將專注於優化樣本召回的輔助頭。對於引導頭的輸出,可以從查准率中過濾出高精度值的結果作為最終輸出。然而,值得注意的是,如果粗標籤的附加權重接近細標籤的附加權重,則可能會在最終預測時產生錯誤的先驗結果。

4.3 其他可訓練的bag-of-freebies

  1. Batch normalization:目的是在推理階段將批歸一化的均值和方差整合到卷積層的偏差和權重中。
  2. YOLOR中的隱式知識結合卷積特徵映射和乘法方式:YOLOR中的隱式知識可以在推理階段將計算值簡化為向量。這個向量可以與前一層或後一層卷積層的偏差和權重相結合。
  3. EMA Model:EMA 是一種在mean teacher中使用的技術,作者使用 EMA 模型作為最終的推理模型。

五、實驗

5.1 實驗環境

作者為邊緣GPU、普通GPU和雲GPU設計了三種模型,分別被稱為YOLOv7-Tiny、YOLOv7和YOLOv7-W6。同時,還使用基本模型針對不同的服務需求進行縮放,並得到不同大小的模型。對於YOLOv7,可進行頸部縮放(module scale),並使用所提出的複合縮放方法對整個模型的深度和寬度進行縮放(depth and width scale),此方式獲得了YOLOv7-X。對於YOLOv7-W6,使用提出的縮放方法得到了YOLOv7-E6和YOLOv7-D6。此外,在YOLOv7-E6使用了提出的E-ELAN,從而完成了YOLOv7-E6E。由於YOLOv7-tincy是一個面向邊緣GPU架構的模型,因此它將使用ReLU作為激活函數。作為對於其他模型,使用SiLU作為激活函數。

5.2 baseline

選擇當前先進的檢測器YOLOR作為基線。在相同設置下,表1顯示了本文提出的YOLOv7模型和其他模型的對比。從結果中可以看出:

  • 與YOLOv4相比,YOLOv7的參數減少了75%,計算量減少了36%,AP提高了1.5%。
  • 與最先進的YOLOR-CSP相比,YOLOv7的參數少了43% ,計算量少了15%,AP高了0.4%。
  • 在小模型的性能中,與YOLOv4-tiny相比,YOLOv7-Tiny減少了39%的參數量和49%的計算量,但保持相同的AP。
  • 在雲GPU模型上,YOLOv7模型仍然具有更高的AP,同時減少了19%的參數量和33%的計算量。

5.3 與sota算法的比較

本文將所提出的方法與通用GPU上或邊緣GPU上最先進的的目標檢測器進行了比較,結果如下表所示。

從表2可以看出所提出的方法具有最好的速度-精度均衡性:

  • 比較YOLOv7-Tiny-SiLU和YOLOv5-N(v6.1),YOLOv7-Tiny-SiLU在速度上快127幀,準確率提高10.7%。
  • YOLOv7在幀率為161幀時有51.4%的AP,而相同AP的PP-YOLOE-L只有78幀,且參數l少41%。
  • YOLOv7-X在114FPS時,比YOLOv5-L(v6.1)99FPS的推理速度更快,同時可以提高3.9%的AP。
  • YOLOv7-X與YOLOv5-X(v6.1)相比,YOLOv7-X的推理速度要快31fps。此外,在參數量和計算量方面,YOLOv7-X比YOLOv5-X(v6.1)減少了22%的參數和8%的計算量,但AP提高了2.2%。
  • 使用輸入解析度1280,YOLOv7與YOLOR進行比較,YOLOv7-W6的推理速度比YOLOR-P6快8FPS,檢測率也提高了1%的AP。
  • 至於YOLOv7-E6和YOLOv5-X6(v6.1)比較時,前者的AP增益比後者高0.9%,但參數減少45%,計算量減少63%,推理速度提高了47%。
  • YOLOv7-D6的推理速度與YOLOR-E6接近,但AP提高了0.8%。
  • YOLOv7-E6E的推理速度與YOLOR-D6接近,但AP提高了0.3%。

5.4 消融實驗

(一)比例縮放的方式

表3顯示了在使用不同的模型擴展策略進行放大時獲得的結果。其中,本文提出的複合尺度方法將計算塊的深度加大1.5倍,將過渡塊的寬度擴大1.25倍。與只擴大寬度的方法進行比較,本文提出的方法可以在更少的參數和計算量下提高0.5%的AP。如果與只擴大深度的方法進行比較,只需要增加2.9%的參數量,增加1.2%的計算量,就可以提高0.2%的AP 。從表3的結果中可以看出,本文提出的複合縮放策略可以更有效地利用參數量和計算量。

(二)模型重參化

為了驗證本文所提出的模型重參數化的通用性,作者將其分別應用於基於concatenation的模型和基於residual的模型上進行驗證。基於concatenation的模型和基於residual的模型分別為3個Block的ELAN和CSPDarknet。在基於concatenation的模型實驗中,用RepConv替換了3個堆疊的ELAN中的3×3 卷積,詳細配置如圖6所示。

從表4所示的結果可以看到,所有更高的AP值都出現在參數化的模型中。在處理基於殘差模型的實驗中,由於原始dark block沒有3×3的卷積塊,作者另外設計了一種反向dark block,其體系結構如圖7所示。

因為dark block和反向dark block的CSPDarknet具有完全相同的參數量和concat操作,所以比較起來相當公平。表5所示的實驗結果完全證實了所提出的重參化策略對於residual的模型依舊有效。RepCSPResNet的設計也符合本文的設計模式。

(三)輔助損失頭

在輔助頭實驗的輔助損失中,作者比較了引導頭和輔助頭的獨立標籤分配策略,同時也比較了所提出的引導型標籤分配方法,在表6中顯示了所有的比較結果。

在表7中,作者進一步分析了從粗到細的引導型標籤分配策略對輔助頭解碼器的影響。也就是比較了引入/不引入上界約束的結果。從表中的數字來看,通過距離目標中心的大小來約束目標的上界可以獲得更好的性能。

六、結論

本文提出了一種新的實時檢測器。在研究過程中,本文發現了重參化模塊的替換問題和動態標籤的分配問題。為了解決這一問題,提出了一種可訓練的bag-of-freebies策略來提高目標檢測的精度。基於此,本文開發的YOLOv7系列目標檢測模型獲得了最先進的結果。

關鍵字: