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 卷积核的,可以利用卷积的可加性,将卷积融合,具体来说是卷积核矩阵对应相加,偏置值对应相加