backbone核心详解系列——RepVGG

主要贡献

    设计了重参数化的模块,将训练和推理解耦,并且设计了两个系列的整体网络结构和相应的缩放方法,可以适应不同的精度性能需求,结果显示在GPU上推理速度高于renset系列。
    PS:这个网络主要考虑的是提升GPU(不是移动端)的计算密度(计算量除以计算时间),追求高速度、省内存,较少关注参数量和理论计算量。在低算力设备上,可能不如 MobileNet 和 ShuffleNet 系列适用。主要借鉴了ACNet、VGG和resnet的思想。
   

核心模块

    做的核心操作就是在VGG的基础上,在训练时加入旁路如1*1卷积以及shotcut层,在推理的时候将常规的3*3卷积和1*1卷积以及shotcut层的操作进行合并,但是和ResNet的不同就变成了,除了shotcut层中间层不再使用除3*3以外的任何卷积,且shotcut融合的时候也不是使用的concat操作而是使用的对应位置相加的方式。对比resnet如下图:
backbone核心详解系列——RepVGG_第1张图片
    我们需要理解的两个关键点就是:1)为什么训练的时候要加旁路;2)推理时如何合并的旁路。

    训练为何要加旁路

    不加旁路的lain式架构模型(如VGG)由于梯度爆炸和消失等原因导致无法做的很深,精召性能也比较差。而带旁路(典型shotcout分支)的模型(典型resnet)一定程度上解决了梯度问题,精召性能也更高。有研究表示 ResNet 的分支结构(shortcut)产生了一个大量子模型的隐式 ensemble(因为每遇到一次分支,总的路径就变成两倍),单路直连架构显然不具备这种特点。因此repvgg在训练时也保持了1*1卷积核identity分支(恒等映射,但是论文对比几种机制后增加了BN层,并且该分支只能出现在前后层维度一样的两层间)。

    推理如何合并旁路

    具体的原理如下图(重点看如何合并卷积层以及如何合并的BN层),输入和输出层宽度(特征图channel数)均为2,因此其实是有4个3*3卷积参数矩阵和1*1卷积参数矩阵。 注意三个分支都有BN(batch normalization)层,其参数包括累积得到的均值及标准差和学得的缩放因子及bias。这并不会妨碍转换的可行性,因为推理时的卷积层和其后的BN层可以等价转换为一个带bias的卷积层(也就是通常所谓的“吸BN”)。 如果能很快看懂该图,那么基本就已经理解了合并原理。
     backbone核心详解系列——RepVGG_第2张图片
    如果看完有点懵,这里面主要涉及三点:1)对卷积的理解。2)对BN原理和实现的理解。3)简单的数学乘法结合率。

    卷积理解

    计算我们这里不再讨论(就是简单的乘法和加法),主要是要理解一个卷积的定义,其实是个4维矩阵(对应上面的图,其实1*1卷积论文中将黄色色四个块也用空白分成4个1*1 更直观,然后我们假设竖向分割,左边2个3*3、1*1和identify对应输出第一个特征图,右边两个对应第二个特征图。这样就很好理解3*3、1*1和identify是如何通过扩充0转变为3组3*3进而通过对应点加转换为1组3*3了)。比如pytorch定义卷积
     backbone核心详解系列——RepVGG_第3张图片

    BN理解

    首先BN存在的意义是尽可能将每一层拉回0点附近(深度学习模型的独立同分布假设),使得梯度跟敏感,可是使用更大的学习率训练模型。然后BN相关其实有四个变量u、v、γ、β,训练时u、v分别是针对一个输出特征图统计的均值和方差(一个batch或者通过动量统计多个batch)是不断变化的,γ、β是两个可学习参数,目的是二次将归一化的特征值一定程度拉回高效的学习区间(自己理解);然后重点来了,推理时u、v、γ、β其实大多数网络都已经是定值(u、v是通过统计训练样本的均值和方差来定的,因为一般推理场景的batch都比较小,会不抖动大)。所以可以一个特征图合并为一个偏置量(结合后面的数学推理来看就明了了)
     backbone核心详解系列——RepVGG_第4张图片

    简单的数学乘法结合率

    主要在论文中的3.3. Re-param for Plain Inference-time Model介绍。
     backbone核心详解系列——RepVGG_第5张图片

整体网络结构

主要是通过两个模板模型+缩放系数设计了一系列模型,由于是plain结构,所以这里不再赘述。
backbone核心详解系列——RepVGG_第6张图片
backbone核心详解系列——RepVGG_第7张图片

结果

对于分类而言(分割见论文)
backbone核心详解系列——RepVGG_第8张图片
参考链接:
1、 CVPR 2021 | RepVGG:极简架构,SOTA性能,让VGG式模型再次伟大! - 知乎
2、论文翻译  【CV】RepVGG:通过结构重参数化实现训练和推理解耦的类 VGG 架构_datamonday的博客-CSDN博客
3、BN 层理解  Pytorch-BN层详细解读_Nicetomeetu-的博客-CSDN博客_bn层 pytorch
4、BN 层理解2  深度学习推理时融合BN,轻松获得约5%的提速
5、 RepVGG 论文详解 - 知乎
6、 图解RepVGG - 知乎

你可能感兴趣的:(深度学习算法,深度学习,神经网络,人工智能)