RepVGG:Making VGG-style ConvNets Great Again

RepVGG为了解决原始VGGNet网络模型较大、不便于部署以及性能比较差问题,训练时在VGG网络的 Block 块中加入了 Identity 和残差分支,解决性能差的问题。推理时通过“结构重参数化”将所有的网络层都转换为 Conv3x3,便于网络的部署和加速

什么是RepVGG?

  • RepVGG主要为了解决原始VGGNet 网络模型较大、不便于部署以及性能比较差问题提出的一个VGG升级版本,已被YOLOv6使用
  • 训练时在 VGG网络的 Block 块中加入了 Identity 和残差分支,解决性能差的问题。推理时通过“结构重参数化”将所有的网络层都转换为 Conv3x3,便于网络的部署和加速

RepVGG的网络结构?

  • 为VGG每一个3x3卷积层添加平行的1x1卷积分支和恒等映射分支,构成一个 RepVGG Block
  • 将20多层3x3卷积堆起来,分成5个stage,每个stage的第一 层是stride=2的降采样,每个卷积层用ReLU作为激活函数

RepVGG如何进行“结构重参数化”?

  • 1.卷积层参数:上图是 REP-VGG 块的结构重参数化过程。为了易于可视化,我们假设 C2 = C1 = 2,因此3×3层具有四个3×3矩阵,而1×1层的核为2×2矩阵
  • 2.BN 层参数:(1)由训练过程中,如何进行批规范化(Batch Normalization,BN)可知,BN 层为每个通道的数据进行规范化,每个通道需要 4 个参数 μ,σ,γ,β\:\mu,\:\sigma,\:\gamma,\:\beta,输入通道 2 个则有 8 个参数;(2) 当 μ,σ,γ,β\:\mu,\:\sigma,\:\gamma,\:\beta 均为 0 时,规范化后的数据还是原来的值,这可以用于模拟 identity 路径
  • 3.融合卷积与 BN 层:(1)最难理解的是虚线红框部分,由原来的 2×1×1×22\times 1 \times 1\times 2 变为 2×3×3×22\times 3 \times 3\times 2 ,也就是单个卷积核由 1×11\times 1 变为 3×33\times 3,这是通过在 1×11\times 1 四周补 0 做到的,因为补 0 后得到的卷积和是不变的;(2) 类似 ACNet的网络结构的过程,μ,σ,γ,β\:\mu,\:\sigma,\:\gamma,\:\beta 的部分参数用于重构卷积核的值,部分参数组合成卷积的偏置值 bb,并且每个通道 1 个值 RepVGG-20230408140750-1
  • 4.利用卷积的可加性,融合多路径:对应同 size 卷积核的,可以利用卷积的可加性,将卷积融合,具体来说是卷积核矩阵对应相加,偏置值对应相加