RepVGG: Making VGG-style ConvNets Great Again


論文:https://arxiv.org/abs/2101.03697

代碼:https://github.com/DingXiaoH/RepVGG

RepVGG是一種新穎的CNN設計范式,它將ACNet的思想與VGG架構進行了巧妙的結合,將plain模型的精度在ImageNet上提升到了超過80%top1精度。

作者指出當前CNN的問題:Though many complicated CNN deliver higher accuracy than simple ones, the drawbacks are significant:

  • complicated multi-branch designs make the model difficult to implement and customize, slow down the inference and reduce the memory utilization.
  • Some components (depthwise and the channel shuffle) increase the memory access cost. 當前一些方法的 FLOPs 值較低,但是內存開銷大,速度並不快。

使用 simple CNN 主要有兩個原因:

  • Fast. VGG16 的 FLOPs 是 EfficientNe-B3 的8.4倍,但是速度卻快 1.8 倍,這主要是因為兩個原因:首先是 memory access cost,組卷積會引起巨大的內存開銷;然后是模型的並行度較低。
  • Memory-economical. 多分支結構並不能做到 memroy-economical,因為在結果合並前,結果每個分支的結果都要臨時保存。

作者指出,The multi-branch topology has drawbacks for inference, but the branches seem beneficial to training. 因此,提出了 RepVGG模型,具體來說:decouple the training-time multi-branch and inference-time plain architecture via structural re-parameterization . 把訓練模型轉換到測試模型,通過 transforming parameters 來實現。RepVGG的架構如下圖所示。可以看出,在訓練階段,RepVGG使用了1x1卷積和identity ,但在測試階段就沒有了。

這個論文的難點在於如何實現將訓練模型轉換成單一的 3x3 卷積用於 inference ,論文中有一個圖說明了這個過程。在這個示例中,輸入和輸出的通道都是2,因此兩個3X3的卷積參數是 2X2X3X3,可以是4個3X3的矩陣。1X1的卷積參數是一個2X2的矩陣。同時,三個分支都有BN,參數為累積得到的均值和縮放因子及bias 。推理時,BN層可以轉化為一個帶bias的卷積層。具體可以參照作者的論文。這樣,可以把1X1的卷積用0填充成 3X3,這樣,整個模型就是只有3X3的卷積的單路模型。具體可以參照作者的源代碼,可惜並沒有看得特別明白 ~~~ 汗 。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM