重參數(shù)化的卷積模型:RepVGG,DBB

本文介紹丁霄漢等人在CVPR2021發(fā)表的兩篇重參數(shù)化卷積模型。

目錄:

1. RepVGG

2. DBB


RepVGG: Making VGG-style ConvNets Great Again

CVPR2021

原文:https://arxiv.org/abs/2101.03697

開源:https://github.com/megvii-model/RepVGG

摘要:我們提出了一種簡單而強(qiáng)大的卷積神經(jīng)網(wǎng)絡(luò)架構(gòu),它具有類似VGG的推理時間體,由3x3卷積和ReLU組成,而訓(xùn)練時間模型具有多分支拓?fù)浣Y(jié)構(gòu)。這種訓(xùn)練時間和推理時間結(jié)構(gòu)的解耦是通過一種結(jié)構(gòu)再參數(shù)化技術(shù)來實現(xiàn)的,因此該模型被命名為RepVGG。在ImageNet上,RepVGG達(dá)到了80%以上的top-1精度,據(jù)我們所知,這是第一次使用plain模型。在nvidia1080tigpu上,RepVGG模型的運行速度比ResNet-50快83%,比ResNet-101快101%,精度更高,與EfficientNet和RegNet等最先進(jìn)的模型相比,顯示出良好的精度-速度折衷。

1.引

經(jīng)典的卷積神經(jīng)網(wǎng)絡(luò)(ConvNet),VGG[31],通過一個由conv、ReLU和pooling組成的簡單網(wǎng)絡(luò)結(jié)構(gòu),在圖像識別方面取得了巨大成功。隨著Inception[33,34,32,19]、ResNet[12]和DenseNet[17],許多研究興趣轉(zhuǎn)移到了設(shè)計良好的架構(gòu)上,使得模型越來越復(fù)雜。最近的一些網(wǎng)絡(luò)結(jié)構(gòu)基于自動[44,29,23]或手動[28]網(wǎng)絡(luò)結(jié)構(gòu)搜索,或搜索的復(fù)合縮放策略[35]。

雖然許多復(fù)雜的卷積網(wǎng)絡(luò)比簡單的卷積網(wǎng)絡(luò)提供更高的精度,但缺點是顯著的。1) 復(fù)雜的多分支設(shè)計(如ResNet中的殘差相加和Inception中的分支連接)使得模型難以實現(xiàn)和定制,降低了推理速度,降低了內(nèi)存利用率。2) 一些組件(例如,depthwise conv in Exception[3]和MobileNet[16,30]以及ShuffeNet[24,41]中的通道混洗)增加了內(nèi)存訪問成本,并且缺乏對各種設(shè)備的支持。由于影響推理速度的因素很多,浮點運算(FLOPs)的數(shù)量不能準(zhǔn)確反映實際速度。盡管一些新型模型的FLOPs低于老式模型(如VGG和ResNet-18/34/50[12]),但它們可能運行得不快(表4)。因此,VGG和ResNet的原始版本仍然大量用于學(xué)術(shù)界和工業(yè)界的現(xiàn)實世界的應(yīng)用。

在本文中,我們提出了RepVGG,這是一種VGG風(fēng)格的網(wǎng)絡(luò)結(jié)構(gòu),其性能優(yōu)于許多復(fù)雜的模型(圖1)。RepVGG具有以下優(yōu)點。

?????該模型具有類似VGG的plain(也稱為前饋)拓?fù)洌ㄗ⑨?),沒有任何分支,這意味著每一層都將其唯一的前一層的輸出作為輸入,并將輸出饋入其唯一的后一層。(注釋1:在本文中,網(wǎng)絡(luò)拓?fù)渲魂P(guān)注組件如何連接到其他組件,架構(gòu)(architecture)指的是拓?fù)湟约敖M件(如深度和寬度)的規(guī)范,結(jié)構(gòu)可以指架構(gòu)的任何組件或部分??赡艽嬖谏僭S誤譯)

?????模型主體僅使用3×3 conv和ReLU。

?????離散架構(gòu)(包括特定深度和層寬)在沒有自動搜索[44]、手動細(xì)化[28]、復(fù)合縮放[35]或其他重型設(shè)計的情況下實例化。

普通模型(plain)要達(dá)到與多分支網(wǎng)絡(luò)結(jié)構(gòu)相當(dāng)?shù)男阅芩绞且粋€挑戰(zhàn)。一種解釋是,多分支拓?fù)洌ㄈ鏡esNet)使模型成為眾多較淺模型的隱式集合[36],因此訓(xùn)練多分支模型可避免梯度消失問題。

由于多分支網(wǎng)絡(luò)結(jié)構(gòu)的優(yōu)點都是用于訓(xùn)練,缺點是推理速度慢,因此我們建議通過結(jié)構(gòu)重新參數(shù)化將訓(xùn)練時間多分支網(wǎng)絡(luò)結(jié)構(gòu)與推理時間plain網(wǎng)絡(luò)結(jié)構(gòu)解耦,即通過轉(zhuǎn)換其參數(shù)將網(wǎng)絡(luò)結(jié)構(gòu)從一個網(wǎng)絡(luò)結(jié)構(gòu)轉(zhuǎn)換為另一個網(wǎng)絡(luò)結(jié)構(gòu)。具體而言,網(wǎng)絡(luò)結(jié)構(gòu)與一組參數(shù)耦合,例如,conv層由四階核張量表示(4th-order kernel tensor)。如果某個結(jié)構(gòu)的參數(shù)可以轉(zhuǎn)換為另一個結(jié)構(gòu)耦合的另一組參數(shù),我們可以用后者等價地替換前者,從而改變整個網(wǎng)絡(luò)架構(gòu)。

To be specific, a network structure is coupled with a set of parameters, e.g., a conv layer is represented by a 4th-order kernel tensor. If the parameters of a certain structure can be converted into another set of parameters coupled by another structure, we can equivalently replace the former with the latter, so that the overall network architecture is changed.

具體地說,我們使用恒等分支和1×1分支構(gòu)造訓(xùn)練時間RepVGG,這是受ResNet啟發(fā)的,但以不同的方式,可以通過結(jié)構(gòu)重新參數(shù)化移除分支(圖2,4)。經(jīng)過訓(xùn)練后,我們用簡單代數(shù)進(jìn)行變換,因為一個恒等分支可以看作是一個退化的1×1 conv,后者可以進(jìn)一步看作是一個退化的3×3 conv,這樣我們就可以用原始的3×3核的訓(xùn)練參數(shù)、恒等映射、1×1分支、批量標(biāo)準(zhǔn)化(BN)[19]層來構(gòu)造一個單分支的3×3核。因此,轉(zhuǎn)換后的模型有一個3×3 conv層的堆棧,用于測試和部署。

值得注意的是,推理時間RepVGG的主體只有一種類型的操作符:3×3 conv后跟ReLU,這使得RepVGG在通用計算設(shè)備(如gpu)上運行得很快。更好的是,RepVGG允許定制硬件實現(xiàn)更高的速度,因為考慮到芯片大小和功耗,我們需要的操作類型越少,我們可以集成到芯片上的計算單元就越多。因此,專門用于RepVGG的推理芯片可以具有大量的3×3-ReLU單元和更少的內(nèi)存單元(因為plain拓?fù)涫莾?nèi)存經(jīng)濟(jì)的,如圖3所示)。我們的貢獻(xiàn)總結(jié)如下。

?????我們提出了RepVGG,這是一種簡單的網(wǎng)絡(luò)結(jié)構(gòu),與現(xiàn)有技術(shù)相比,具有良好的速度-精度權(quán)衡。

?????我們建議使用結(jié)構(gòu)重參數(shù)化將訓(xùn)練時多分支拓?fù)渑c推理時plain架構(gòu)解耦。

?????我們展示了RepVGG在圖像分類和語義分割方面的有效性,以及實現(xiàn)的效率和易用性。

2. 相關(guān)工作

2.1.? 從單路徑到多分支

在VGG[31]將ImageNet分類的最高準(zhǔn)確度提高到70%以上后,在使ConvNet復(fù)雜化以獲得高性能方面有了許多創(chuàng)新,例如,當(dāng)代的GoogLeNet[33]和后來的Inception模型[34,32,19]采用了精心設(shè)計的多分支網(wǎng)絡(luò)結(jié)構(gòu),ResNet[12]提出了一種簡化的雙分支架構(gòu),DenseNet[17]通過將低層與多個高層連接起來,使得拓?fù)浣Y(jié)構(gòu)更加復(fù)雜。神經(jīng)架構(gòu)搜索(NAS)[44,29,23,35]和手動設(shè)計空間設(shè)計[28]可以生成性能更高的CONVNET,但代價是大量計算資源或功率。一些NAS生成模型的大型版本甚至無法在普通GPU上進(jìn)行培訓(xùn),因此限制了應(yīng)用程序。除了實現(xiàn)的不便外,復(fù)雜的模型可能會降低并行度[24],從而減慢推理速度。

2.2. 單路徑模型的有效訓(xùn)練

有人試圖在沒有分支機(jī)構(gòu)的情況下培訓(xùn)convnet。然而,以前的工作主要是試圖使非常深的模型以合理的精度收斂,但沒有達(dá)到比復(fù)雜模型更好的性能。因此,這些方法和結(jié)果模型既不簡單也不實用。提出了一種初始化方法[37],用于訓(xùn)練極深的plain網(wǎng)絡(luò)。使用基于平均場理論的方案,10000層網(wǎng)絡(luò)在MNIST上的訓(xùn)練精度超過99%,在CIFAR-10上的訓(xùn)練精度超過82%。盡管這些模型并不實用(即使LeNet-5[21]在MNIST上的準(zhǔn)確率也可以達(dá)到99.3%,而VGG-16在CIFAR10上的準(zhǔn)確率可以達(dá)到93%以上),但理論貢獻(xiàn)是深刻的。最近的一項工作[25]結(jié)合了幾種技術(shù),包括LeakyReLU、max-norm和仔細(xì)初始化。在ImageNet上,它顯示具有147M參數(shù)的普通ConvNet可以達(dá)到74.6%的top-1精度,比其報告的基線(ResNet-101、76.6%、45M參數(shù))低2%。值得注意的是,本文不僅證明了普通模型可以很好地收斂,而且不打算像ResNet那樣訓(xùn)練極深的convnet。相反,我們的目標(biāo)是建立一個具有合理深度和良好精度-速度權(quán)衡的簡單模型,該模型可以通過最常見的組件(例如,常規(guī)卷積和BN)和簡單代數(shù)簡單實現(xiàn)。

Notably, this paper is not merely a demonstration that plain models can converge reasonably well, and does not intend to train extremely deep ConvNets like ResNets.

2.3. 模型重參數(shù)化

DiracNet[39]是一種與我們相關(guān)的重新參數(shù)化方法。它通過將conv層的核編碼為\hat{\mathrm{W}}=\text{diag}(\mathbf{a})\mathrm{I} + \text{diag}(\mathbf)\mathrm{W}_{\text{norm}}來構(gòu)建深plain模型,其中\hat{\mathrm{W}}是用于卷積的最終權(quán)重(被視為矩陣的4階張量),\mathbf{a}\mathbf是學(xué)習(xí)向量,\mathrm{W}_{\text{norm}}是歸一化的可學(xué)習(xí)的核。與具有可比參數(shù)量的ResNet相比,DiracNet的頂級精度在CIFAR100上降低了2.29%(78.46%對80.75%),在ImageNet上降低了0.62%(DiracNet-34的72.21%對ResNet-34的72.83%)。DiracNet在兩個方面與我們的方法不同:1) RepVGG的trainingtime行為由通過具體結(jié)構(gòu)的實際數(shù)據(jù)流實現(xiàn),該結(jié)構(gòu)可在以后轉(zhuǎn)換為另一個結(jié)構(gòu),而DiracNet僅使用另一個conv內(nèi)核的數(shù)學(xué)表達(dá)式,以便于優(yōu)化。換句話說,訓(xùn)練時RepVGG是一個真正的多分支模型,而DiracNet則不是。2) DiracNet的性能高于通常參數(shù)化的普通模型,但低于可比的ResNet,而RepVGG模型的性能大大優(yōu)于ResNet。Asym Conv Block(ACB)[10]、DO Conv[1]和ExpandNet[11]也可以被視為結(jié)構(gòu)再參數(shù)化,因為它們將塊轉(zhuǎn)換為Conv。與我們的方法相比,它們的不同之處在于,它們是為組件級改進(jìn)而設(shè)計的,并在任何網(wǎng)絡(luò)結(jié)構(gòu)中用作Conv層的替代品,而我們的結(jié)構(gòu)重新參數(shù)化對于訓(xùn)練普通網(wǎng)絡(luò)至關(guān)重要,如第4.2節(jié)所示。

2.4. Winograd卷積

RepVGG僅使用3×3 conv,因為它在GPU和CPU上被一些現(xiàn)代計算庫(如NVIDIA cuDNN[2]和Intel MKL[18])高度優(yōu)化。表1顯示了在1080Ti GPU上用cuDNN 7.5.0測試的理論FLOPs、實際運行時間和計算密度(以每秒Tera浮點運算(TFLOPS))(注釋2)。3×3 conv的理論計算密度約為其他結(jié)構(gòu)的4×,這表明理論上的總FLOPs次數(shù)并不能代表不同結(jié)構(gòu)之間的實際速度。Winograd[20]是一種用于加速3×3 conv的經(jīng)典算法(僅當(dāng)步幅為1時),cuDNN和MKL等庫都很好地支持(并默認(rèn)啟用)。例如,使用標(biāo)準(zhǔn)F(2\times2, 3\times3)Winograd,3×3 conv的乘法量(MULs)減少到原來的49。由于乘法比加法耗時得多,因此我們計算MUL來衡量Winograd支持下的計算成本(表4、5中用Wino MUL表示)。請注意,特定的計算庫和硬件決定是否為每個操作符使用Winograd,因為小規(guī)模卷積可能不會由于內(nèi)存開銷而加速。(注釋3)

注釋2和注釋3

3 通過結(jié)構(gòu)參數(shù)重建RepVGG

3.1 Simple速度快、內(nèi)存經(jīng)濟(jì)、靈活

使用簡單convnet至少有三個原因:它們速度快、內(nèi)存經(jīng)濟(jì)且靈活。

快????許多最近的多分支網(wǎng)絡(luò)結(jié)構(gòu)的理論FLOPs低于VGG,但可能運行得不快。例如,VGG-16的FLOPs為8.4倍于EfficientNet-B3[35],但在1080Ti上的運算速度要快1.8倍(表4),這意味著前者的計算密度為后者的15倍。除了Winograd conv帶來的加速外,F(xiàn)LOPs和速度之間的差異可歸因于兩個重要因素,這兩個因素對速度有相當(dāng)大的影響,但FLOPs沒有考慮到:內(nèi)存訪問成本(MAC)和并行度[24](degree of parallelism)。例如,盡管分支相加或拼接的計算是可忽略的,但是卻造成了MAC的明顯增加。

此外,MAC在分組卷積中占很大一部分時間。另一方面,在相同的FLOPs下,具有高并行度的模型可能比具有低并行度的模型快得多。由于多分支拓?fù)湓诔跏己妥詣由傻木W(wǎng)絡(luò)結(jié)構(gòu)中被廣泛采用,因此使用了多個小操作符而不是幾個大操作符。先前的一項工作[24]報告說,NASNET-A[43]中的分段運算符(即一個構(gòu)建塊中的單個conv或池操作數(shù))為13,這對具有強(qiáng)大并行計算能力的設(shè)備(如GPU)來說是不友好的,并引入了額外的開銷,如內(nèi)核啟動和同步。相比之下,這個數(shù)字在ResNet中是2或3,我們將其設(shè)為1:a single conv。(文獻(xiàn)24是ShuffleNetv2)

內(nèi)存經(jīng)濟(jì)型????多分支拓?fù)涞膬?nèi)存效率很低,因為每個分支的結(jié)果都需要保留到加法或級聯(lián)為止,這大大提高了內(nèi)存占用的峰值。圖3示出需要保持對剩余塊的輸入直到加法。假設(shè)塊保持特征映射大小,額外內(nèi)存占用的峰值為輸入的2倍。相反,普通拓?fù)湓试S在操作完成時立即釋放特定層的輸入占用的內(nèi)存。在設(shè)計專用硬件時,普通的ConvNet允許深度內(nèi)存優(yōu)化,并降低內(nèi)存單元的成本,以便我們可以將更多的計算單元集成到芯片上。

靈活的????多分支拓?fù)鋵W(wǎng)絡(luò)結(jié)構(gòu)定制化施加約束。例如,ResNet要求將Conv層組織為剩余塊,這限制了靈活性,因為每個剩余塊的最后一個conv層必須生成相同形狀的張量,否則快捷方式添加將沒有意義。更糟糕的是,多分支拓?fù)湎拗屏送ǖ佬藜舻膽?yīng)用[22,14],這是一種去除一些不重要通道的實用技術(shù),有些方法可以通過自動發(fā)現(xiàn)每層的適當(dāng)寬度來優(yōu)化模型結(jié)構(gòu)[8]。然而,多分支模型使修剪變得棘手,并導(dǎo)致性能顯著下降或加速比低[7,22,9]。相比之下,簡單的網(wǎng)絡(luò)結(jié)構(gòu)允許我們根據(jù)需求自由配置每個conv層,并進(jìn)行刪減以獲得更好的性能效率權(quán)衡。

3.2. 訓(xùn)練時多分支網(wǎng)絡(luò)結(jié)構(gòu)

普通convnet有很多優(yōu)點,但有一個致命的缺點:性能差。例如,使用BN[19]等現(xiàn)代組件,VGG-16可以在ImageNet上達(dá)到72%以上的top-1精度,這似乎已經(jīng)過時了。我們的結(jié)構(gòu)重新參數(shù)化方法受ResNet的啟發(fā),它顯式構(gòu)造了一個快捷分支,將信息流建模為y = x + f(x),并使用剩余塊學(xué)習(xí)f。當(dāng)xf(x)的維數(shù)不匹配時,它變?yōu)?img class="math-inline" src="https://math.jianshu.com/math?formula=y%20%3D%20g(x)%20%2B%20f(x)" alt="y = g(x) + f(x)" mathimg="1">,其中 g(x)是由1×1 conv實現(xiàn)的卷積捷徑。Resnet成功的一個解釋是,這種多分支網(wǎng)絡(luò)結(jié)構(gòu)使模型成為眾多較淺模型的隱式集合[36]。具體地說,對于n個塊,模型可以解釋為2^{n}個模型的集合,因為每個塊將流分支成兩條路徑。

由于多分支拓?fù)湓谕评矸矫娲嬖谌毕?,但多分支似乎有利于?xùn)練[36],因此我們使用多分支對眾多模型進(jìn)行訓(xùn)練時間集成。為了使大多數(shù)成員變得更淺或更簡單,我們使用了類似ResNet的恒等映射(僅當(dāng)維度匹配時)和1×1分支,以便構(gòu)建塊的訓(xùn)練時間信息流為y = x + g(x) + f(x)。我們簡單地堆疊幾個這樣的塊來構(gòu)造訓(xùn)練時間模型。從與[36]相同的角度來看,當(dāng)使用n個塊時,模型成為3^{n}的集合。

3.3. 推理時重參數(shù)化plain模型

在本小節(jié)中,我們將描述如何將經(jīng)過訓(xùn)練的塊轉(zhuǎn)換為單個3×3 conv層進(jìn)行推理。注意,在添加之前,我們在每個分支中使用BN(圖4)。形式上,我們使用\mathrm{W}^{(3)}\in\mathbb{R}^{C_2\times C_1\times 3\times 3}表示具有C1輸入通道和C2輸出通道的3×3 conv層的核,以及\mathrm{W}^{(1)}\in\mathbb{R}^{C_2\times C_1}表示1×1分支的核。我們使用\vec{\mu}^{(3)},\vec{\sigma}^{(3)},\vec{\gamma}^{(3)},\vec{\beta}^{(3)}作為3×3 conv后BN層的累積平均值、標(biāo)準(zhǔn)偏差和學(xué)習(xí)的比例因子和偏差,對于1×1 conv后的BN,使用\vec{\mu}^{(1)},\vec{\sigma}^{(1)},\vec{\gamma}^{(1)},\vec{\beta}^{(1)},對于恒等分支,使用\vec{\mu}^{(0)},\vec{\sigma}^{(0)},\vec{\gamma}^{(0)},\vec{\beta}^{(0)}。設(shè)\mathrm{M}^{(\text{1})}\in\mathbb{R}^{N\times C_1\times H_1\times W_1},\mathrm{M}^{(\text{2})}\in\mathbb{R}^{N\times C_2\times H_2\times W_2}分別為輸入和輸出,\ast是卷積算子。如果C1=C2,H1=H2,W1=W2,我們有

\mathrm{M}^{(\text{2})} = \text{bn}(\mathrm{M}^{(\text{1})} \ast \mathrm{W}^{(3)},\vec{\mu}^{(3)},\vec{\sigma}^{(3)},\vec{\gamma}^{(3)},\vec{\beta}^{(3)})

+\text{bn}(\mathrm{M}^{(\text{1})} \ast \mathrm{W}^{(1)},\vec{\mu}^{(1)},\vec{\sigma}^{(1)},\vec{\gamma}^{(1)},\vec{\beta}^{(1)})

+\text{bn}(\mathrm{M}^{(\text{1})},\vec{\mu}^{(0)},\vec{\sigma}^{(0)},\vec{\gamma}^{(0)},\vec{\beta}^{(0)})? ? (1)

如果不滿足C1=C2,H1=H2,W1=W2,我們簡單地不使用恒等分支,因此上面的方程只有前兩項。這里bn是推理時bn函數(shù),形式上,\forall 1\leq i \leq C_2,

\text{bn}(\mathrm{M},\mathbf{\vec{\mu}},\vec{\sigma},\vec{\gamma},\vec{\beta})_{:,i,:,:} = (\mathrm{M}_{:,i,:,:} - \vec{\mu}_i)\frac{\vec{\gamma}_i}{\vec{\sigma}_i} + \vec{\beta}_i \,.? ? (2)

我們首先將每個BN及其前面的conv層轉(zhuǎn)換為帶有偏置向量的conv。設(shè)\{\mathrm{W}^\prime,\mathbf^\prime\}為從\{\mathrm{W},\vec{\mu},\vec{\sigma},\vec{\gamma},\vec{\beta}\}轉(zhuǎn)化后的核與偏置,有:

\mathrm{W}^\prime_{i,:,:,:} = \frac{\vec{\gamma}_i}{\vec{\sigma}_i}\mathrm{W}_{i,:,:,:} \,,\quad \mathbf^\prime_i = -\frac{\vec{\mu}_i \vec{\gamma}_i}{\vec{\sigma}_i} + \vec{\beta}_i \,.? ? (3)

那么很容易驗證,對于\forall 1\leq i \leq C_2,有:

\text{bn}(\mathrm{M}\ast\mathrm{W},\vec{\mu},\vec{\sigma},\vec{\gamma},\vec{\beta})_{:,i,:,:} = (\mathrm{M} \ast \mathrm{W}^\prime)_{:,i,:,:} + \mathbf^\prime_i \,.? ? (4)

這種轉(zhuǎn)換也適用于恒等分支,因為恒等分支可以被視為以identity矩陣為核心的1×1 conv。在這樣的變換之后,我們將有一個3×3核、兩個1×1核和三個偏差向量。然后,我們通過將三個偏差向量相加得到最終偏差,并通過將1×1核添加到3×3內(nèi)核的中心點來獲得最終3×3內(nèi)核,這可以通過首先將兩個1×1核零填充到3×3并將三個核相加來輕松實現(xiàn),如圖4所示。請注意,此類轉(zhuǎn)換的等效性要求3×3和1×1層具有相同的步幅,且后者的填充配置應(yīng)比前者少一個像素。例如,對于將輸入填充一個像素的3×3層(這是最常見的情況),1×1層的填充應(yīng)為0。

3.4. 架構(gòu)定制化

表2顯示了RepVGG的規(guī)格,包括深度和寬度。RepVGG是VGG風(fēng)格的,因為它采用簡單的拓?fù)浣Y(jié)構(gòu),大量使用3×3 conv,但它不像VGG那樣使用最大池,因為我們希望主體只有一種類型的操作符。我們將3×3層安排為5個階段,階段的第一層向下取樣,步幅=2。對于圖像分類,我們使用全局平均池,然后使用完全連接的層作為頭部。對于其他任務(wù),特定于任務(wù)的頭部可用于任何圖層生成的特征。

我們根據(jù)三個簡單的準(zhǔn)則確定每個階段的層數(shù)。1) 第一級的分辨率很高,這很耗時,因此我們只使用一層來降低延遲。2) 最后一級應(yīng)該有更多的通道,所以我們只使用一層來保存參數(shù)。3) 我們將大多數(shù)層放在倒數(shù)第二階段(ImageNet上的輸出分辨率為14×14),緊隨ResNet及其最新變體[12、28、38](例如,ResNet-101在其14×14分辨率階段使用69層)。我們讓這五個階段分別有1、2、4、14、1層來構(gòu)造一個名為RepVGG-A的實例。我們還構(gòu)建了一個更深層次的RepVGG-B,它在階段2、3和4中分別增加2層。我們使用RepVGG-A與其他輕量級和中量級模型競爭,包括ResNet-18/34/50,RepVGG-B與高性能模型競爭。

我們通過均勻縮放經(jīng)典寬度設(shè)置[64、128、256、512](例如VGG和Resnet)來確定層寬度。我們使用乘數(shù)a縮放前四個階段,b縮放最后一個階段,通常設(shè)置b>a,因為我們希望最后一層具有更豐富的分類或其他下游任務(wù)特征。由于RepVGG在最后一個階段只有一層,因此較大的b不會顯著增加延遲或參數(shù)量。具體而言,stage2、3、4、5的寬度分別為[64a、128a、256a、512b]。為了避免在高分辨率特征圖上出現(xiàn)大規(guī)模conv,如果a<1,我們將stage1縮小,但無論a如何我們不會使stage1的通道數(shù)大于64,以便stage1的寬度為\text{min}(64, 64a)。

To avoid large-scale conv on high-resolution feature maps, we scale down stage1 if a < 1 but do not scale it up, so that the width of stage1 is min(64, 64a).

為了進(jìn)一步減少參數(shù)和計算,我們可以選擇將分組3×3 conv層與密集×3 conv層交錯,以平衡精度和效率。具體而言,我們?yōu)镽epVGG-A的第3層、第5層、第7層、…、第21層以及對RepVGG-B的額外的第23層、第25層和第27層設(shè)置了組g的數(shù)量。為簡單起見,我們在不進(jìn)行每層調(diào)整的情況下,將這些層的g全局設(shè)置為1、2或4。我們不使用相鄰的groupwise conv層,因為這將禁用通道間的信息交換并帶來副作用[41]:來自某個通道的輸出將僅來自一小部分輸入通道。注意,1×1分支應(yīng)具有與3×3 conv相同的g

4. 實驗

我們將RepVGG與ImageNet上的基線進(jìn)行了比較,通過一系列研究和比較證明了結(jié)構(gòu)重新參數(shù)化的重要性,并驗證了語義分割的泛化性能[42]。

4.1. 用于ImageNet分類的RepVGG

我們將RepVGG與ImageNet-1K[6]上的經(jīng)典和最先進(jìn)的模型進(jìn)行比較,包括VGG-16[31]、ResNet[12]、ResNeXt[38]、EfficientNet[35]和RegNet[28],其中包括1.28M圖像用于訓(xùn)練,50K用于驗證。我們分別使用EfficientNet-B0/B3和RegNet3.2GF/12GF作為中量級和重量級最先進(jìn)模型的代表。我們改變乘數(shù)a和b,以生成一系列RepVGG模型,與基線進(jìn)行比較(表3)。

我們首先將RepVGG與resnet[12]進(jìn)行比較,resnet是最常見的基準(zhǔn)。我們使用RepVGGA0/A1/A2分別與ResNet-18/34/50進(jìn)行比較。為了與更大的模型進(jìn)行比較,我們構(gòu)造了更深的RepVGG-B0/B1/B2/B3,并增加了寬度。對于那些具有交錯分組層的RepVGG模型,我們將g2/g4后綴到模型名稱。

為了訓(xùn)練輕量級和中量級模型,我們只使用簡單的數(shù)據(jù)擴(kuò)充管道,包括隨機(jī)裁剪和左右翻轉(zhuǎn),遵循官方的PyTorch示例[27]。我們在8GPU上使用256的全局批處理大小,學(xué)習(xí)率初始化為0.1,余弦退火120個時代,標(biāo)準(zhǔn)SGD的動量系數(shù)為0.9,重量衰減為10?4在conv和完全連接層的內(nèi)核上。對于包括RegNetX-12GF、EfficientNet-B3和RepVGG-B3在內(nèi)的重量級模型,我們使用5個歷元預(yù)熱、200個歷元的余弦學(xué)習(xí)率退火、標(biāo)簽平滑[34]和混合[40](見[13])以及自動增強(qiáng)[5]、隨機(jī)裁剪和翻轉(zhuǎn)的數(shù)據(jù)增強(qiáng)管道。RepVGG-B2及其g2/g4變體在這兩種設(shè)置下都經(jīng)過培訓(xùn)。我們在1080Ti GPU 4上測試每種批量大小為128的型號的速度,首先輸入50批量以預(yù)熱硬件,然后輸入50批量并記錄時間使用情況。為了公平比較,我們在同一個GPU上測試所有模型,基線的所有conv BN序列也被轉(zhuǎn)換成帶有偏置的conv(等式3)。

表4顯示了RepVGG良好的精度-速度權(quán)衡:RepVGG-A0在精度和速度方面分別比ResNet-18高1.25%和33%,RepVGGA1比ResNet-34高0.29%/64%,RepVGG-A2比ResNet-50高0.17%/83%。使用交錯分組層(g2/g4),RepVGG模型在合理的精度降低下進(jìn)一步加速:RepVGG-B1g4比ResNet-101好0.37%/101%,RepVGGB1g2比ResNet-152快2.66倍,精度相同。雖然參數(shù)的數(shù)量不是我們主要關(guān)心的問題,但上述所有RepVGG模型的參數(shù)效率都高于RESNET。與經(jīng)典VGG-16相比,RepVGG-B2只有58%的參數(shù),運行速度快10%,精確度高6.57%。與使用RePr[26](一種基于剪枝的訓(xùn)練方法)訓(xùn)練的最高準(zhǔn)確度(74.5%)VGG相比,RepVGG-B2的準(zhǔn)確度優(yōu)于4.28%。

與最先進(jìn)的基線相比,RepVGG還表現(xiàn)出良好的性能,考慮到其簡單性:RepVGG-A2比EfficientNetB0高1.37%/59%,RepVGG-B1比RegNetX3.2GF高0.39%,運行速度略快。值得注意的是,RepVGG模型在200個時代內(nèi)達(dá)到了80%以上的準(zhǔn)確率(表5),就我們所知,這是普通模型第一次趕上先進(jìn)水平。與RegNetX-12GF相比,RepVGG-B3的運行速度快31%,這令人印象深刻,因為RepVGG不像RegNet[28]那樣需要大量人力來優(yōu)化設(shè)計空間,而且架構(gòu)超參數(shù)是隨意設(shè)置的。

作為計算復(fù)雜性的兩個代表,我們計算理論上的觸發(fā)器和Wino MUL,如第2.4節(jié)所述。例如,我們發(fā)現(xiàn)Winograd算法沒有加速有效的EfficientNet-B0/B3。表4顯示W(wǎng)ino MULs在GPU上是一個更好的代理,例如,ResNet-152比VGG-16運行得慢,理論FLOPs較低,但Wino MULs較高。當(dāng)然,實際速度應(yīng)該始終是黃金標(biāo)準(zhǔn)。

4.2. 構(gòu)造重參數(shù)化是關(guān)鍵

在本小節(jié)中,我們將驗證我們的結(jié)構(gòu)重新參數(shù)化技術(shù)的重要性(表6)。所有的模型都是用上述相同的簡單訓(xùn)練設(shè)置從零開始訓(xùn)練120個時代。首先,我們通過從RepVGG-B0的每個區(qū)塊移除恒等映射和/或1×1分支來進(jìn)行消融研究。在去除兩個分支后,訓(xùn)練時間模型退化為普通的plain模型,精度僅為72.39%。1×1的準(zhǔn)確率為73.15%,恒等映射的準(zhǔn)確率為74.79%。全功能RepVGGB0的準(zhǔn)確度為75.14%,比普通plain模型高2.75%。從訓(xùn)練時間(即尚未轉(zhuǎn)換)模型的推理速度來看,通過結(jié)構(gòu)重新參數(shù)化去除恒等式和1×1分支會帶來顯著的加速。

然后,我們構(gòu)建了一系列變體和基線,用于在RepVGG-B0上進(jìn)行比較(表7)。同樣,所有的模型都是在120個時代從無到有地訓(xùn)練出來的。

?????Identity w/o BN ????刪除恒等分支中的BN。

?????Post-addition BN????移除三個分支中的BN層,并在相加后附加一個BN層。換句話說,BN的位置從預(yù)加變成后加。

?????+ReLU in branches????將ReLU插入每個分支(在BN之后,相加之前)。由于這樣的塊不能轉(zhuǎn)換為單個conv層,因此它沒有實際用途,我們只想看看更多的非線性是否會帶來更高的性能。

?????DiracNet[39]????采用了精心設(shè)計的conv內(nèi)核重新參數(shù)化,如第2.2節(jié)所述。我們使用它的官方PyTorch代碼來構(gòu)建層,以替換原來的3×3 conv。

?????Trial Re-param????是一種更簡單的conv內(nèi)核重新參數(shù)化方法,它直接向3×3內(nèi)核添加一個恒等內(nèi)核,可以將其視為DiracNet的降級版本(\hat{\mathrm{W}}=\mathrm{I} + \mathrm{W}[39])。

?????Asymmetric Conv Block(ACB)????[10]可被視為另一種結(jié)構(gòu)再參數(shù)化形式。我們將與ACB進(jìn)行比較,以了解我們的結(jié)構(gòu)重新參數(shù)化的改進(jìn)是否是由于組件級別的參數(shù)化過度(即,額外的參數(shù)使每3×3 conv更強(qiáng))。

?????Residual Reorg????通過以類似ResNet的方式重新組織每個階段(每個塊2層)來構(gòu)建每個階段。具體來說,結(jié)果模型在第一和最后階段有一個3×3層,在第2、3、4階段有2、3、8個剩余塊,并使用與ResNet-18/34類似的快捷方式。

我們認(rèn)為結(jié)構(gòu)re-param優(yōu)于DiractNet和Trivial Re-param,因為前者依賴于通過具有非線性行為(BN)的具體結(jié)構(gòu)的實際數(shù)據(jù)流,而后者僅使用另一個conv核的數(shù)學(xué)表達(dá)式。前者“re-param”表示“使用一個結(jié)構(gòu)的參數(shù)來參數(shù)化另一個結(jié)構(gòu)”,但后者表示“首先使用另一組參數(shù)計算參數(shù),然后將其用于其他計算”。對于訓(xùn)練時間BN等非線性分量,前者不能用后者近似。作為證據(jù),去除BN降低了準(zhǔn)確度,添加ReLU提高了準(zhǔn)確度。換句話說,盡管RepVGG塊可以等效地轉(zhuǎn)換為單個conv進(jìn)行推理,但推理時間等效并不意味著訓(xùn)練時間等效,因為我們無法構(gòu)造conv層使其具有與RepVGG塊相同的訓(xùn)練時間行為。

The former “re-param” means “using the params of a structure to parameterize another structure”, but the latter means “computing the params first with another set of params, then using them for other computations”. With nonlinear components like a training-time BN, the former cannot be approximated by the latter. As evidences, the accuracy is decreased by removing the BN and improved by adding ReLU. In other words, though a RepVGG block can be equivalently converted into a single conv for inference, the inferencetime equivalence does not imply the training-time equivalence, as we cannot construct a conv layer to have the same training-time behavior as a RepVGG block

與ACB的比較表明,RepVGG的成功不應(yīng)僅僅歸因于每個組件的過度參數(shù)化效應(yīng),因為ACB使用了更多的參數(shù),但產(chǎn)生了較差的性能。作為雙重檢查,我們用RepVGG塊替換ResNet-50的每3×3 conv,并從頭開始訓(xùn)練120個epoch。準(zhǔn)確率為76.34%,僅比ResNet-50基線高0.03%,這表明RepVGGstyle結(jié)構(gòu)再參數(shù)化不是一種通用的過參數(shù)化技術(shù),而是一種對訓(xùn)練強(qiáng)大的plain網(wǎng)絡(luò)至關(guān)重要的方法。與殘差Reorg(具有相同數(shù)量的3×3 conv和額外的訓(xùn)練和推理捷徑的真實殘差網(wǎng)絡(luò))相比,RepVGG的性能優(yōu)于0.58%,這并不奇怪,因為RepVGG有更多的分支。例如,分支使RepVGG的stage4成為2\times3^{15}=2.8\times10^7模型的集合[36],而剩余Reorg的數(shù)量為2^8=256

The comparison with ACB suggests the success of?RepVGG should not be simply attributed to the effect of?over-parameterization of every component, since ACB uses?more parameters but yields inferior performance. As a double check, we replace every 3×3 conv of ResNet-50 with?a RepVGG block and train from scratch for 120 epochs.?The accuracy is 76.34%, which is merely 0.03% higher?than the ResNet-50 baseline, suggesting that RepVGGstyle structural re-parameterization is not a generic overparameterization technique, but a methodology critical for?training powerful plain ConvNets. Compared to Residual?Reorg, a real residual network with the same number of?3×3 conv and additional shortcuts for both training and?inference, RepVGG outperforms by 0.58%, which is not?surprising since RepVGG has far more branches. For example, the branches make stage4 of RepVGG an ensemble?of 2×3^15 = 2.8×10^7 models [36], while the number for?Residual Reorg is 2^8 = 256.?

4.3. 語義分割

我們驗證了ImageNetpretrained RepVGG在城市景觀語義分割方面的泛化性能[4](表8)。我們使用PSPNet[42]框架,這是一種多元學(xué)習(xí)率策略,基數(shù)為0.01,冪為0.9,權(quán)重衰減為10?4,全局批處理大小為16,8 GPU,用于40個時代。為了公平比較,我們僅將ResNet-50/101主干更改為RepVGG-B1g2/B2,并保持其他設(shè)置相同。按照官方的PSPNet-50/101[42]在ResNet-50/101的最后兩個階段中使用了擴(kuò)展的conv,我們還對RepVGG-B1g2/B2的最后兩個階段中的所有3×3 conv層進(jìn)行了擴(kuò)展。然而,目前3×3擴(kuò)展conv的低效實現(xiàn)(盡管FLOPs與3×3常規(guī)conv相同)減慢了推理速度。為了便于比較,我們構(gòu)建了另外兩個僅在最后5層(即stage4的最后4層和stage5的唯一一層)進(jìn)行擴(kuò)展的PSPNets(用fast表示),因此PSPNets的運行速度略快于ResNet-50/101骨干網(wǎng)。RepVGG主干網(wǎng)在平均IoU方面以更高的速度分別比ResNet-50和ResNet-101高1.71%和1.01%,RepVGG-B1g2-fast在mIoU方面比ResNet-101主干網(wǎng)高0.37%,運行速度快62%。有趣的是,對于較大的模型,擴(kuò)張似乎更有效,因為與RepVGG-B1g2-fast相比,使用更多擴(kuò)張的conv層并不能提高性能,但在合理減速的情況下,會將RepVGG-B2的mIoU提高1.05%。

4.4. 局限性

RepVGG型號是一款快速、簡單、實用的ConvNets,專為GPU和專用硬件上的最高速度而設(shè)計,較少涉及參數(shù)數(shù)量。它們的參數(shù)效率比resnet更高,但在低功耗設(shè)備方面可能不如MobileNets[16,30,15]和ShuffleNets[41,24]等移動模式。

5.結(jié)論

我們提出了RepVGG,這是一種簡單的網(wǎng)絡(luò)結(jié)構(gòu),具有3×3 conv和ReLU堆棧,特別適用于GPU和專用推理芯片。通過我們的結(jié)構(gòu)重新參數(shù)化方法,它在ImageNet上達(dá)到80%以上的top-1精度,并且與最先進(jìn)的模型相比,顯示出良好的速度-精度權(quán)衡。




https://hub.fastgit.org/DingXiaoH/DiverseBranchBlock

https://arxiv.org/abs/2103.13425

CVPR 2021

https://blog.csdn.net/u010087277/article/details/115488455

我們提出了一種通用的卷積神經(jīng)網(wǎng)絡(luò)構(gòu)造塊(ConvNet),以提高性能而不需要任何推理時間開銷。該塊被稱為多樣分支塊(DBB),它通過組合不同規(guī)模和復(fù)雜度的多樣分支來豐富特征空間,包括卷積序列、多尺度卷積和平均池,從而增強(qiáng)單個卷積的表示能力。經(jīng)過訓(xùn)練后,DBB可以等效地轉(zhuǎn)換為單個conv層進(jìn)行部署。與新型ConvNet架構(gòu)的進(jìn)步不同,DBB在維護(hù)宏架構(gòu)的同時使訓(xùn)練時微觀結(jié)構(gòu)復(fù)雜化,因此它可以作為任何架構(gòu)的常規(guī)conv層的替代品。通過這種方式,可以訓(xùn)練模型達(dá)到更高的性能水平,然后將其轉(zhuǎn)換為原始的推理時間結(jié)構(gòu)進(jìn)行推理。DBB在圖像分類(比ImageNet的top-1準(zhǔn)確率高出1.9%)、對象檢測和語義分割方面改進(jìn)了CONVNET。

1.介紹

提高卷積神經(jīng)網(wǎng)絡(luò)(ConvNet)的性能一直是一個熱門的研究課題。一方面,架構(gòu)設(shè)計的進(jìn)步,例如初始模型[27,28,26,15],揭示了多分支拓?fù)浜筒煌?guī)模和復(fù)雜度的各種路徑的組合可以豐富特征空間并提高性能。然而,復(fù)雜的結(jié)構(gòu)通常會減慢推理速度,因為小型運算符的組合(例如,1×1 conv的串聯(lián)和池)對具有強(qiáng)大并行計算能力的設(shè)備(如GPU)不友好[21]。

另一方面,更多的參數(shù)和連接通常會帶來更高的性能,但由于業(yè)務(wù)需求和硬件限制,我們部署的ConvNet的大小不能任意增加??紤]到這一點,我們通常通過性能和推理時間成本(如延遲、內(nèi)存占用和參數(shù)數(shù)量)之間的權(quán)衡來判斷ConvNet的質(zhì)量。在一般情況下,我們在強(qiáng)大的GPU工作站上對模型進(jìn)行訓(xùn)練,并將其部署到效率敏感的設(shè)備上,因此我們認(rèn)為可以接受更多的訓(xùn)練資源的成本來提高性能,只要部署的模型保持相同的大小。

在本文中,我們試圖在眾多ConvNet架構(gòu)中插入復(fù)雜的結(jié)構(gòu),以提高性能,同時保持原始的推理時間開銷。為此,我們將訓(xùn)練時間和推理時間網(wǎng)絡(luò)結(jié)構(gòu)解耦,只在訓(xùn)練期間使模型復(fù)雜化,并將其轉(zhuǎn)換回原始推理結(jié)構(gòu)。當(dāng)然,我們要求這些額外的訓(xùn)練時間結(jié)構(gòu)1)有效地提高訓(xùn)練時間模型的性能,2)能夠轉(zhuǎn)換為原始的推理時間結(jié)構(gòu)。

為了可用性和通用性,我們將基本的ConvNet組件K×K conv升級為一個功能強(qiáng)大的塊,名為多樣化分支塊(DBB)(圖1)。作為一個構(gòu)建塊,DBB是對改進(jìn)ConvNet的其他努力的補(bǔ)充,例如架構(gòu)設(shè)計[12,24,13,21,23,35]、神經(jīng)架構(gòu)搜索[2,39,22,20,19]、數(shù)據(jù)擴(kuò)充和訓(xùn)練方法[25,5,33],并通過以下兩個特性滿足上述兩個要求:

?????DBB采用具有多尺度卷積、串接1×1-K×K卷積、平均池和分支相加的多分支拓?fù)?。與Inception架構(gòu)一樣,具有不同復(fù)雜度的各種感受野和路徑的操作可以豐富功能空間。

?????DBB可以等效地轉(zhuǎn)換為單個conv進(jìn)行推理。給定一個架構(gòu),我們可以用DBB替換一些常規(guī)的conv層,以構(gòu)建更復(fù)雜的用于訓(xùn)練的子架構(gòu),并將其轉(zhuǎn)換回原始結(jié)構(gòu),這樣就不會有額外的推理時間開銷。

更準(zhǔn)確地說,我們不會在每次forwarding之前導(dǎo)出用于推斷的參數(shù)。相反,我們在訓(xùn)練一次后轉(zhuǎn)換模型,然后我們只保存并使用結(jié)果模型,并且訓(xùn)練后的模型可以被丟棄。將DBB轉(zhuǎn)換為conv的想法可歸類為結(jié)構(gòu)重新參數(shù)化,這意味著使用從另一個結(jié)構(gòu)轉(zhuǎn)換的參數(shù)以及并行工作對結(jié)構(gòu)進(jìn)行參數(shù)化[9]。雖然DBB和常規(guī)conv層具有相同的推理時間結(jié)構(gòu),但前者具有更高的表征能力。通過一系列燒蝕實驗,我們將這種有效性歸因于集成Inception單元的差異化的連接(具有不同規(guī)模和復(fù)雜性的路徑),以及批量歸一化帶來的訓(xùn)練期間非線性[15]。與一些具有重復(fù)路徑或純線性分支的對應(yīng)項相比(圖6),DBB顯示出更好的性能(表4)。

我們將我們的貢獻(xiàn)總結(jié)如下。

?????我們建議將豐富的微結(jié)構(gòu)整合到各種ConvNet架構(gòu)中,以提高性能,同時保持原有的宏架構(gòu)。

?????我們提出了DBB,一種通用構(gòu)建塊,并總結(jié)了六種轉(zhuǎn)換(圖2),將DBB轉(zhuǎn)換為單個卷積,因此對用戶來說是無代價的。

?????我們展示了一個具有代表性的類似于Inception的DBB實例,并表明它提高了ImageNet[7](例如,top-1精度提高了1.9%)、COCO檢測[18]和城市景觀[4]的性能。

2.????相關(guān)工作

2.1. 多分支架構(gòu)

Inception[15,26,27,28]架構(gòu)采用多分支結(jié)構(gòu)來豐富特征空間,這證明了不同連接、不同感受野和多分支組合的重要性。DBB借用了使用多分支拓?fù)涞乃枷?,但區(qū)別在于1)DBB是一個可用于多種架構(gòu)的構(gòu)建塊,2)DBB的每個分支都可以轉(zhuǎn)換為一個conv,因此這些分支的組合可以合并為一個conv,這比實際的Inception單元快得多。我們將展示不同分支相對于重復(fù)分支的優(yōu)勢(表4),最有趣的發(fā)現(xiàn)是,將兩個具有不同表征能力的分支(例如,1×1 conv和3×3 conv)組合起來比兩個大容量分支(例如,兩個3×3卷積)更好,這反過來可能會為ConvNet架構(gòu)設(shè)計帶來啟示。

2.2. ConvNet組件以獲得更好的性能

有一些新的組件可以改進(jìn)convnet。例如,擠壓和激勵(SE)塊[14]和Efficient Convolutional Attention(ECA)塊[29]利用注意機(jī)制重新校準(zhǔn)特征,Octave卷積[3]減少規(guī)則卷積的空間冗余,可變形卷積[6]增加具有可學(xué)習(xí)偏移的空間采樣位置,擴(kuò)張卷積擴(kuò)展了感受野[32],模糊池[34]恢復(fù)了移位不變性等。DBB是這些組件的補(bǔ)充,因為它只升級了一個基本構(gòu)建塊:conv層。

2.3. 結(jié)構(gòu)再參數(shù)化

本文和并行工作RepVGG[9]是第一個使用結(jié)構(gòu)重新參數(shù)化來定義使用從另一個結(jié)構(gòu)轉(zhuǎn)換的參數(shù)對結(jié)構(gòu)進(jìn)行參數(shù)化的方法。ExpandNet[10]、DO Conv[1]和ACNet[8]也可以歸類為結(jié)構(gòu)重新參數(shù)化,因為它們將塊轉(zhuǎn)換為Conv。例如,ACNet使用非對稱卷積塊(ACB,如圖6d所示)來加強(qiáng)Conv內(nèi)核的骨架(即交叉部分)。與DBB相比,它還被設(shè)計為在不增加額外推理時間成本的情況下改進(jìn)ConvNet。然而,不同之處在于,ACNet的動機(jī)是觀察到skeleton的參數(shù)在大小上更大,因此試圖使其更大,而我們關(guān)注的是不同的角度。我們發(fā)現(xiàn)平均池、1×1 conv和1×1-K×K順序conv更有效,因為它們提供了不同復(fù)雜度的路徑,并且允許使用更多的訓(xùn)練期間非線性。此外,ACB可以被視為DBB的特例,因為1×K和K×1 conv層可以通過變換VI(圖2)擴(kuò)充到K×K,并通過變換II合并到方形核中。

2.4. 其他ConvNet重新參數(shù)化方法

有些工作可以稱為重新參數(shù)化,但不能稱為結(jié)構(gòu)重新參數(shù)化。例如,最近的NAS[20,39]方法[2]使用元內(nèi)核對內(nèi)核進(jìn)行重新參數(shù)化,并將這些元內(nèi)核的寬度和高度補(bǔ)充到搜索空間中。軟條件計算(SCC)[31]或CondConv[30]可被視為與數(shù)據(jù)相關(guān)的內(nèi)核重新參數(shù)化,因為它為相同形狀的多個內(nèi)核生成權(quán)重,然后導(dǎo)出一個內(nèi)核作為所有此類內(nèi)核的加權(quán)和,以參與卷積。請注意,SCC在部署的模型中引入了大量參數(shù)。這些重新參數(shù)化方法不同于ACB和DBB,前者的“重新參數(shù)化”意味著使用一些元參數(shù)(例如,元核[2])導(dǎo)出一組新參數(shù),然后將新參數(shù)用于其他計算,而后者意味著將訓(xùn)練模型的參數(shù)轉(zhuǎn)換為另一個參數(shù)化。

3.????多分支塊

3.1. 卷積的線性

具有C個輸入通道、D個輸出通道和核大小K×K的conv層的參數(shù)在conv核中,它是一個四階張量F∈ R^{D×C×K×K}和可選偏置b\in R^D。它輸入一個C通道的特征圖I∈ R^{C×H×W},輸出一個D通道的特征圖O∈ R^{D×H’×W’},其中H’和W’取決于K、填充和步幅。我們使用?表示卷積操作,并將偏置b復(fù)制為REP(b)\in R^{D×H’×W’},并將其加到卷積操作的結(jié)果上。Formally,

O=I?F+REP(b)? ??(1)

輸出的第j個通道在(h,w)處的值為:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容