日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RepVGG算法详解

發(fā)布時間:2023/12/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RepVGG算法详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

RepVGG: Making VGG-style ConvNets Great Again-論文鏈接-代碼鏈接

目錄

    • 1、需求解讀
    • 2、RepVGG算法簡介
    • 3、RepVGG網(wǎng)絡(luò)架構(gòu)詳解
      • 3.1 推理階段Op融合細(xì)節(jié)詳解
      • 3.2 不同配置版本的ResVGG網(wǎng)絡(luò)
    • 4、RepVGG算法實現(xiàn)步驟
    • 5、RepVGG算法效果展示與分析
    • 6、總結(jié)與分析
    • 參考資料
    • 注意事項

1、需求解讀

??通過總結(jié),你可能會發(fā)現(xiàn)計算機(jī)視覺中的多種不同任務(wù)的網(wǎng)絡(luò)架構(gòu)大致都可以分為3個通用的模塊,具體包括:通用Backbone網(wǎng)絡(luò)、任務(wù)特定網(wǎng)絡(luò)和任務(wù)頭網(wǎng)絡(luò),其中通用Backbone網(wǎng)絡(luò)用來提取一些低級的通用特征,具體包括顏色、形狀和紋理等;任務(wù)特定網(wǎng)絡(luò)用來對這些通用的特征進(jìn)行進(jìn)一步的加工,將這些特征變換成該任務(wù)需要的特征;任務(wù)頭網(wǎng)路根據(jù)不同的任務(wù)來輸出不同形式的結(jié)果,例如分類算法輸出類別概率,檢測任務(wù)輸出類別和檢測框等。總而言之,分類網(wǎng)絡(luò)中的Backbone網(wǎng)絡(luò)是很多高級任務(wù)的基準(zhǔn)網(wǎng)絡(luò),它的性能在很大程度上決定了該網(wǎng)絡(luò)的部分上限。
??在常見的計算機(jī)視覺任務(wù)中,我們經(jīng)常會看到ResNet和MobileNet兩個網(wǎng)絡(luò)的身影,大量的實驗結(jié)果表明:ResNet網(wǎng)絡(luò)能夠提取到魯邦的特征表示,用戶可以根據(jù)自己的需要靈活的選擇ResNet18、ResNet34和ResNet50等網(wǎng)路架構(gòu);MobileNet適合應(yīng)用在一些低算力的嵌入式設(shè)備中,可以在速度和精度之中達(dá)到很好的均衡。但是我們很好看到過VGG網(wǎng)絡(luò)的身影,這幾年越來越少!!!主要的原因包含2點:(1)VGG網(wǎng)絡(luò)的模型更大,不便于模型部署;(2)與ResNet網(wǎng)絡(luò)相比,VGG網(wǎng)絡(luò)的性能會有些遜色。
??RepVGG,這個網(wǎng)絡(luò)就是在VGG的基礎(chǔ)上面進(jìn)行改進(jìn),主要的思路包括:(1)在VGG網(wǎng)絡(luò)的Block塊中加入了Identity和殘差分支,相當(dāng)于把ResNet網(wǎng)絡(luò)中的精華應(yīng)用 到VGG網(wǎng)絡(luò)中;(2)模型推理階段,通過Op融合策略將所有的網(wǎng)絡(luò)層都轉(zhuǎn)換為Conv3*3,便于網(wǎng)絡(luò)的部署和加速。 如果你做過模型的部署,你可能會比較清楚,當(dāng)前很多的模型推理框架中都對Conv3*3卷積做了一些特定的加速操作,如果我們可以將所有卷積層轉(zhuǎn)換成Conv3*3,整個網(wǎng)絡(luò)在推理階段還是能獲得較大的速度提升!!!

2、RepVGG算法簡介

??RepVGG是一個分類網(wǎng)路,該網(wǎng)絡(luò)是在VGG網(wǎng)絡(luò)的基礎(chǔ)上進(jìn)行改進(jìn),主要的改進(jìn)點包括:(1)在VGG網(wǎng)絡(luò)的Block塊中加入了Identity和殘差分支,相當(dāng)于把ResNet網(wǎng)絡(luò)中的精華應(yīng)用 到VGG網(wǎng)絡(luò)中;(2)模型推理階段,通過Op融合策略將所有的網(wǎng)絡(luò)層都轉(zhuǎn)換為Conv3*3,便于模型的部署與加速。 該論文中的包含的亮點包括:(1)網(wǎng)絡(luò)訓(xùn)練和網(wǎng)絡(luò)推理階段使用不同的網(wǎng)絡(luò)架構(gòu),訓(xùn)練階段更關(guān)注精度,推理階段更關(guān)注速度,這個思路很值得體會,是一種提升模型部署速度的方案!!!

3、RepVGG網(wǎng)絡(luò)架構(gòu)詳解


??上圖展示了部分RepVGG網(wǎng)絡(luò),圖A表示的是原始的ResNet網(wǎng)絡(luò),該網(wǎng)絡(luò)中包含著Conv1*1的殘差結(jié)構(gòu)和Identity的殘差結(jié)構(gòu),正是這些殘差結(jié)構(gòu)的存在解決了深層網(wǎng)路中的梯度消失問題,使得網(wǎng)絡(luò)更加易于收斂。圖B表示的是訓(xùn)練階段的RepVGG網(wǎng)絡(luò)架構(gòu),整個網(wǎng)絡(luò)的主體結(jié)構(gòu)和ResNet網(wǎng)絡(luò)類似,兩個網(wǎng)絡(luò)中都包含殘差結(jié)構(gòu)。兩個網(wǎng)絡(luò)中的主要差異如下所述:(1)RepVGG網(wǎng)絡(luò)中的殘差塊并沒有跨層,如圖中的綠框所示;(2)整個網(wǎng)絡(luò)包含2種殘差結(jié)構(gòu),如圖中的綠框和紅框所示,綠框中的殘差結(jié)構(gòu)僅僅包含Conv1*1殘差分支;紅框中不僅包含Conv1*1的殘差結(jié)構(gòu),而且包含Identity殘差結(jié)構(gòu)。由于殘差結(jié)構(gòu)具有多個分支,就相當(dāng)于給網(wǎng)絡(luò)增加了多條梯度流動的路徑,訓(xùn)練一個這樣的網(wǎng)絡(luò),其實類似于訓(xùn)練了多個網(wǎng)絡(luò),并將多個網(wǎng)絡(luò)融合在一個網(wǎng)絡(luò)中,類似于模型集成的思路,不過這種思路更加簡單和高效!!!(3)模型的初始階段使用了簡單的殘差結(jié)構(gòu),隨著模型的加深,使用了復(fù)雜的殘差結(jié)構(gòu),這樣不僅僅能夠在網(wǎng)絡(luò)的深層獲得更魯邦的特征表示,而且可以更好的處理網(wǎng)絡(luò)深層的梯度消失問題。圖C表示的是推理階段的RepVGG網(wǎng)絡(luò),該網(wǎng)絡(luò)的結(jié)構(gòu)非常簡單,整個網(wǎng)絡(luò)均是由Conv3*3+Relu堆疊而成,易于模型的推理和加速。
??這種架構(gòu)的主要優(yōu)勢包括:(1)當(dāng)前大多數(shù)推理引擎都對Conv3*3做了特定的加速,假如整個網(wǎng)絡(luò)中的每一個Conv3*3都能節(jié)省3ms,如果一個網(wǎng)絡(luò)中包含30個卷積層,那么整個網(wǎng)絡(luò)就可以節(jié)省3*30=90ms的時間,這還是初略的估算。(2)當(dāng)推理階段使用的網(wǎng)絡(luò)層類別比較少時,我們愿意花費一些時間來完成這些模塊的加速,因為這個工作的通用性很強(qiáng),不失為一種較好的模型加速方案。(3)對于殘差節(jié)點而言,需要當(dāng)所有的殘差分支都計算出對應(yīng)的結(jié)果之后,才能獲得最終的結(jié)果,這些殘差分支的中間結(jié)果都會保存在設(shè)備的內(nèi)存中,這樣會對推理設(shè)備的內(nèi)存具有較大的要求,來回的內(nèi)存操作會降低整個網(wǎng)絡(luò)的推理速度。而推理階段首先在線下將模型轉(zhuǎn)換為單分支結(jié)構(gòu),在設(shè)備推理階段就能更好的提升設(shè)備的內(nèi)存利用率,從而提升模型的推理速度,更直觀的理解請看下圖。總而言之,模型推理階段的網(wǎng)絡(luò)結(jié)構(gòu)越簡單越能起到模型加速的效果。

3.1 推理階段Op融合細(xì)節(jié)詳解


??上圖展示了模型推理階段的重參數(shù)化過程,其實就是一個OP融合和OP替換的過程。圖A從結(jié)構(gòu)化的角度展示了整個重參數(shù)化流程, 圖B從模型參數(shù)的角度展示了整個重參數(shù)化流程。整個重參數(shù)化步驟如下所示:

  • 步驟1-首先通過式3將殘差塊中的卷積層和BN層進(jìn)行融合,該操作在很多深度學(xué)習(xí)框架的推理階段都會執(zhí)行。圖中的灰色框中執(zhí)行Conv3*3+BN層的融合,圖中的黑色矩形框中執(zhí)行Conv1*1+BN層的融合,圖中的黃色矩形框中執(zhí)行Conv3*3(卷積核設(shè)置為全1)+BN層的融合。其中Wi表示轉(zhuǎn)換前的卷積層參數(shù),μi\mu_{i}μi?表示BN層的均值,σi\sigma_{i}σi?表示BN層的方差,γi\gamma_{i}γi?βi\beta_{i}βi?分別表示BN層的尺度因子和偏移因子,W’和b’分別表示融合之后的卷積的權(quán)重和偏置。
  • 步驟2-將融合后的卷積層轉(zhuǎn)換為Conv3*3,即將具體不同卷積核的卷積均轉(zhuǎn)換為具有3*3大小的卷積核的卷積。由于整個殘差塊中可能包含Conv1*1分支和Identity兩種分支,如圖中的黑框和黃框所示。對于Conv1*1分支而言,整個轉(zhuǎn)換過程就是利用3*3的卷積核替換1*1的卷積核,具體的細(xì)節(jié)如圖中的紫框所示,即將1*1卷積核中的數(shù)值移動到3*3卷積核的中心點即可;對于Identity分支而言,該分支并沒有改變輸入的特征映射的數(shù)值,那么我們可以設(shè)置一個3*3的卷積核,將所有的9個位置處的權(quán)重值都設(shè)置為1,那么它與輸入的特征映射相乘之后,保持了原來的數(shù)值,具體的細(xì)節(jié)如圖中的褐色框所示。
  • 步驟3-合并殘差分支中的Conv3*3。即將所有分支的權(quán)重W和偏置B疊加起來,從而獲得一個融合之后的Conv3*3網(wǎng)絡(luò)層。

3.2 不同配置版本的ResVGG網(wǎng)絡(luò)


??對于基準(zhǔn)分類網(wǎng)絡(luò)而言,一般都會包含多個具有不同配置的網(wǎng)絡(luò)架構(gòu),具有代表性的就是MobileNet和ShuffleNet網(wǎng)絡(luò),小模型可以進(jìn)行輕量化部署,適合應(yīng)用于一個算力較弱的嵌入式設(shè)備中,如rk3399、rk3288和Rapi3等;大模型用來進(jìn)行服務(wù)端部署,適合應(yīng)用到帶有顯卡的服務(wù)器上面,如GTX1080Ti、GTX2080Ti等,由于該設(shè)備的算力比較充足,即使是利用大模型也能獲得實時的運行速度。
??RepVGG也提供兩大類型的網(wǎng)絡(luò)配置,具體的細(xì)節(jié)如上表所示,RepVGG-A表示的是一種比較輕量型的網(wǎng)絡(luò),整個網(wǎng)絡(luò)的層數(shù)會少一些,當(dāng)前分類性能也會差一些;RepVGG-B表示的是一種高精度類型的網(wǎng)絡(luò),整個網(wǎng)路會更深一些,分類精度更高一些,適用于服務(wù)端部署。整個RepVGG網(wǎng)絡(luò)包含5個Stage,Stage1僅僅包含一個殘差塊,輸出的特征映射大小為112*112,殘差塊的通道個數(shù)取min(64,64a);Stage2包含2個殘差塊,輸出的特征映射大小為56*56,殘差塊的通道個數(shù)為64a個;Stage3包含4個殘差塊,輸出的特征映射大小為28*28,殘差塊的通道個數(shù)為128a個;Stage4包含14個殘差塊,輸出的特征映射大小為14*14,殘差塊的通道個數(shù)為256a個;Stage5包含1個殘差塊,輸出的特征映射大小為7*7,殘差塊的通道個數(shù)為512b個。整個網(wǎng)絡(luò)通過參數(shù)a和參數(shù)b來形成不同版本的變種,具體的變種如下表所示,參數(shù)a和參數(shù)b用來控制殘差塊的通道個數(shù),參數(shù)a用來控制stage1-stage4階段的通道個數(shù),參數(shù)b用來控制stage5階段的通道個數(shù),一般情況下a < b,主要的原因是Stage5中需要具有更多的通道個數(shù),從而獲得一些更魯邦的特征表示,有利于后續(xù)的頭網(wǎng)絡(luò)輸出更準(zhǔn)確的預(yù)測結(jié)果。

4、RepVGG算法實現(xiàn)步驟

步驟1-獲取并劃分訓(xùn)練數(shù)據(jù)集,并對訓(xùn)練集執(zhí)行數(shù)據(jù)增強(qiáng)操作;
步驟2-搭建RepVGG訓(xùn)練網(wǎng)絡(luò),訓(xùn)練分類網(wǎng)絡(luò),直到網(wǎng)絡(luò)收斂為止;
步驟3-加載訓(xùn)練好的網(wǎng)絡(luò),對該網(wǎng)絡(luò)執(zhí)行重參數(shù)化操作,具體的細(xì)節(jié)如上節(jié)所述;
步驟4-加載重參數(shù)化后的模型,執(zhí)行模型推理。

5、RepVGG算法效果展示與分析


??上圖展示了ResVGG網(wǎng)絡(luò)與ResNet網(wǎng)絡(luò)在相同測試數(shù)據(jù)集上面的性能指標(biāo)。評估的性能指標(biāo)包括Top-1準(zhǔn)確率、模型推理速度、模型參數(shù)量、FLOPS和Wino卷積的MUL個數(shù)。通過觀察我們可以得出以下的初步結(jié)論:(1)相同測試條件下,最小的模型RepVGG-A0與ResNet-18相比,各項指標(biāo)都有顯著的提升,RepVGG-A0網(wǎng)絡(luò)不僅具有更少的參數(shù)量,更快的推理速度,而且獲得了更高的分類精度;(2)與EfficientNet-B0相比,RepVGG-B1g4不僅具有更快的執(zhí)行速度,而且獲得了更高的分類精度,當(dāng)然該模型也更大一些。(3)與VGG-16網(wǎng)絡(luò)相比,RepVGG-B2在各個指標(biāo)上面都有一定的性能提升。


??為了進(jìn)一步驗證RepVGG網(wǎng)絡(luò)的通用性,作者驗證了該Backbone在語義分割任務(wù)上面的性能,并和基準(zhǔn)Backbon ResNet50和ResNet101進(jìn)行了性能比較,具體的評估指標(biāo)包括Mean IoU、Mean pixel acc和Speed。通過觀察我們可以得出以下初步的結(jié)論:(1)與ResNet-50網(wǎng)絡(luò)相比,RepVGG-B1g2-fast網(wǎng)絡(luò)不僅獲得較高的精度,而且在速度上也有一些優(yōu)勢;(2)與ResNet-101網(wǎng)絡(luò)相比,RepVGG-B2-fast網(wǎng)絡(luò)不均獲得了較高的速度,各項指標(biāo)上也都有所提升。

6、總結(jié)與分析

??RepVGG是一個分類網(wǎng)路,該網(wǎng)絡(luò)是在VGG網(wǎng)絡(luò)的基礎(chǔ)上進(jìn)行改進(jìn),結(jié)合了VGG網(wǎng)絡(luò)和ResNet網(wǎng)絡(luò)的思路,主要的創(chuàng)新點包括:(1)在VGG網(wǎng)絡(luò)的Block塊中加入了Identity和殘差分支,相當(dāng)于把ResNet網(wǎng)絡(luò)中的精華應(yīng)用 到VGG網(wǎng)絡(luò)中;(2)模型推理階段,通過Op融合策略將所有的網(wǎng)絡(luò)層都轉(zhuǎn)換為Conv3*3,便于模型的部署與加速。(3)這是一個通用的提升性能的Tricks,可以利用該Backbone來替換不同任務(wù)中的基準(zhǔn)Backbone,算法性能會得到一定程度的提升。
??盡管RepVGG網(wǎng)絡(luò)具有以上的優(yōu)勢,但是該網(wǎng)絡(luò)中也存在一些問題,具體的問題包括:(1)從訓(xùn)練階段轉(zhuǎn)推理階段之前,需要執(zhí)行模型重參數(shù)化操作;(2)在模型重參數(shù)化過程中會增加一些額外的計算量;(3)由于每個殘差塊中引入了多個殘差分支,網(wǎng)絡(luò)的參數(shù)量也增加了一些。

參考資料

[1] 原始論文

注意事項

[1] 該博客是本人原創(chuàng)博客,如果您對該博客感興趣,想要轉(zhuǎn)載該博客,請與我聯(lián)系(qq郵箱:1575262785@qq.com),我會在第一時間回復(fù)大家,謝謝大家的關(guān)注。
[2] 由于個人能力有限,該博客可能存在很多的問題,希望大家能夠提出改進(jìn)意見。
[3] 如果您在閱讀本博客時遇到不理解的地方,希望您可以聯(lián)系我,我會及時的回復(fù)您,和您交流想法和意見,謝謝。
[4] 本人業(yè)余時間承接各種本科畢設(shè)設(shè)計和各種項目,包括圖像處理(數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)、深度學(xué)習(xí)等)、matlab仿真、python算法及仿真等,有需要的請加QQ:1575262785詳聊,備注“項目”!!!

總結(jié)

以上是生活随笔為你收集整理的RepVGG算法详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。