CVPR2022 | 在線(xiàn)Re-Param | OREPA讓AI訓練速度進(jìn)一步加快,精度略勝RepVGG!
1簡(jiǎn)介結構重參化在各種計算機視覺(jué)任務(wù)中引起了越來(lái)越多的關(guān)注。它的目的是提高深度模型的性能,而不引入任何推理時(shí)間成本。雖然這種模型在推理過(guò)程中很有效,但它嚴重依賴(lài)于復雜的training-time block來(lái)實(shí)現較高的準確性,從而導致了巨大的額外訓練成本。
在本文中提出了在線(xiàn)卷積重參化(OREPA),一個(gè)兩階段的pipeline,旨在通過(guò)將復雜的training-time block壓縮成單個(gè)卷積來(lái)減少巨大的訓練開(kāi)銷(xiāo)。為了實(shí)現這一目標,本文引入了一個(gè)線(xiàn)性縮放層,以更好地優(yōu)化在線(xiàn)塊。在降低訓練成本的幫助下,作者還探索了一些更有效的重參組件。與最先進(jìn)的重參模型相比,OREPA能夠節省約70%的training-time成本,并加速訓練速度約2×。同時(shí),配備OREPA,模型在ImageNet上的方法高出+0.6%。作者還進(jìn)行了目標檢測和語(yǔ)義分割的實(shí)驗,并顯示了對下游任務(wù)的一致改進(jìn)。
卷積神經(jīng)網(wǎng)絡(luò )(CNNs)已經(jīng)在許多計算機視覺(jué)任務(wù)的應用成功,包括圖像分類(lèi)、目標檢測、語(yǔ)義分割等。精度和模型效率之間的權衡也已被廣泛討論。
一般來(lái)說(shuō),一個(gè)精度較高的模型通常需要一個(gè)更復雜的塊,一個(gè)更寬或更深的結構。然而,這樣的模型總是太重,無(wú)法部署,特別是在硬件性能有限、需要實(shí)時(shí)推理的場(chǎng)景下??紤]到效率,更小、更緊湊和更快的模型自然是首選。
為了獲得一個(gè)部署友好且高精度的模型,有研究者提出了基于結構重參數化的方法來(lái)釋放性能。在這些方法中,模型在訓練階段和推理階段有不同的結構。具體來(lái)說(shuō),使用復雜的訓練階段拓撲,即重參數化的塊,來(lái)提高性能。訓練結束后,通過(guò)等效變換將一個(gè)復雜的塊重參為成一個(gè)單一的線(xiàn)性層。重參后的模型通常具有一個(gè)整潔架構模型,例如,通常是一個(gè)類(lèi)似VGG的或一個(gè)類(lèi)似ResNet的結構。從這個(gè)角度來(lái)看,重參化策略可以在不引入額外的推理時(shí)間成本的情況下提高模型的性能。
BN層是重構模型的關(guān)鍵組成部分。在一個(gè)重新解析塊(圖1(b))中,在每個(gè)卷積層之后立即添加一個(gè)BN層??梢杂^(guān)察到,去除這些BN層會(huì )導致的性能退化。然而,當考慮到效率時(shí),這種BN層的使用出乎意料地在訓練階段帶來(lái)了巨大的計算開(kāi)銷(xiāo)。在推理階段,復雜的塊可以被壓縮成一個(gè)卷積層。但是,在訓練過(guò)程中,BN層是非線(xiàn)性的,也就是說(shuō),它們將特征映射除以它的標準差,這就阻止了合并整個(gè)塊。因此,存在大量的中間計算操作(large FLOPS)和緩沖特征映射(high memory usage)。更糟糕的是,這么高的訓練預算使得很難探索更復雜和可能更強的重參塊。很自然地,下面的問(wèn)題就出現了:
為什么標準化在重參中這么重要?
通過(guò)分析和實(shí)驗,作者認為BN層中的尺度因子最重要,因為它們能夠使不同分支的優(yōu)化方向多樣化。
基于觀(guān)察結果,作者提出了在線(xiàn)重參化(OREPA)(圖1(c)),這是一個(gè)兩階段的pipeline,使之能夠簡(jiǎn)化復雜的training-time re-param block。
在第一階段,block linearization,去除所有的非線(xiàn)性BN層,并引入線(xiàn)性縮放層。這些層與BN層具有相似的性質(zhì),因此它們使不同分支的優(yōu)化多樣化。此外,這些層都是線(xiàn)性的,可以在訓練過(guò)程中合并成卷積層。
第二階段,block squeezing,將復雜的線(xiàn)性塊簡(jiǎn)化為單一的卷積層。OREPA通過(guò)減少由中間計算層引起的計算和存儲開(kāi)銷(xiāo),顯著(zhù)降低了訓練成本,對性能只有非常小的影響。
此外,高效化使得探索更復雜的重參化拓撲成為可能。為了驗證這一點(diǎn),作者進(jìn)一步提出了幾個(gè)重參化的組件,以獲得更好的性能。
在ImageNet分類(lèi)任務(wù)上評估了所提出的OREPA。與最先進(jìn)的修復模型相比,OREPA將額外的訓練時(shí)間GPU內存成本降低了65%到75%,并將訓練過(guò)程加快了1.5-2.3倍。同時(shí),OREPA-ResNet和OREPA-VGG的性能始終優(yōu)于+0.2%~+0.6%之前的DBB和RepVGG方法。同時(shí)作者還評估了在下游任務(wù)上的OREPA,即目標檢測和語(yǔ)義分割。作者發(fā)現OREPA可以在這些任務(wù)上也可以帶來(lái)性能的提高。
本文主要貢獻:- 提出了在線(xiàn)卷積重參化(OREPA)策略,這極大地提高了重參化模型的訓練效率,并使探索更強的重參化塊成為可能;
- 通過(guò)對重參化模型工作機制的分析,用引入的線(xiàn)性尺度層代替BN層,這仍然提供了不同的優(yōu)化方向,并保持了表示能力;
- 在各種視覺(jué)任務(wù)上的實(shí)驗表明,OREPA在準確性和訓練效率方面都優(yōu)于以前的重參化模型(DBB/RepVGG)。
結構重參化最近被重視并應用于許多計算機視覺(jué)任務(wù),如緊湊模型設計、架構搜索和剪枝。重參化意味著(zhù)不同的架構可以通過(guò)參數的等價(jià)轉換來(lái)相互轉換。例如,1×1卷積的一個(gè)分支和3×3卷積的一個(gè)分支,可以轉移到3×3卷積的單個(gè)分支中。在訓練階段,設計了多分支和多層拓撲來(lái)取代普通的線(xiàn)性層(如conv或全連接層)來(lái)增強模型。Cao等討論了如何在訓練過(guò)程中合并深度可分離卷積核。然后在推理過(guò)程中,將訓練時(shí)間的復雜模型轉移到簡(jiǎn)單模型中,以便于更快的推理。
在受益于復雜的training-time拓撲,同時(shí),當前的重參化方法訓練使用不可忽略的額外計算成本。當塊變得更復雜以變得更強的表示時(shí),GPU內存利用率和訓練時(shí)間將會(huì )越來(lái)越長(cháng),最終走向不可接受。與以往的重參化方法不同,本文更多地關(guān)注訓練成本。提出了一種通用的在線(xiàn)卷積重參化策略,使training-time的結構重參化成為可能。
2.2 NormalizationBN被提出來(lái)緩解訓練非常深度神經(jīng)網(wǎng)絡(luò )時(shí)的梯度消失問(wèn)題。人們認為BN層是非常重要的,因為它們平滑了損失。最近關(guān)于無(wú)BN神經(jīng)網(wǎng)絡(luò )的研究聲稱(chēng),BN層并不是不可或缺的。通過(guò)良好的初始化和適當的正則化,可以?xún)?yōu)雅地去除BN層。
對于重參化模型,作者認為重參化塊中的BN層是關(guān)鍵的。無(wú)BN的變體將會(huì )出現性能下降。然而,BN層是非線(xiàn)性的,也就是說(shuō),它們將特征圖除以它的標準差,這阻止了在線(xiàn)合并塊。為了使在線(xiàn)重參化可行,作者去掉了重參塊中的所有BN層,并引入了BN層的線(xiàn)性替代方法,即線(xiàn)性縮放層。
2.3 卷積分解標準卷積層計算比較密集,導致大的FLOPs和參數量。因此,卷積分解方法被提出,并廣泛應用于移動(dòng)設備的輕量化模型中。重參化方法也可以看作是卷積分解的某種形式,但它更傾向于更復雜的拓撲結構。本文的方法的不同之處在于,在kernel-level上分解卷積,而不是在structure level。
3在線(xiàn)重參化在本節中,首先,分析了關(guān)鍵組件,即重參化模型中的BN層,在此基礎上提出了在線(xiàn)重參化(OREPA),旨在大大減少再參數化模型的訓練時(shí)間預算。OREPA能夠將復雜的訓練時(shí)間塊簡(jiǎn)化為一個(gè)卷積層,并保持了較高的精度。
OREPA的整體pipeline如圖2所示,它包括一個(gè)Block Linearization階段和一個(gè)Block Squeezing階段。
作者通過(guò)分析多層和多分支結構的優(yōu)化多樣性,深入研究了重參化的有效性,并證明了所提出的線(xiàn)性縮放層和BN層具有相似的效果。
最后,隨著(zhù)訓練預算的減少,進(jìn)一步探索了更多的組件,以實(shí)現更強的重參化模型,成本略有增加。
3.1 重參化中的Normalization作者認為中間BN層是重參化過(guò)程中多層和多分支結構的關(guān)鍵組成部分。以SoTA模型DBB和RepVGG為例,去除這些層會(huì )導致嚴重的性能下降,如表1所示。
這種觀(guān)察結果也得到了Ding等人的實(shí)驗支持。因此,作者認為中間的BN層對于重參化模型的性能是必不可少的。
然而,中間BN層的使用帶來(lái)了更高的訓練預算。作者注意到,在推理階段,重參化塊中的所有中間操作都是線(xiàn)性的,因此可以合并成一個(gè)卷積層,從而形成一個(gè)簡(jiǎn)單的結構。
但在訓練過(guò)程中,BN層是非線(xiàn)性的,即它們將特征映射除以其標準差。因此,中間操作應該單獨計算,這將導致更高的計算和內存成本。更糟糕的是,如此高的成本將阻止探索更強大的訓練模塊。
3.2 Block Linearization如3.1中所述,中間的BN層阻止了在訓練過(guò)程中合并單獨的層。然而,由于性能問(wèn)題,直接刪除它們并不簡(jiǎn)單。為了解決這一困境,作者引入了channel級線(xiàn)性尺度操作作為BN的線(xiàn)性替代方法。
縮放層包含一個(gè)可學(xué)習的向量,它在通道維度中縮放特征映射。線(xiàn)性縮放層具有與BN層相似的效果,它們都促進(jìn)多分支向不同的方向進(jìn)行優(yōu)化,這是重參化時(shí)性能提高的關(guān)鍵。除了對性能的影響外,線(xiàn)性縮放層還可以在訓練過(guò)程中進(jìn)行合并,使在線(xiàn)重參化成為可能。
基于線(xiàn)性縮放層,作者修改了重參化塊,如圖3所示。具體來(lái)說(shuō),塊的線(xiàn)性化階段由以下3個(gè)步驟組成:
首先,刪除了所有的非線(xiàn)性層,即重參化塊中的BN層
其次,為了保持優(yōu)化的多樣性,在每個(gè)分支的末尾添加了一個(gè)縮放層,這是BN的線(xiàn)性替代方法
最后,為了穩定訓練過(guò)程,在所有分支的添加后添加一個(gè)BN層。
一旦完成線(xiàn)性化階段,在重參化塊中只存在線(xiàn)性層,這意味著(zhù)可以在訓練階段合并塊中的所有組件。
3.3 Block SqueezingBlock Squeezing步驟將計算和內存昂貴的中間特征映射上的操作轉換為更經(jīng)濟的kernel上的操作。這意味著(zhù)在計算和內存方面從減少到,其中、是特征圖和卷積核的空間尺寸。
一般來(lái)說(shuō),無(wú)論線(xiàn)性重參化塊是多么復雜,以下2個(gè)屬性始終成立:
- Block中的所有線(xiàn)性層,例如深度卷積、平均池化和所提出的線(xiàn)性縮放,都可以用帶有相應參數的退化卷積層來(lái)表示;
- Block可以由一系列并行分支表示,每個(gè)分支由一系列卷積層組成。
有了上述兩個(gè)特性,如果可以將
- 多層(即順序結構)
- 多分支(即并行結構)
簡(jiǎn)化為單一卷積,就可以壓縮一個(gè)塊。在下面的部分中,將展示如何簡(jiǎn)化順序結構(圖4(a))和并行結構(圖4(b))。
首先定義卷積的符號。設表示一個(gè)大小的二維卷積核的輸入和輸出通道數。,表示輸入和輸出張量。在這里省略了偏差作為一種常見(jiàn)的做法,卷積過(guò)程被表示為:
考慮一堆卷積層,其表示為:
其中滿(mǎn)足,。根據結合律,通過(guò)首先卷積核,可以將這些層壓縮成一個(gè)層:
其中,為第層的權重。表示端到端映射矩陣。
2、簡(jiǎn)化并行結構并行結構根據卷積的線(xiàn)性性,可以根據等式將多個(gè)分支合并成一個(gè)分支:
其中,為第個(gè)分支的權重,和(為統一的權重。值得注意的是,當合并不同大小的kernel時(shí),需要對齊不同kernel的空間中心,例如,1×1 kernel應該與3×3 kernel的中心對齊(如RepVGG)。
3、訓練開(kāi)銷(xiāo):從特征到kernels。無(wú)論這個(gè)Block有多復雜,它都必須僅僅由多分支和多層的子拓撲組成。因此,可以根據上述兩個(gè)簡(jiǎn)化規則將其簡(jiǎn)化為一個(gè)單一的簡(jiǎn)化規則。最后,可以得到一體化的端到端映射權重,并且在訓練期間只卷積一次。實(shí)際上將中間特征映射上的操作(卷積,加法)轉換為卷積kernel上的操作。因此,在計算和內存方面將計算復雜度從減少到了。
3.4 多分支拓撲結構的梯度分析為了理解為什么Block Linearization步驟是可行的?,即為什么縮放層是重要的?,作者對統一權重重參化的優(yōu)化進(jìn)行了分析。
結論是,對于去掉BN層的分支,利用縮放層可以使其優(yōu)化方向多樣化,并防止其退化為單一的優(yōu)化方向。
為了簡(jiǎn)化表示法,只取輸出Y的單維??紤]一個(gè)縮放序列:
其中是滑動(dòng)窗口內的向量化像素,,W是對應于特定輸出通道的卷積核,是比例因子。假設所有參數都通過(guò)隨機梯度下降更新,映射更新為:
其中,L為整個(gè)模型的損失函數,η為學(xué)習率。是多分支拓撲共享的,即:
端到端權重與等式(6)的權重同等優(yōu)化(順序結構可以得到):
使用相同的前傳t-moment端到端矩陣。因此,沒(méi)有引入優(yōu)化變化。這一結論也得到了實(shí)驗支持。相反,具有分支級的多分支拓撲提供了這樣的變化:
端到端權重的更新與等式(6)不同:
滿(mǎn)足相同的前提條件和條件1:
條件1:所有分支中至少有2個(gè)是活動(dòng)的
條件2:每個(gè)活動(dòng)分支的初始狀態(tài)都是不同的
同時(shí),當滿(mǎn)足條件2時(shí),多分支結構不會(huì )退化為單一結構,多個(gè)分支同時(shí)進(jìn)行前向和反向傳播。這也揭示了為什么比例因子是重要的。
注意,當每個(gè)分支的權值是隨機初始化的,而縮放因子被初始化為1時(shí),條件1和條件2都始終滿(mǎn)足。
命題1:一個(gè)單分支線(xiàn)性映射,當通過(guò)超兩層多分支拓撲重參化部分或全部時(shí),整個(gè)端到端權重矩陣將得到不同的優(yōu)化。如果映射的一層被重參化到多達一層的多分支拓撲,則優(yōu)化將保持不變。
到目前為止,已經(jīng)擴展了關(guān)于重參化如何影響優(yōu)化的討論。實(shí)際上,所有當前有效的重參化拓撲都可以通過(guò)命題1進(jìn)行驗證。
由于所提出的OREPA節省了很大幅度的訓練成本,它促使能夠探索更復雜的訓練塊。為此,設計了一種新的重新參數化模型,即OREPA-ResNet,通過(guò)線(xiàn)性化最新的模型DBB,并插入以下組件(圖5)。
在DBB中,在塊中使用了池化層。Qin等人認為,池化層是頻率濾波器的一種特殊情況。為此,作者添加了一個(gè)Conv1×1-頻率濾波器分支。
2、線(xiàn)性深度可分離卷積通過(guò)去除中間的非線(xiàn)性激活層,對深度可分離的卷積進(jìn)行了輕微的修改,使其在訓練過(guò)程中可以進(jìn)行合并。
3、重參化1×1卷積以往的工作主要集中在3×3卷積層的重參上,而忽略了1×1卷積層的重參。作者建議重參化1×1層,因為它們在bottleneck結構中發(fā)揮著(zhù)重要作用。具體來(lái)說(shuō),在Block添加了一個(gè)額外的Conv1×1-Conv1×1分支。
4、線(xiàn)性Stem大的卷積核通常被放置在最開(kāi)始的層,例如,7×7的Stem,目的是實(shí)現一個(gè)更大的感受野。Guo等人將堆疊的3×3卷積層替換7×7卷積,以獲得更高的精度。然而,由于高分辨率,在最初始層堆疊需要更大的計算開(kāi)銷(xiāo)。需要注意的是,這里可以用提出的線(xiàn)性縮放層將stacked deep stem縮放到7×7conv層,這可以大大降低訓練成本,同時(shí)保持高精度。
對于OREPA-ResNet中的每個(gè)塊(圖6):
4實(shí)驗4.1 消融實(shí)驗1、線(xiàn)性縮放層和優(yōu)化多樣性
- 添加了一個(gè)頻率先驗濾波器和一個(gè)線(xiàn)性的深度可分離卷積
- 將所有的Stem(即最初的7×7卷積)替換為所提出的線(xiàn)性deep stem層
- 在bottleneck中,除了1和2之外,進(jìn)一步將所提出的rep 1×1塊替換原來(lái)的1×1卷積分支
首先進(jìn)行實(shí)驗來(lái)驗證核心思想,即所提出的線(xiàn)性縮放層與BN層起著(zhù)相似的作用。根據3.4中的分析。文章展示了縮放層和BN層都能夠多樣化優(yōu)化方向。為了驗證這一點(diǎn),作者可視化了圖7中所有分支的分支級相似性。作者發(fā)現,縮放層的使用可以顯著(zhù)增加不同分支的多樣性。
在表2中驗證了這種多樣性的有效性。以ResNet-18結構為例,這兩種層(BN和線(xiàn)性縮放)帶來(lái)了相似的性能增益(即0.42vs.0.40)。這有力地支持了本文的觀(guān)點(diǎn),即在重參化中,最重要的是縮放部分,而不是統計標準化部分。
2、各種線(xiàn)性化策略本文作者嘗試了各種尺度層的線(xiàn)性化策略。具體來(lái)說(shuō)4種變體:
- Vector:利用一個(gè)通道級向量,并沿著(zhù)通道軸執行縮放操作。
- Scalar:用一個(gè)標量來(lái)縮放整個(gè)特征圖。
- W/o scaling:刪除分支級縮放層。
- W/o post-addition BN:刪除后BN層。
從表3中發(fā)現,無(wú)論是部署標量縮放層還是不部署縮放層,都會(huì )導致較差的結果。因此,選擇向量縮放作為默認策略。
作者還研究了加法后BN層的有效性。如3.2中所述。添加了后BN層來(lái)穩定訓練過(guò)程。為了證明這一點(diǎn),作者刪除了這些層,如表3中的最后一行所示,梯度變成無(wú)窮大,模型無(wú)法收斂。
3、每個(gè)組件都很重要對ResNet-18和ResNet-50的結構都進(jìn)行了實(shí)驗。如表2所示,每個(gè)組件都有助于提高性能。
4、Online vs. offline作者比較了OREPA-ResNet-18與DBB-18的訓練成本進(jìn)行了對比。舉例說(shuō)明了消耗的內存(圖8(a))和訓練時(shí)間(圖8(b))。
隨著(zhù)組件數量的增加,離線(xiàn)重參化模型面臨著(zhù)內存利用率快速增加和訓練時(shí)間長(cháng)的問(wèn)題。由于高內存成本,甚至不能在ResNet-18模型中引入Deep Stem。相比之下,在線(xiàn)重參化策略將訓練速度提高了4×,并節省了高達96+%的額外GPU內存??傮w的訓練開(kāi)銷(xiāo)大致與基本模型(普通ResNet)的水平相同。
4.2 與其他重參化對比從表4中觀(guān)察到在ResNet系列上,OREPA可以在各種模型上的性能持續提高+0.36%。同時(shí),它將訓練速度加速了1.5×至2.3×,并節省了約70+%的額外訓練時(shí)間內存。
作者還對VGG結構進(jìn)行了實(shí)驗,比較了OREPA-VGG和RepVGG。對于OREPA-VGG模型,簡(jiǎn)單地用在OREPA-中使用的OREPA-res-3×3分支。這種修改只引入了邊際的額外訓練成本,同時(shí)也帶來(lái)了明顯的性能增益(+0.25%~+0.6%)。
4.3 目標檢測與語(yǔ)義分割當簡(jiǎn)單地將所提出的OREPA從ResNet轉移到RepVGG時(shí),作者發(fā)現基于殘差和無(wú)殘差(VGG-like)結構之間的性能不一致。因此,在RepVGG塊中保留了所有的三個(gè)分支,以保持具有競爭性的精度,這就略微增加了計算成本。這是一個(gè)有趣的現象。
5參考[1].OREPA: Online Convolutional Re-parameterization
本文僅做學(xué)術(shù)分享,如有侵權,請聯(lián)系刪文。
*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。