![image-20210304185411566](https://i-blog.csdnimg.cn/blog_migrate/8663a67d41b5c16aa94c25d4cba104fe.png)
paper:https://arxiv.org/abs/2101.0369
code:
文章目录
1. Motivation
如今更复杂的卷积网络可以取得更大的精度,但是相对于简单的卷积网络来说,也有2种缺点,首先是多分支结构中复杂的设定,以及复杂卷积网络的计算资源的开销。
同时,其他simple ConvNets的性能并不能比得过complicated ConvNets。
2. Contribution
本文的贡献如下:
-
本文提出了RepVGG,一种简单,实现速度与精度平衡的SOTA 网络结构。
-
本文提出了structural re-parameterization 结构化重参数来解耦训练多分支拓扑以及测试单分支plain结构。
-
本文显示了VGG在图像分类以及语义分割上的实用性,高效并且利于实现。
RepVGG有以下优点:
- RepVGG模型是一种VGG-like 结构,没有许多分支,每一层的输入就是上一层的输出。
- RepVGG模型的body部分只包含了3x3卷积以及ReLU。
- RepVGG模型具体的结构没有automatic search,manual refinement人为加工,compound scaling 混合比例等设定。
3. Building RepVGG via Structural Re-param
3.1 Simple is Fast, Memory-economical, Flexible
使用simple ConvNets的原因在于快速,省内存以及灵活。
- Fast
![image-20210304204249099](https://i-blog.csdnimg.cn/blog_migrate/763771c172b634f04711e6ed8682b851.png)
- Memory-economical
![image-20210304205452203](https://i-blog.csdnimg.cn/blog_migrate/582c59c00deb63fda845616c9e595188.png)
-
Flexible
多分支的拓扑结构暴露了网络结构上的局限性,例如输出的shape,res-block的最后一个卷积必须保持相同的shape,否则就无法实现short-cut;以及限制了channel purning通道剪枝的应用。
3.2 Traing-time Multi-branch Architecture
作者收到ResNet启发,并且通过相关的研究发现,ResNet之所以性能比VGG好的原因,ResNet的分支结构shortcut,可以使得模型具有一种大量子模型的隐式ensemble。确切来说,假如模型有n个blocks,模型可以被表示为 2 n 2^n 2n的ensemble模型(根据作者的解释,每遇到一次分支,总的路径救护变成2倍),单路架构显然不具备这种特点。
![image-20210304212256348](https://i-blog.csdnimg.cn/blog_migrate/405746a251a64679aeaf287f66b0fddc.png)
由于多分支拓扑在inference过程存在缺点,但又利于训练,因此作者构建了一种只使用多分支结构用于training-time的模型。这样就可以同时利用多分支模型训练时的优势(性能高)和单路模型推理时的好处(速度快、省内存),如图2所示。这里的关键显然在于这种多分支模型的构造形式和转换的方式(3.3小节叙述)。ResNet中的Res-Block的计算公式为:
y = x + f ( x ) i f ( x . s i z e ( ) ≠ f ( x ) . s i z e ( ) ) : y = g ( x ) + f ( x ) y= x +f(x)\\ if ( x.size() \not= f(x).size()):\\ y = g(x) + f(x) y=x+f(x)if(x.size()=f(x).size()):y=g(x)+f(x)
受到ResNet的启发,RepVGG设计为三分支的结构,本文的实现方式为:在训练时,为每一个3x3卷积层添加平行的1x1卷积分支和恒等映射分支,构成一个RepVGG Block。这种设计是借鉴ResNet的做法,区别在于ResNet是每隔两层或三层加一分支,而RepVGG是每层都加。公式如下:
y = x + g ( x