RepVGG算法详解
RepVGG: Making VGG-style ConvNets Great Again-論文鏈接-代碼鏈接
目錄
- 1、需求解讀
- 2、RepVGG算法簡介
- 3、RepVGG網絡架構詳解
- 3.1 推理階段Op融合細節詳解
- 3.2 不同配置版本的ResVGG網絡
- 4、RepVGG算法實現步驟
- 5、RepVGG算法效果展示與分析
- 6、總結與分析
- 參考資料
- 注意事項
1、需求解讀
??通過總結,你可能會發現計算機視覺中的多種不同任務的網絡架構大致都可以分為3個通用的模塊,具體包括:通用Backbone網絡、任務特定網絡和任務頭網絡,其中通用Backbone網絡用來提取一些低級的通用特征,具體包括顏色、形狀和紋理等;任務特定網絡用來對這些通用的特征進行進一步的加工,將這些特征變換成該任務需要的特征;任務頭網路根據不同的任務來輸出不同形式的結果,例如分類算法輸出類別概率,檢測任務輸出類別和檢測框等。總而言之,分類網絡中的Backbone網絡是很多高級任務的基準網絡,它的性能在很大程度上決定了該網絡的部分上限。
??在常見的計算機視覺任務中,我們經常會看到ResNet和MobileNet兩個網絡的身影,大量的實驗結果表明:ResNet網絡能夠提取到魯邦的特征表示,用戶可以根據自己的需要靈活的選擇ResNet18、ResNet34和ResNet50等網路架構;MobileNet適合應用在一些低算力的嵌入式設備中,可以在速度和精度之中達到很好的均衡。但是我們很好看到過VGG網絡的身影,這幾年越來越少!!!主要的原因包含2點:(1)VGG網絡的模型更大,不便于模型部署;(2)與ResNet網絡相比,VGG網絡的性能會有些遜色。
??RepVGG,這個網絡就是在VGG的基礎上面進行改進,主要的思路包括:(1)在VGG網絡的Block塊中加入了Identity和殘差分支,相當于把ResNet網絡中的精華應用 到VGG網絡中;(2)模型推理階段,通過Op融合策略將所有的網絡層都轉換為Conv3*3,便于網絡的部署和加速。 如果你做過模型的部署,你可能會比較清楚,當前很多的模型推理框架中都對Conv3*3卷積做了一些特定的加速操作,如果我們可以將所有卷積層轉換成Conv3*3,整個網絡在推理階段還是能獲得較大的速度提升!!!
2、RepVGG算法簡介
??RepVGG是一個分類網路,該網絡是在VGG網絡的基礎上進行改進,主要的改進點包括:(1)在VGG網絡的Block塊中加入了Identity和殘差分支,相當于把ResNet網絡中的精華應用 到VGG網絡中;(2)模型推理階段,通過Op融合策略將所有的網絡層都轉換為Conv3*3,便于模型的部署與加速。 該論文中的包含的亮點包括:(1)網絡訓練和網絡推理階段使用不同的網絡架構,訓練階段更關注精度,推理階段更關注速度,這個思路很值得體會,是一種提升模型部署速度的方案!!!
3、RepVGG網絡架構詳解
??上圖展示了部分RepVGG網絡,圖A表示的是原始的ResNet網絡,該網絡中包含著Conv1*1的殘差結構和Identity的殘差結構,正是這些殘差結構的存在解決了深層網路中的梯度消失問題,使得網絡更加易于收斂。圖B表示的是訓練階段的RepVGG網絡架構,整個網絡的主體結構和ResNet網絡類似,兩個網絡中都包含殘差結構。兩個網絡中的主要差異如下所述:(1)RepVGG網絡中的殘差塊并沒有跨層,如圖中的綠框所示;(2)整個網絡包含2種殘差結構,如圖中的綠框和紅框所示,綠框中的殘差結構僅僅包含Conv1*1殘差分支;紅框中不僅包含Conv1*1的殘差結構,而且包含Identity殘差結構。由于殘差結構具有多個分支,就相當于給網絡增加了多條梯度流動的路徑,訓練一個這樣的網絡,其實類似于訓練了多個網絡,并將多個網絡融合在一個網絡中,類似于模型集成的思路,不過這種思路更加簡單和高效!!!(3)模型的初始階段使用了簡單的殘差結構,隨著模型的加深,使用了復雜的殘差結構,這樣不僅僅能夠在網絡的深層獲得更魯邦的特征表示,而且可以更好的處理網絡深層的梯度消失問題。圖C表示的是推理階段的RepVGG網絡,該網絡的結構非常簡單,整個網絡均是由Conv3*3+Relu堆疊而成,易于模型的推理和加速。
??這種架構的主要優勢包括:(1)當前大多數推理引擎都對Conv3*3做了特定的加速,假如整個網絡中的每一個Conv3*3都能節省3ms,如果一個網絡中包含30個卷積層,那么整個網絡就可以節省3*30=90ms的時間,這還是初略的估算。(2)當推理階段使用的網絡層類別比較少時,我們愿意花費一些時間來完成這些模塊的加速,因為這個工作的通用性很強,不失為一種較好的模型加速方案。(3)對于殘差節點而言,需要當所有的殘差分支都計算出對應的結果之后,才能獲得最終的結果,這些殘差分支的中間結果都會保存在設備的內存中,這樣會對推理設備的內存具有較大的要求,來回的內存操作會降低整個網絡的推理速度。而推理階段首先在線下將模型轉換為單分支結構,在設備推理階段就能更好的提升設備的內存利用率,從而提升模型的推理速度,更直觀的理解請看下圖。總而言之,模型推理階段的網絡結構越簡單越能起到模型加速的效果。
3.1 推理階段Op融合細節詳解
??上圖展示了模型推理階段的重參數化過程,其實就是一個OP融合和OP替換的過程。圖A從結構化的角度展示了整個重參數化流程, 圖B從模型參數的角度展示了整個重參數化流程。整個重參數化步驟如下所示:
- 步驟1-首先通過式3將殘差塊中的卷積層和BN層進行融合,該操作在很多深度學習框架的推理階段都會執行。圖中的灰色框中執行Conv3*3+BN層的融合,圖中的黑色矩形框中執行Conv1*1+BN層的融合,圖中的黃色矩形框中執行Conv3*3(卷積核設置為全1)+BN層的融合。其中Wi表示轉換前的卷積層參數,μi\mu_{i}μi?表示BN層的均值,σi\sigma_{i}σi?表示BN層的方差,γi\gamma_{i}γi?和βi\beta_{i}βi?分別表示BN層的尺度因子和偏移因子,W’和b’分別表示融合之后的卷積的權重和偏置。
- 步驟2-將融合后的卷積層轉換為Conv3*3,即將具體不同卷積核的卷積均轉換為具有3*3大小的卷積核的卷積。由于整個殘差塊中可能包含Conv1*1分支和Identity兩種分支,如圖中的黑框和黃框所示。對于Conv1*1分支而言,整個轉換過程就是利用3*3的卷積核替換1*1的卷積核,具體的細節如圖中的紫框所示,即將1*1卷積核中的數值移動到3*3卷積核的中心點即可;對于Identity分支而言,該分支并沒有改變輸入的特征映射的數值,那么我們可以設置一個3*3的卷積核,將所有的9個位置處的權重值都設置為1,那么它與輸入的特征映射相乘之后,保持了原來的數值,具體的細節如圖中的褐色框所示。
- 步驟3-合并殘差分支中的Conv3*3。即將所有分支的權重W和偏置B疊加起來,從而獲得一個融合之后的Conv3*3網絡層。
3.2 不同配置版本的ResVGG網絡
??對于基準分類網絡而言,一般都會包含多個具有不同配置的網絡架構,具有代表性的就是MobileNet和ShuffleNet網絡,小模型可以進行輕量化部署,適合應用于一個算力較弱的嵌入式設備中,如rk3399、rk3288和Rapi3等;大模型用來進行服務端部署,適合應用到帶有顯卡的服務器上面,如GTX1080Ti、GTX2080Ti等,由于該設備的算力比較充足,即使是利用大模型也能獲得實時的運行速度。
??RepVGG也提供兩大類型的網絡配置,具體的細節如上表所示,RepVGG-A表示的是一種比較輕量型的網絡,整個網絡的層數會少一些,當前分類性能也會差一些;RepVGG-B表示的是一種高精度類型的網絡,整個網路會更深一些,分類精度更高一些,適用于服務端部署。整個RepVGG網絡包含5個Stage,Stage1僅僅包含一個殘差塊,輸出的特征映射大小為112*112,殘差塊的通道個數取min(64,64a);Stage2包含2個殘差塊,輸出的特征映射大小為56*56,殘差塊的通道個數為64a個;Stage3包含4個殘差塊,輸出的特征映射大小為28*28,殘差塊的通道個數為128a個;Stage4包含14個殘差塊,輸出的特征映射大小為14*14,殘差塊的通道個數為256a個;Stage5包含1個殘差塊,輸出的特征映射大小為7*7,殘差塊的通道個數為512b個。整個網絡通過參數a和參數b來形成不同版本的變種,具體的變種如下表所示,參數a和參數b用來控制殘差塊的通道個數,參數a用來控制stage1-stage4階段的通道個數,參數b用來控制stage5階段的通道個數,一般情況下a < b,主要的原因是Stage5中需要具有更多的通道個數,從而獲得一些更魯邦的特征表示,有利于后續的頭網絡輸出更準確的預測結果。
4、RepVGG算法實現步驟
步驟1-獲取并劃分訓練數據集,并對訓練集執行數據增強操作;
步驟2-搭建RepVGG訓練網絡,訓練分類網絡,直到網絡收斂為止;
步驟3-加載訓練好的網絡,對該網絡執行重參數化操作,具體的細節如上節所述;
步驟4-加載重參數化后的模型,執行模型推理。
5、RepVGG算法效果展示與分析
??上圖展示了ResVGG網絡與ResNet網絡在相同測試數據集上面的性能指標。評估的性能指標包括Top-1準確率、模型推理速度、模型參數量、FLOPS和Wino卷積的MUL個數。通過觀察我們可以得出以下的初步結論:(1)相同測試條件下,最小的模型RepVGG-A0與ResNet-18相比,各項指標都有顯著的提升,RepVGG-A0網絡不僅具有更少的參數量,更快的推理速度,而且獲得了更高的分類精度;(2)與EfficientNet-B0相比,RepVGG-B1g4不僅具有更快的執行速度,而且獲得了更高的分類精度,當然該模型也更大一些。(3)與VGG-16網絡相比,RepVGG-B2在各個指標上面都有一定的性能提升。
??為了進一步驗證RepVGG網絡的通用性,作者驗證了該Backbone在語義分割任務上面的性能,并和基準Backbon ResNet50和ResNet101進行了性能比較,具體的評估指標包括Mean IoU、Mean pixel acc和Speed。通過觀察我們可以得出以下初步的結論:(1)與ResNet-50網絡相比,RepVGG-B1g2-fast網絡不僅獲得較高的精度,而且在速度上也有一些優勢;(2)與ResNet-101網絡相比,RepVGG-B2-fast網絡不均獲得了較高的速度,各項指標上也都有所提升。
6、總結與分析
??RepVGG是一個分類網路,該網絡是在VGG網絡的基礎上進行改進,結合了VGG網絡和ResNet網絡的思路,主要的創新點包括:(1)在VGG網絡的Block塊中加入了Identity和殘差分支,相當于把ResNet網絡中的精華應用 到VGG網絡中;(2)模型推理階段,通過Op融合策略將所有的網絡層都轉換為Conv3*3,便于模型的部署與加速。(3)這是一個通用的提升性能的Tricks,可以利用該Backbone來替換不同任務中的基準Backbone,算法性能會得到一定程度的提升。
??盡管RepVGG網絡具有以上的優勢,但是該網絡中也存在一些問題,具體的問題包括:(1)從訓練階段轉推理階段之前,需要執行模型重參數化操作;(2)在模型重參數化過程中會增加一些額外的計算量;(3)由于每個殘差塊中引入了多個殘差分支,網絡的參數量也增加了一些。
參考資料
[1] 原始論文
注意事項
[1] 該博客是本人原創博客,如果您對該博客感興趣,想要轉載該博客,請與我聯系(qq郵箱:1575262785@qq.com),我會在第一時間回復大家,謝謝大家的關注。
[2] 由于個人能力有限,該博客可能存在很多的問題,希望大家能夠提出改進意見。
[3] 如果您在閱讀本博客時遇到不理解的地方,希望您可以聯系我,我會及時的回復您,和您交流想法和意見,謝謝。
[4] 本人業余時間承接各種本科畢設設計和各種項目,包括圖像處理(數據挖掘、機器學習、深度學習等)、matlab仿真、python算法及仿真等,有需要的請加QQ:1575262785詳聊,備注“項目”!!!
總結
以上是生活随笔為你收集整理的RepVGG算法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL EXITS用法(如何自学SQL)
- 下一篇: SoftPool算法详解