天天看點

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

RepVGG: Making VGG-style ConvNets Great Again論文翻譯-CVPR2021

論文位址:https://arxiv.org/abs/2101.03697

代碼位址:https://github.com/DingXiaoH/RepVGG

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯
摘要

我們提出了一個簡單但功能強大的卷積神經網絡體系結構,它有一個推理階段的VGG-like型主體,隻有一個由3*3卷積和ReLU組成的堆棧,而訓練時間模型具有多分支拓撲。這種訓練時間和推理時間體系結構的解耦是通過一種結構重參數化技術實作的,是以該模型被命名為RepVGG。在ImageNet上,據我們所知,RepVGG作為普通模型第一次達到了80%以上的top-1精度。在NVIDIA 1080Ti GPU上,RepVGG模型的運作速度比ResNet-50快83%,比ResNet-101快101%,且具有更高的精度,與最先進的模型如EfficientNet和RegNet相比,顯示出良好的精度-速度平衡。代碼和訓練模型在https://github.com/megvii-model/RepVGG。

Introduction

卷積神經網絡(ConvNets)已經成為許多任務的主流解決方案。VGG[30]通過由conv、ReLU、pooling組成的簡單架構,在圖像識别方面取得了巨大的成功。随着Inception [32,33,31,17], ResNet[10]和DenseNet[15]的出現,大量的研究興趣轉向了良好設計的架構,使得模型越來越複雜。最近一些強大的架構是通過自動[43,28,22]或手動[27]架構搜尋,或在基本架構[34]上搜尋複合縮放政策獲得的。

盡管許多複雜的卷積神經網絡比簡單的卷積神經網絡具有更高的精度,但缺點也很明顯。1)複雜的多分支設計(如ResNet中的剩餘添加和Inception中的分支連接配接)使模型難以實作和自定義,降低了推理速度,降低了記憶體使用率。2)一些元件(例如,Xception[2]和MobileNets[14, 29]中的深度卷積和ShuffleNets中的信道攪亂[23, 40])增加記憶體通路成本,缺乏各種裝置的支援。由于影響推斷速度的因素有很多,浮點操作(FLOPs)的數量并不能準确地反映實際速度。雖然一些新的模型比之前的諸如VGG和resnet -18/34/ 50[10]有更低的FLOPs,但它們運作起來可能不會更快(表4)。是以,VGG和ResNets的原始版本仍然在學術界和工業界的現實應用中大量使用。

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

圖1:ImageNet上的最高精度與實際速度。左圖:輕量級和中量級RepVGG和120個時代訓練的基線。右圖:重量級模型訓練了200個時代。該速度在相同的1080Ti上進行測試,批量尺寸為128,全精度(fp32),單批,以示例/秒進行測量。effentnet - b3[34]的輸入分辨率為300,其餘[34]的輸入分辨率為224。

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

圖2:RepVGG基礎架構。RepVGG有5個階段,在階段開始時通過stride-2卷積進行下行采樣。這裡我們隻展示第一個特定階段的4個層次。受ResNet[10]的啟發,我們也使用identity和1*1分支,但隻用于訓練。

在本文中,我們提出了RepVGG,一個vgg風格的架構,它優于許多複雜的模型(圖1).。RepVGG具有以下優勢:

  • 該模型具有VGG-like的平面(也稱為前饋)拓撲結構沒有任何分支。也就是說,每一層都将其上一層的輸出作為輸入,并将輸出輸入到下一層。
  • 模型的主體隻使用3*3 卷積和ReLU激勵函數。
  • 具體的架構(包括特定的深度和層寬)執行個體化時不需要自動搜尋[43]、手動細化[27]、複合縮放[34],或者其他繁重的設計。

普通模型要達到與多分支架構相當的性能水準是很有挑戰性的。一種解釋是多分支拓撲結構,例如ResNet,使模型成為衆多淺模型[35]的隐式集合,是以訓練一個多分支模型可以避免梯度消失的問題。

由于多分支體系結構的優點都是用于訓練,而缺點則不是用于推理,是以我們提出通過結構重參數化将訓練時間的多分支體系結構和推理時間的普通體系結構解耦,這意味着通過轉換其參數将體系結構從一個轉換為另一個。具體來說,一個網絡結構是與一組參數耦合的,例如,一個卷積層用一個四階核張量來表示。如果将某一結構的參數轉換成另一結構耦合的另一組參數,我們就可以将前者等效為後者,進而改變整個網絡結構。

具體來說,我們使用identity和1*1的分支建構訓練時的RepVGG,這是受到ResNet的啟發,但以不同的方式,可以通過結構重參數化删除分支(圖2、4)。訓練後,我們用簡單代數來執行轉換,一個identity分支可以被視為一個退化的1*1 卷積,而後者可以進一步被視為退化的3*3卷積,這樣我們可以構造一個簡單的3*3核心與原有的訓練參數3*3核心、identity、1*1分支和批處理規範化(BN)[17]層。是以,轉換後的模型有一堆3*3的卷積層,這些層被儲存起來用于測試和部署。

值得注意的是,推理時間的RepVGG隻涉及一種類型的操作:33的卷積和ReLU,這使得RepVGG在gpu等通用計算裝置上運作速度很快。更好的是,RepVGG允許專用硬體實作更高的速度,因為考慮到晶片大小和功耗,我們需要的操作類型越少,我們可以內建到晶片上的計算單元就越多。也就是說,專門用于RepVGG的推理晶片可以擁有大量的33-ReLU單元和更少的記憶體單元(因為簡單拓撲是記憶體經濟的,如圖3所示)。我們的貢獻總結如下。

  • 我們提出了RepVGG,一種簡單的架構,與最先進的技術相比,具有良好的速度-精度平衡。
  • 我們提出使用結構重參數化來解耦訓練時間多分支拓撲和推理時間簡單結構。
  • 我們已經證明了RepVGG在圖像分類和語義分割方面的有效性,以及實作的效率和易用性。

2. Related Work

2.1. From Single-path to Multi-branch(從單路徑到多分支)

在VGG[30]将ImageNet分類的top-1準确率提高到70%以上之後,在使ConvNets變得複雜以達到高性能方面有很多創新,如當代的google[32]及以後的版本Inception模型[33,31,17]采用了精心設計的多分支架構,ResNet[10]提出了簡化的雙分支架構,DenseNet[15]通過将低層和大量的高層連接配接起來,使得拓撲結構更加複雜。神經結構搜尋(Neural architecture search, NAS)[43,28,22,34]和人工設計空間設計[27]可以生成性能更高的卷積網絡,但代價是大量的計算資源或人力。nas生成模型的一些大型版本甚至不能在普通gpu上訓練,是以限制了應用程式。除了實作上的不便之外,複雜的模型可能會降低[23]的并行度,進而降低推理的速度。

2.2. Effective Training of Single-path Models(有效的單路徑訓練模型)

已經有人嘗試訓練沒有分支的ConvNets。然而,前人的工作主要是尋求非常深入的模型以合理的精度收斂,并沒有達到比複雜模型更好的性能。是以,所建立的方法和模型既不簡單也不實用。例如,提出了一種初始化方法[36]來訓練極深簡單的ConvNets。使用基于平均場理論的方案,10000層網絡在MNIST上訓練的準确率超過99%,在CIFAR-10上訓練的準确率達到82%。雖然模型不實用(甚至LeNet-5[19]在MNIST上的準确率達到99.3%,VGG-16在CIFAR- 10上的準确率達到93%以上),但理論貢獻是很有見地的。最近的工作[24]結合了幾種技術,包括Leaky ReLU、max-norm和仔細的初始化。在ImageNet上,參數量為147M的簡單ConvNet準确率可以達到74.6%的top-1精度,比之前的基線(ResNet-101, 76.6%,45M參數)低2%。

值得注意的是,本文不僅僅是一個簡單模型可以很好地收斂的示範,而且并不打算訓練像ResNets這樣極其深度的ConvNets。相反,我們的目标是建立一個簡單的模型,具有合理的深度和良好的精度-速度平衡,可以簡單地用最常見的分量(如正則conv和BN)和簡單的代數來實作。

2.3. Model Re-parameterization(模型重參數化)

DiracNet[38]是一種與我們相關的重參數化方法。它通過将卷積層的核編碼為^W = diag(a)I + diag(b)Wnorm來建構深平面模型,其中^W是用于卷積的最終權值(一個被視為矩陣的四階張量),a和b是學習向量,Wnorm是規範化的可學習核。與同等參數量的ResNets相比,CIFAR- 100上DiracNet的top-1準确率降低了2.29% (78.46% vs. 80.75%), ImageNet上降低了0.62% (DiracNet-34的72.21% vs. ResNet-34的72.83%)。Dirac- Net與我們的方法的不同之處是:1)我們的結構重參數化是通過一個具體的結構來實作的,這個具體的結構後來可以轉換成另一個,而DiracNet僅僅使用了另一個conv核的數學表達式,以友善優化。即,一個結構上重新參數化的普通模型是一個真正的訓練時間多分支模型,但DiracNet不是。2) DiracNet模型的性能高于一般參數化的簡單模型,但低于可比的ResNet模型,而RepVGG模型的性能則大大優于ResNets模型。Asym Conv Block(ACB)[9]采用不對稱卷積加強正常卷積的骨架,它可以被視為另一種形式的結構性重參數化,它訓練塊轉換成卷積。我們的方法相比,不同之處在于,ACB是專為元件級的改進和用作卷積層替代在任何體系結構中,當我們的結構性重參數化訓練簡單ConvNets至關重要,如4.2部分所示。

2.4.Winograd Convolution(Winograd卷積)

RepVGG隻使用了3*3卷積,因為它在GPU和CPU上被一些現代的計算庫如NVIDIA cuDNN[1]和Intel MKL[16]高度優化。表1顯示了在1080Ti GPU上用cuDNN 7.5.0測試的理論FLOPs、實際運作時間和計算密度(以每秒Tera浮點運算次數衡量,TFLOPS) 。結果表明,3*3卷積的理論計算密度和其他算法一樣都在4左右,這表明在不同的體系結構中,理論總失敗數并不能代表實際速度。加速3*3卷積的經典算法是winograd算法[18](僅當stride為1時),它已經被庫如cuDNN和MKL很好的支援(并預設啟用)。例如,用标準F(2*2,3*3)Winograd,一個3*3卷積的乘法(MULs)減少到原來的4/9。自比增加乘法更耗時,我們計算MULs測量計算成本與Winograd支援(用Wino MULs表。4、5)。注意,具體計算庫和硬體确定為每個運算使用Winograd因為小規模的卷積可能不是加速由于記憶體開銷。

3. Building RepVGG via Structural Re-param(通過結構重參數化建構RepVGG)

3.1. Simple is Fast, Memory-economical,Flexible(簡單就是快速,節省記憶體,靈活的)

使用簡單的convnet至少有三個原因:它們快速、節省記憶體和靈活。

快速  許多最近的多分支架構的理論故障比VGG要低,但運作起來可能不會更快。例如,VGG-16作為EfficientNet-B3[34]的FLOPs是8:4,但在1080Ti上運作速度要快1:8(表4),這意味着前者的計算密度是後者的15倍。除了Winograd卷積帶來的加速外,記憶體通路開銷(MAC)和并行度[23]是影響速度的兩個重要因素,但記憶體通路開銷并沒有被計算在内。例如,雖然需要的分支加法或連接配接的計算是微不足道的,但mac是重要的。此外,MAC在分組卷積中占據了很大一部分時間。另一方面,在相同的失敗情況下,具有高并行度的模型可能比另一個具有低并行度的模型要快得多。由于多分支拓撲在初始化和自動生成的體系結構中被廣泛采用,是以使用了多個小的運算符而不是幾個大的運算符。之前的工作[23]顯示,片段式的運算符的數量(即個别的卷積或池操作的數量在一個建構塊)在NASNET-A[42]是13,這是不友好的裝置與強大的并行計算能力GPU和核心啟動和同步等,引入了額外的開銷。相比之下,這個數字在ResNets中是2或3,我們将其設為1:單個卷積。

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

Memory-economical  多分支拓撲是記憶體效率低下的,因為每個分支的結果都需要保留到添加或連接配接時,這大大提高了記憶體占用的峰值。如圖3所示,剩餘塊的輸入需要保持到加法為止。假設塊保持特征圖的大小,則記憶體占用的峰值為2作為輸入。相比之下,普通拓撲允許特定層的輸入所占用的記憶體在操作完成後立即釋放。在設計專門的硬體時,普通的ConvNet允許深度記憶體優化并降低記憶體單元的成本,以便我們可以在晶片上內建更多的計算單元。

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

靈活性  多分支拓撲對體系結構規範施加了限制。例如,ResNet要求将卷積層組織為剩餘塊,這限制了靈活性,因為每個剩餘塊的最後一個卷積層必須産生相同形狀的張量,否則快捷添加将沒有意義。更糟糕的是,多分支拓撲限制了通道剪枝的應用[20,12]。通道剪枝是一種去除一些不重要通道的實用技術,有些方法可以通過自動發現每一層[7]的合适寬度來優化模型結構。然而,多分支模型使修剪變得棘手,并導緻顯著的性能退化或較低的加速比[6,20,8]。相比之下,普通架構允許我們根據需求自由配置每個卷積層,并進行修剪,以獲得更好的性能-效率平衡。

3.2. Training-time Multi-branch Architecture(訓練時間多分支結構)

簡單的卷積網絡有很多優點,但有一個緻命的缺點:性能差。例如,使用BN[17]等現代元件,VGG-16可以在ImageNet上達到72%的top-1精度,這似乎過時了。我們的結構重新參數化方法受到了ResNet的啟發,該方法明确地建構了一個快捷分支,将資訊流模組化為y = x + f(x),并使用一個剩餘塊學習f。當x和f(x)的維數不比對時,就變成y = g(x) + f(x),其中g(x)是一個卷積捷徑,通過一個1*1的卷積實作。Renets成功的一個解釋是,這樣的多分支架構使模型成為衆多較淺模型[35]的隐含內建。具體來說,有n個塊,模型可以解釋為2n個模型的集合,因為每個塊将流分成兩條路徑。

由于多分支拓撲在推理方面存在缺陷,但分支似乎有利于[35]的訓練,是以我們使用多個分支對多個模型進行單獨的訓練時間內建。為了使大多數成員更淺或更簡單,我們使用類似resnet的特性(僅當次元比對時)和1*1分支,以便建構塊的訓練時間資訊流為y = x + g(x) + f(x)。我們隻是簡單地堆疊幾個這樣的塊來建構訓練時間模型。從與[35]相同的角度來看,模型是由3n個成員和n個這樣的塊組成的集合。訓練後,将其等價轉換為y = h(x),其中h由一個單獨的卷積層實作,其參數由訓練後的參數通過一系列代數推導而來。

3.3. Re-param for Plain Inference-time Model(重新指定簡單推理時間模型的參數)

在本小節中,我們将描述如何将一個經過訓練的塊轉換為一個單獨的3*3卷積層進行推理。注意,我們在加法之前的每個分支中都使用了BN(圖4)。形式上,我們用

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

表示具有C1輸入通道和C2輸出通道的3*3卷積層的核,用

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

表示1*1分支的核。我們使用

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

作為1個簡單的3*3卷積後BN層的累積均值、标準差、學習縮放因子和偏差,

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

為1*1卷積後BN層,

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

為恒等分支。設

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯
【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

,

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

分别為輸入和輸出,*為卷積算子。如果

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

,我們有

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

否則,我們隻是不使用機關分支,是以上述方程隻有前兩項。這裡bn是推理時間bn函數,

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯
【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

我們首先将每一個BN及其前面的卷積層轉換成一個帶有偏置向量的卷積。讓

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

是從

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

轉換而來的核心和偏誤,我們有

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

驗證起來很容易得

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯
【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

上述變換也适用于機關分支,因為機關映射可以看作是一個帶有機關矩陣的1*1卷積的核。經過這樣的變換,我們将得到一個3*3核,兩個1*1核,和三個偏置向量。

然後我們獲得最終的偏差通過添加了三個偏差向量,最後3*3核心通過在3*3核心的中心點上添加1*1核心,可以很容易地實作先補零的兩個1*1核心成為3*3和添加三個核心,如圖4所示。需要注意的是,此類轉換的等效性要求3*3層和1*1層具有相同的步幅,而1*1層的填充配置應比3*3層少一個像素。例如,對于一個3*3層填充一個像素的輸入,這是最常見的情況,1*1層應該有填充(padding)= 0。

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯
3.4. Architectural Specification

表2顯示了RepVGG的規格,包括深度和寬度。RepVGG是VGG-style的,它采用簡單的拓撲結構,大量使用3*3卷積,但它不像VGG那樣使用最大池化,因為我們希望主體隻有一種類型的操作。我們将3*3層排列為5個階段,一個階段的第一層以stride = 2的方式下采樣。對于圖像分類,我們使用全局平均池化,然後使用全連接配接層作為head。對于其他任務,特定于任務的head可以用于任何層産生的特性。

我們根據三個簡單的原則來決定每個階段的層數。1)第一階段的操作分辨率較大,耗時較長,是以我們隻使用一層以降低延遲。2)最後一個階段應該有更多的通道,是以我們隻使用一層來儲存參數。3)我們将大部分圖層放入最後的第二階段(ImageNet輸出分辨率為14*14),緊接着是ResNet及其最新版本[10,27,37](例如,ResNet-101在其14*14分辨率階段使用了69層)。我們讓這五個階段分别有1、2、4、14、1層來建構一個名為RepVGG-A的執行個體。我們還建構了一個更深層的RepVGG-B,在階段2、3和4中有更多的層。我們使用RepVGG-A與其他輕量級和中量級模型(包括ResNet-18/34/50)競争,使用RepVGG-B與高性能模型競争。

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

我們通過統一縮放[64,128,256,512]的經典寬度設定來确定層寬度(例如VGG和ResNets)。我們使用乘數a來衡量前四個階段,最後一個階段使用乘數b,通常設定b>a因為我們希望最後一層為分類或其他下遊任務具有更豐富的特性。由于RepVGG在最後階段隻有一層,是以較大的b并不會顯著增加延遲和參數的數量。具體來說,階段2、3、4、5的寬度分别為[64a;128a;256a;512b]。為了避免在大的特征地圖上進行大的卷積,我們對stage1進行了縮小,如果a<1,但不要擴大它,使階段1的寬度是最小的(64;64a)。

為了進一步減少參數和計算,我們可以選擇使用密集的3*3卷積層來交換精度和效率。具體來說,我們将第3、5、7、…,第21層RepVGG-A和另外23、25、27層RepVGG-B設為組g。為了簡單起見,我們對這類層全局設定g為1、2或4,而不進行分層調優。我們不使用相鄰的逐群卷積層,因為這将禁用通道間資訊交換,并帶來一個副作用[40]:特定通道的輸出将僅來自一小部分輸入通道。注意,1*1分支應具有與3*3 conv相同的g值。

4. Experiments

在本節中,我們比較了RepVGG與ImageNet上的基線的性能,通過一系列的消融研究和比較,論證了結構重參數化的意義,并驗證了RepVGG在語義分割[41]上的泛化性能。

4.1. RepVGG for ImageNet Classification

我們比較了RepVGG與經典和最先進的模型,包括VGG-16[30]、ResNet[10]、ResNeXt[37]、EfficientNet[34]和RegNet[27]在ImageNet- 1K[5]上,其中包含128萬高分辨率圖像用于訓練和50K用于驗證,來自1000個類。我們分别以EfficientNet-B0/B3和RegNet-3.2GF/12GF作為中量級模型和重量級模型的代表。我們改變乘數a和b,生成一系列RepVGG模型,以與基線進行比較。如表3所示。

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

我們首先比較RepVGG和ResNets[10],這是最常用的基準。與ResNet-18比較,對于RepVGG-A0,設a = 0.75, b = 2.5。對于ResNet-34,我們使用更寬的RepVGG-A1。為了使RepVGG的參數略少于ResNet-50,我們建構了a = 1.5,b = 2.75的RepVGG- a2。為了與更大的模型進行比較,我們構造了深度更大的RepVGGB0/B1/B2/B3,并增加了寬度。對于那些具有交叉分組層的RepVGG模型,我們在模型名後面加上g2/g4作為字尾。

為了訓練輕量級和中量級模型,我們隻使用簡單的資料增強管道,包括随機裁剪和左右反轉,遵循正式的PyTorch示例[26]。我們在8個gpu上使用256全局批處理大小,初始學習率為0.1,餘弦退火120個時期,标準SGD動量系數為0.9,在卷積層和全連接配接層的核上重量衰減為10-4。對于RegNetX-12GF、EfficientNet-B3和RepVGG-B3重量級模型,我們采用了5輪預熱、200輪餘弦學習率退火、标簽平滑[33]和混合算法[39](在[11]之後),以及自動增強[4]的資料增強pipline、随機剪切和反轉。RepVGG-B2及其g2/g4變種都在這兩種設定下進行了訓練。我們在1080Ti GPU 4上測試了128批的每個模型的速度,首先輸入50批對硬體進行預熱,然後記錄50批的時間使用情況。為了公平比較,我們在同一個GPU上測試所有模型,所有基線的conv-BN序列也轉換為帶有偏置的卷積 (Eq. 3)。

如表4和圖1所示,RepVGG顯示了良好的精度-速度平衡。例如,RepVGG-A0的精度和速度分别比ResNet-18高1.25%和33%,RepVGG-A1比ResNet-34高0.29%/64%,RepVGG-A2比ResNet-50高0.17%/83%。采用分組分層(g2/g4),進一步加速了RepVGG模型的建立,并合理降低了模型的精度。例如,RepVGG-B1g4比ResNet-101好0.37%/101%,RepVGG-B1g2在相同精度下比ResNet-152快2.66。盡管參數的數量不是我們主要關心的問題,但是上面所有的RepVGG模型都比ResNets更有效地使用參數。與經典的VGG-16相比,RepVGGB2隻有58%的參數,運作速度快10%,精度高6.57%。與我們所知的精度最高(74.5%)的基于修剪的良好設計的訓練方法RePr[25]訓練的VGG模型相比,RepVGG-B2的準确率也高出4.28%。

與最先進的基線相比,RepVGG也表現出良好的性能,從簡單性上看,RepVGG-a2比EfficientNet-B0高出1.37%/59%,RepVGG-b1比RegNetX-3.2GF高出0.39%,運作速度略快。

值得注意的是,RepVGG模型在200個epochs時達到了80%以上的精度(表5),這是我們所知的普通模型第一次趕上最先進的水準。與RegNetX-12GF相比,RepVGGB3的運作速度快了31%,考慮到RepVGG不需要像RegNet[27]那樣大量的人力來完善設計空間,而且架構超參數的設定也很随意,這一點令人印象深刻。

作為計算複雜度的兩個名額,我們計算2.4節中描述的理論失敗和Wino MULs。例如,我們發現,在EfficientNet-B0/B3中,Winograd算法沒有加速任何conv。表4顯示Wino MULs在GPU上是一個更好的代理,例如,ResNet-152運作速度比VGG-16慢,理論上的失敗次數更低,但Wino MULs更高。當然,實際速度應該永遠是黃金标準。

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯
4.2. Structural Re-parameterization is the Key(結構重參數化是關鍵)

在本小節中,我們驗證了我們的結構重參數化技術的重要性(表6)。所有的模型都是用上面描述的相同的簡單訓練設定從零開始訓練120個epochs。首先,我們通過移除RepVGG-B0每個區塊的身份和/或1*1分支進行消融研究。剔除兩個分支後,訓練時間模型退化為原始普通模型,準确率僅為72.39%。在1*1和74.79%的情況下,準确率分别提高到73.15%和74.79%。完整的RepVGG-B0模型的精度為75.14%,比原始普通模型的精度高2.75%。

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

然後我們建構了一系列的變量和基線用于比較RepVGG-B0(表7)。所有的模型都是在120個epochs從零開始訓練的。

  • 統一w/o BN層  删除辨別分支中的BN。
  • Post-addition BN  删除三個分支中的BN層,并在添加後附加BN層。即BN的位置由加前變為加後。
  • +ReLU in branches  将ReLU插入到每個分支中(BN之後,add之前)。由于這樣的塊不能轉換成一個單獨的卷積層,是以沒有實際用途,我們隻是想看看更多的非線性是否會帶來更高的性能。
  • DiracNet  [38]采用了在2.2節中介紹的精心設計的卷積核的重參數化。我們使用它的官方PyTorch代碼來建構層,以取代原來的3*3卷積。
  • Trivial Re-param  是對卷積核的一種更簡單的重參數化,直接在3*3核中添加一個機關核,可以看作DiracNet的退化版本(^W = I +W[38])。
  • Asymmetric Conv Block (ACB)  [9]可以看作是結構重參數化的另一種形式。我們與ACB進行比較,看看我們的結構重新參數化的改進是否是由于元件級的過度參數化(即,額外的參數使每個3*3卷積變得更強)。
  • Residual Reorg  建構每個階段,通過重新組織它在一個類似resnet的方式(2層每個塊)。具體來說,合成模型在第一階段和最後階段有一個3*3層,在第二階段、第三階段、第四階段有2、3、8個剩餘塊,并使用像ResNet-18/34這樣的捷徑。
【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

我們認為結構重參數相對于DiractNet和普通重參數的優勢在于前者依賴于通過具有非線性行為(BN)的具體結構的實際資料流,而後者僅使用另一種卷積核的數學表達式。例如,前者的re-param是指使用一個結構的參數來參數化另一個結構,而後者是指先用另一組參數計算參數,然後再使用它們進行其他計算。對于訓練時間BN這樣的非線性分量,前者不能用後者近似。作為證據,通過去除BN降低了精度,通過添加ReLU提高了精度。換句話說,雖然一個RepVGG塊可以等效地轉換成一個單獨的卷積來進行推理,但推理時間等價并不意味着訓練時間等價,因為我們不能構造一個卷積層來具有與RepVGG塊相同的訓練時間行為。

與ACB的比較表明,RepVGG的成功不應該簡單地歸因于每個元件的過度參數化的影響,因為ACB使用了更多的參數,但不能像RepVGG那樣提高性能。為了進一步确認,我們将ResNet-50的每個3*3卷積的替換為RepVGG塊,并從頭開始訓練120個epochs。精度為76.34%,僅比ResNet- 50基線高0.03%,表明RepVGG-style結構重參數化不是一種通用的過度參數化技術,而是一種訓練強大的普通卷積神經網絡的關鍵方法論。

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

與Residual Reorg(具有相同3*3卷積數量以及用于訓練和推理的其他快捷方式的真實殘差網絡)相比,RepVGG的表現高出0.58%,這并不奇怪,因為RepVGG有更多的分支。例如,分支使得RepVGG的stage4是2*315 = 2.8*107模型[35]的集合,而剩餘Reorg的數量是28 = 256。

4.3. Semantic Segmentation(語義分割)

我們驗證了imagenet預訓練的RepVGG在城市景觀[3]上的泛化性能,該圖像包含5K個精細标注的圖像和19個類别。我們使用PSPNet[41]架構,一個基為0.01,幂為0.9,權重衰減為10-4,全局批處理規模為16的多聚學習速率政策,在8個gpu上運作40個epochs。為了公平比較,我們隻将ResNet-50/101骨幹更改為RepVGG-B1g2/B2,其他設定保持一緻。

【論文閱讀】RepVGG: Making VGG-style ConvNets Great Again翻譯

在PSPNet-50/101[41]正式實施後,在ResNet-50/101的最後兩個階段使用了擴張的卷積,我們也對RepVGG-B1g2/B2的最後兩個階段的所有3*3卷積層進行了擴張。由于目前3*3擴張卷積的低效實作(盡管FLOPs與3*3正常卷積相同),這樣的修改減緩了推理。為便于比較,我們建立兩個PSPNets(在表8中用fast表示)膨脹隻有在最後5層(例如,最後4層stage4和唯一的stage5層),是以PSPNets運作略高于ResNet-50/101骨幹。結果表明,RepVGG骨幹的平均IoU比ResNet-50和ResNet-101分别高出1.71%和1.01%。令人印象深刻的是,RepVGG-B1g2-fast在mIoU中的性能比ResNet- 101骨幹高出0.37,運作速度快62%。有趣的是,與RepVGG-B1g2-fast模型相比,擴大的卷積層似乎對更大的模型更有效,但擴大後的RepVGG-B2的mIoU提高了1.05%,并有合理的放緩。

4.4. Limitations(局限性)

RepVGG模型是快速、簡單和實用的卷積網絡,為GPU和專用硬體上的最大速度而設計,較少考慮參數數量或理論故障。盡管RepVGG模型比ResNets更具參數效率,但在低功耗裝置上,它們可能不如MobileNets[14,29,13]和ShuffleNets[40,23]等移動管理模型受歡迎。

5. Conclusion(總結)

我們提出了RepVGG,一個由3*3卷積和ReLU組成的簡單架構,特别适合于GPU和專業推理晶片。通過我們的結構重參數化方法,這種簡單的ConvNet在ImageNet上達到了80%以上的top-1精度,與最先進的複雜模型相比,在速度-精度方面表現出了良好的權衡。

繼續閱讀