<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          RepVGG:極簡架構和SOTA性能,讓VGG式模型再次偉大!

          共 3486字,需瀏覽 7分鐘

           ·

          2021-01-16 19:42

          作者:丁霄漢
          轉自:AI科技評論
          2020年B站年度彈幕是“爺青回”。一定有很多瞬間,讓你感覺“爺?shù)那啻夯貋砹恕薄?/span>在這個卷積網(wǎng)絡各種超參精確到小數(shù)點后三位的時代,你是否還記得五六年前的田園時代,堆幾個卷積層就能漲點的快樂?
          我們最近的工作RepVGG,用結構重參數(shù)化(structural re-parameterization)實現(xiàn)VGG式單路極簡架構,一路3x3卷到底,在速度和性能上達到SOTA水平,在ImageNet上超過80%正確率。
          不用NAS,不用attention,不用各種新穎的激活函數(shù),甚至不用分支結構,只用3x3卷積和ReLU,也能達到SOTA性能?
          論文:https://arxiv.org/abs/2101.03697
          開源預訓練模型和代碼(PyTorch版):
          https://github.com/DingXiaoH/RepVGG
          放出兩天已有300 star,模型已被下載數(shù)百次,據(jù)同行反饋在真實業(yè)務上效果很好。
          (MegEngine版):
          https://github.com/megvii-model/RepVGG

          太長不看版

          方法有多簡單呢?下午5點看完文章,晚飯前就能寫完代碼開始訓練,第二天就能看到結果。如果沒時間看完這篇文章,只要點開下面的代碼,看完前100行就可以完全搞明白。
          https://github.com/DingXiaoH/RepVGG/blob/main/repvgg.py
          下面是詳細介紹。
          1

          模型定義

          我們所說的“VGG式”指的是:
          1. 沒有任何分支結構。即通常所說的plain或feed-forward架構。
          2. 僅使用3x3卷積。
          3. 僅使用ReLU作為激活函數(shù)。
          下面用一句話介紹RepVGG模型的基本架構:將20多層3x3卷積堆起來,分成5個stage,每個stage的第一層是stride=2的降采樣,每個卷積層用ReLU作為激活函數(shù)。
          再用一句話介紹RepVGG模型的詳細結構:RepVGG-A的5個stage分別有[1, 2, 4, 14, 1]層,RepVGG-B的5個stage分別有[1, 4, 6, 16, 1]層,寬度是[64, 128, 256, 512]的若干倍。這里的倍數(shù)是隨意指定的諸如1.5,2.5這樣的“工整”的數(shù)字,沒有經(jīng)過細調。
          再用一句話介紹訓練設定:ImageNet上120 epochs,不用trick,甚至直接用PyTorch官方示例的訓練代碼就能訓出來!
          為什么要設計這種極簡模型,這么簡單的純手工設計模型又是如何在ImageNet上達到SOTA水平的呢?

          2

          為什么要用VGG模型?

          除了我們相信簡單就是美以外,VGG式極簡模型至少還有五大現(xiàn)實的優(yōu)勢(詳見論文)。
          1. 3x3卷積非???。在GPU上,3x3卷積的計算密度(理論運算量除以所用時間)可達1x1和5x5卷積的四倍
          2. 單路架構非???,因為并行度高。同樣的計算量,“大而整”的運算效率遠超“小而碎”的運算。
          3. 單路架構省內存。例如,ResNet的shortcut雖然不占計算量,卻增加了一倍的顯存占用。
          4. 單路架構靈活性更好,容易改變各層的寬度(如剪枝)。
          5. RepVGG主體部分只有一種算子:3x3卷積接ReLU。在設計專用芯片時,給定芯片尺寸或造價,我們可以集成海量的3x3卷積-ReLU計算單元來達到很高的效率。別忘了,單路架構省內存的特性也可以幫我們少做存儲單元。

          3

          結構重參數(shù)化讓VGG再次偉大

          相比于各種多分支架構(如ResNet,Inception,DenseNet,各種NAS架構),近年來VGG式模型鮮有關注,主要自然是因為性能差。例如,有研究[1]認為,ResNet性能好的一種解釋是ResNet的分支結構(shortcut)產(chǎn)生了一個大量子模型的隱式ensemble(因為每遇到一次分支,總的路徑就變成兩倍),單路架構顯然不具備這種特點。
          既然多分支架構是對訓練有益的,而我們想要部署的模型是單路架構,我們提出解耦訓練時和推理時架構。我們通常使用模型的方式是:
          1. 訓練一個模型
          2. 部署這個模型
          但在這里,我們提出一個新的做法:
          1. 訓練一個多分支模型
          2. 將多分支模型等價轉換為單路模型
          3. 部署單路模型
          這樣就可以同時利用多分支模型訓練時的優(yōu)勢(性能高)和單路模型推理時的好處(速度快、省內存)。這里的關鍵顯然在于這種多分支模型的構造形式和轉換的方式。
          我們的實現(xiàn)方式是在訓練時,為每一個3x3卷積層添加平行的1x1卷積分支和恒等映射分支,構成一個RepVGG Block。這種設計是借鑒ResNet的做法,區(qū)別在于ResNet是每隔兩層或三層加一分支,而我們是每層都加。
          訓練完成后,我們對模型做等價轉換,得到部署模型。這一轉換也非常簡單,因為1x1卷積是一個特殊(卷積核中有很多0)的3x3卷積,而恒等映射是一個特殊(以單位矩陣為卷積核)的1x1卷積!根據(jù)卷積的線性(具體來說是可加性),每個RepVGG Block的三個分支可以合并為一個3x3卷積。
          下圖描述了這一轉換過程。在這一示例中,輸入和輸出通道都是2,故3x3卷積的參數(shù)是4個3x3矩陣,1x1卷積的參數(shù)是一個2x2矩陣。注意三個分支都有BN(batch normalization)層,其參數(shù)包括累積得到的均值及標準差和學得的縮放因子及bias。這并不會妨礙轉換的可行性,因為推理時的卷積層和其后的BN層可以等價轉換為一個帶bias的卷積層(也就是通常所謂的“吸BN”)。
          對三分支分別“吸BN”之后(注意恒等映射可以看成一個“卷積層”,其參數(shù)是一個2x2單位矩陣!),將得到的1x1卷積核用0給pad成3x3。最后,三分支得到的卷積核和bias分別相加即可。這樣,每個RepVGG Block轉換前后的輸出完全相同,因而訓練好的模型可以等價轉換為只有3x3卷積的單路模型。
          從這一轉換過程中,我們看到了“結構重參數(shù)化”的實質:訓練時的結構對應一組參數(shù),推理時我們想要的結構對應另一組參數(shù);只要能把前者的參數(shù)等價轉換為后者,就可以將前者的結構等價轉換為后者。

          4

          實驗結果

          在1080Ti上測試,RepVGG模型的速度-精度相當出色。在公平的訓練設定下,同精度的RepVGG速度是ResNet-50的183%,ResNet-101的201%,EfficientNet的259%,RegNet的131%。注意,RepVGG取得超過EfficientNet和RegNet并沒有使用任何的NAS或繁重的人工迭代設計。
          這也說明,在不同的架構之間用FLOPs來衡量其真實速度是欠妥的。例如,RepVGG-B2的FLOPs是EfficientNet-B3的10倍,但1080Ti上的速度是后者的2倍,這說明前者的計算密度是后者的20余倍。
          在Cityscapes上的語義分割實驗表明,在速度更快的情況下,RepVGG模型比ResNet系列高約1%到1.7%的mIoU,或在mIoU高0.37%的情況下速度快62%。
          另外一系列ablation studies和對比實驗表明,結構重參數(shù)化是RepVGG模型性能出色的關鍵(詳見論文)。
          最后需要注明的是,RepVGG是為GPU和專用硬件設計的高效模型,追求高速度、省內存,較少關注參數(shù)量和理論計算量。在低算力設備上,可能不如MobileNet和ShuffleNet系列適用。

          參考文獻

          [1] Andreas Veit, Michael J Wilber, and Serge Belongie. Residual networks behave like ensembles of relatively shallow networks. In Advances in neural information processing systems, pages 550–558, 2016. 2, 4, 8

          往期精彩:

          ?機器學習實驗室的一點年度小結

          【原創(chuàng)首發(fā)】機器學習公式推導與代碼實現(xiàn)30講.pdf

          【原創(chuàng)首發(fā)】深度學習語義分割理論與實戰(zhàn)指南.pdf

          ?談中小企業(yè)算法崗面試

          ?算法工程師研發(fā)技能表

          ?真正想做算法的,不要害怕內卷

          ?技術學習不能眼高手低

          ?技術人要學會自我營銷

          ?做人不能過擬合

          求個在看

          瀏覽 69
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  青青草成人免费自拍视频 | 亚洲精品AV无码 | 青娱乐福利视频 | 豆花无码短视频在线观看网址 | 99无码视频 |