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 个参数 ,输入通道 2 个则有 8 个参数;(2) 当 均为 0 时,规范化后的数据还是原来的值,这可以用于模拟 identity 路径
- 3. 融合卷积与 BN 层:(1) 最难理解的是虚线红框部分,由原来的 变为 ,也就是单个卷积核由 变为 ,这是通过在 四周补 0 做到的,因为补 0 后得到的卷积和是不变的;(2) 类似 ACNet 的网络结构的过程, 的部分参数用于重构卷积核的值,部分参数组合成卷积的偏置值 ,并且每个通道 1 个值
- 4. 利用卷积的可加性,融合多路径:对应同 size 卷积核的,可以利用卷积的可加性,将卷积融合,具体来说是卷积核矩阵对应相加,偏置值对应相加