新聞中心

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

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

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

寫在前面

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

本文引用地址:http://2s4d.com/article/202404/458056.htm

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

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

為什么要這樣做呢?因為在訓練過程中往往多分支的結構會得到更高的性能收益,即在訓練時采用多分支結構來提升網絡性能,在推理時,將多分支結構轉化為單路結構,這樣會使推理速度大大加快!

RepVGG結構

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


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


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

多路模型轉單路模型

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


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


1、卷積層和BN層的合并


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


2、1x1卷積轉換為3x3卷積

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

3、殘差模塊轉換為3x3卷積

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


卷積的可加性原理

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



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

實驗結果

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



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




評論


相關推薦

技術專區(qū)

關閉