新聞中心

EEPW首頁 > 智能計算 > 設(shè)計應(yīng)用 > 別再用VGG了!一文帶你看透 RepVGG怎么重鑄VGG榮光

別再用VGG了!一文帶你看透 RepVGG怎么重鑄VGG榮光

作者: 時間:2024-04-25 來源:人工智能-泰羅 收藏

寫在前面

算是非常經(jīng)典的網(wǎng)絡(luò)了,它是由牛津大學(xué)計算機視覺組(Visual Geometry Group)和Google DeepMind公司的研究員一起研發(fā)的 “直筒型“ 的網(wǎng)絡(luò)。既然在看這篇文章,想必已經(jīng)對十分熟悉了。有一些特別明顯的缺陷,如網(wǎng)絡(luò)的參數(shù)量較多,模型檢測準確率也不是很好,總之VGG網(wǎng)絡(luò)效果不理想。之后的一段時間,人們總是將網(wǎng)絡(luò)變得更寬更深(如GoogleNet、ResNet),以期待達到更優(yōu)異的效果。

本文引用地址:http://m.butianyuan.cn/article/202404/458056.htm

事實上也是這樣,更深更寬的網(wǎng)絡(luò)更容易滿足需求。這樣,VGG變得鮮有問津。這時,一位大佬——丁霄漢,相信科學(xué)技術(shù)總是螺旋式的上升,撿起了VGG模型,給其注入了新思想,便橫空出世。

首先我們先來解讀一些的取名含義,Rep全稱為re- parameterization(重參數(shù)化),Rep是指首先構(gòu)造一系列結(jié)構(gòu)(一般用于訓(xùn)練),并將其參數(shù)等價轉(zhuǎn)換為另一組參數(shù)(一般用于推理),從而將這一系列結(jié)構(gòu)等價轉(zhuǎn)換為另一系列結(jié)構(gòu)。估計這段話大家讀的似懂非懂,對于來說,就是在訓(xùn)練階段會訓(xùn)練一個多分支模型,然后利用重參數(shù)化將多分支模型等價轉(zhuǎn)換為單路模型,最后在推理時使用單路模型。

為什么要這樣做呢?因為在訓(xùn)練過程中往往多分支的結(jié)構(gòu)會得到更高的性能收益,即在訓(xùn)練時采用多分支結(jié)構(gòu)來提升網(wǎng)絡(luò)性能,在推理時,將多分支結(jié)構(gòu)轉(zhuǎn)化為單路結(jié)構(gòu),這樣會使推理速度大大加快!

RepVGG結(jié)構(gòu)

聽了上文的講解,不知大家對RepVGG有了多少了解,還有很多疑惑是正常的,不要著急,下面會詳細的對RepVGG的結(jié)構(gòu)和設(shè)計進行分析RepVGG模型具有一個類似于VGG的拓撲結(jié)構(gòu),沒有任何分支,模型只采用了3x3的卷積核和Relu激活函數(shù)?!咀⒁猓哼@里的RepVGG模型指的是推理(inference)時采用的結(jié)構(gòu),訓(xùn)練(training)時結(jié)構(gòu)不是這樣的】模型的結(jié)構(gòu)如下圖所示:


從上圖我們可以看出,在RepVGG的訓(xùn)練階段,其結(jié)構(gòu)借鑒了ResNet,同時引入了殘差結(jié)構(gòu)和1x1的卷積分支,在論文中也證明了加入殘差結(jié)構(gòu)和1x1的卷積均可以提升網(wǎng)絡(luò)的性能,如下圖所示:


至于RepVGG的推理階段,其結(jié)構(gòu)就是簡單的3x3卷積同Relu函數(shù)的結(jié)合。

多路模型轉(zhuǎn)單路模型

這一部分絕對是RepVGG的核心了?。。e- parameterization(重參數(shù)化)要做的其實就是要將多路模型轉(zhuǎn)成單路模型。首先我們要搞清楚我們要轉(zhuǎn)換的對象,即多路模型指什么?單路模型指什么?這兩個模型在上文已經(jīng)提及,多路模型指的就是在訓(xùn)練階段的模型,而單路模型指的是在推理階段的模型,如下圖:


現(xiàn)在我們的目標有了,即將上圖右側(cè)模型轉(zhuǎn)換成左側(cè)。仔細觀察左右兩圖的區(qū)別,可以看出我們只需要將上圖黃框部分進行轉(zhuǎn)換就可以了。下面來看看作者是怎么進行轉(zhuǎn)換的下圖大致描述了多路模型轉(zhuǎn)換成單路模型的過程,從①到②涉及到了將3x3卷積和BN層的合并、1x1卷積轉(zhuǎn)換為3x3卷積及殘差模塊等效為特殊權(quán)重的卷積層?!咀⒁猓嚎赡苡行』锇榘l(fā)現(xiàn)上文圖中的卷積后都沒有BN層,為什么這里有了了,其實一般卷積后都會跟上BN進行歸一化,上圖只是省略了網(wǎng)絡(luò)的一些細節(jié)】


1、卷積層和BN層的合并


上圖展示了卷積層和BN層合并的推導(dǎo)過程,非常容易理解。但需要注意的是這里的卷積層含有偏置b,往往現(xiàn)在帶有BN結(jié)構(gòu)的卷積都不含偏置b了,論文中的推導(dǎo)結(jié)構(gòu)就沒帶偏置b,如下圖所示:可以看出,下式和上圖推導(dǎo)結(jié)構(gòu)是一致的【符號表示有區(qū)別,沒有偏置項b】


2、1x1卷積轉(zhuǎn)換為3x3卷積

1x1卷積怎么轉(zhuǎn)化為3x3的卷積呢?不知道大家有沒有什么想法?♂??♂??♂?我覺得這個大家應(yīng)該是很容易就可以想到的——補兩圈0!所以這部分其實是沒什么好說的,論文中也是一筆帶過。但這里我還是想提醒大家注意一下,因為我們的三路輸出最后會通過Add操作,因此在使用3x3卷積時應(yīng)該使用same形式,即保證輸入輸出的特征圖維度不變

3、殘差模塊轉(zhuǎn)換為3x3卷積

我們知道殘差模塊就是一個恒等映射,即要求輸入等于輸出。這一步該怎么實現(xiàn)呢?這里我們可以使用卷積核權(quán)重為1的1x1卷積,因為這樣的卷積核不會改變輸入特征圖的值,這樣我們就可以將殘差模塊等效為1x1的卷積操作了。之后再利用第2步將1x1的卷積轉(zhuǎn)化成3x3的卷積。


卷積的可加性原理

完成了上述三步,我們就可以實現(xiàn)從①到②的變換,即現(xiàn)在我們得到了含3路3x3卷積的結(jié)構(gòu),接下來就是要實現(xiàn)從②到③的轉(zhuǎn)化,即要將含3路3x3卷積的結(jié)構(gòu)變換成只有1路3x3卷積的結(jié)構(gòu)???這里需要利用卷積的可加性原理,即如果幾個大小兼容的二維核在相同的輸入上以相同的步幅操作以產(chǎn)生相同分辨率的輸出,并且它們的輸出被求和,我們可以將這些核在相應(yīng)的位置相加,從而得到一個產(chǎn)生相同輸出的等效核。這句話很好地總結(jié)了可加性原理,但是當(dāng)我開始看到這句話的時候也是不明白為什么,后面也是自己畫了一些圖,就恍然大悟,所以我想說很多時候我們應(yīng)該多動手,好腦子不如爛筆頭下面給出整理的圖片幫助大家理解,如下圖:



看了上圖可以發(fā)現(xiàn),不管我們是先進行卷積得到結(jié)果后再進行Add操作,還是先將卷積核的值先相加得到新的卷積核,然后再進行卷積,所得到的結(jié)果是一樣的,這就是卷積的可加性。由此可知,我們將②變?yōu)棰燮鋵嵵恍枰獙⑷齻€3x3的卷積核的值進行相加即可!

實驗結(jié)果

上面其實就把RepVGG最核心的給講完了,下面來看一下RepVGG的效果叭??梢钥闯鯮epVGG的效果還是很好的,特別的表5中RepVGG-B2的FLOPs是EfficientNet-B3的10倍,但1080Ti上的速度是后者的2倍,這說明前者的計算密度是后者的20余倍。



希望本文章對你有所幫助!感謝支持!




評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉