【CVPR2021】RepVGG:重参数化——让VGG再次强大

这里的VGG指代各种平铺卷积的CNN,不带resnet那种shortcut。难得在这么浮躁的时代还有人在钻研改进VGG-style的CNN。VGG作为经典CNN的代表,事实上到如今都没有被淘汰,依然活跃在各种工程中。

国际惯例,先放出原文:RepVGG: Making VGG-style ConvNets Great Again

链接:https://arxiv.org/abs/2101.03697

论文第一作者丁霄汉在知乎的解析:https://zhuanlan.zhihu.com/p/344324470 (推荐戳)

本文主要是把小丁的解析再用更简单明白的语言描述一下,并加入一些自己的评论


其实2张图就足以说明这篇文章的主要创新点,第一张:

【CVPR2021】RepVGG:重参数化——让VGG再次强大_第1张图片

用一句话描述就是:像ResNet那么训练,像VGG那样推理。这么做有一定的优势,首先Resnet在推理的过程中需要更大的显存占用(需要把"+"之前的两组feature maps都存下来),理论上会比不带shortcut的网络如VGG多用一倍的显存。作为CVPR的best paper成果,Resnet的优越性想必不用多言,通过简单的shortcut可以实现“梯度搬运”,使得浅层和深层有同样的训练效果。所以,Resnet的主要优势体现在训练,能够让超多层网络学习也能学习得很好。而本论文最大的特点优势就是:吸取ResNet在训练时的优势,而规避其在推理时的缺点

那怎么实现的呢?那就用到一个叫Re-parameterization(重参数化)的trick,咱们看另一张图:

【CVPR2021】RepVGG:重参数化——让VGG再次强大_第2张图片

上图表示的就是,在计算上,把带shortcut的网络结构等效到不带shortcut的3x3卷积。具体做法是在参数层面做等效,经过2次变换即可。我们先看上图右边,作者假设输入输出通道数都是2,那3x3卷积核所对应的参数矩阵应该是2x2x3x3,1x1卷积核对应的参数矩阵应该是2x2x1x1,直接shortcut的分支是没有参数的。接着,每个分支都需要计算一次BN。BN还不了解的同学请戳我的另一篇文章《BN》。

我们知道,BN在inference阶段时,\gamma\beta都相当于常数。而均值\mu和方差\sigma的计算都可以转化成卷积核的计算。这里你不懂?我举个栗子,你要计算均值只需把3x3的卷积每个对应的值设置为1/9,卷积出来的结果是不是均值了?当然我这是简化。具体算均值的时候还要考虑channel等。

如此一来,组合1:3x3卷积核+BN,组合2:1x1卷积核+BN,组合3:BN。这三种组合在推理计算上都可以等效转化成“3x3卷积核+偏置”的形式。我们都知道卷积也是一种线性运算如乘法一样,咱们把三组同规格的卷积核合并成一组卷积核的操作是很简单的。

上面的表述有不清楚的地方,欢迎留言讨论


总结

在我看来,RepVGG有以下优势:

1. 把推理时候的网络结构简化成3x3卷积核和Relu的组合。这对硬件实现是非常友好的,做过ASIC设计的我对此是大赞的。如果有FPGA实现这个网络,只需做3X3卷积这一个IP单元,Relu在硬件里非常容易实现。

2. 原文里说GPU对3x3卷积的支持比1x1和5x5卷积都要更好,这可能需要考虑具体场景吧。唯一可以确定的是,结构单一化对计算的影响是正向的。

 

你可能感兴趣的:(paper,CNN,CVPR,ICCV,VGG,resnet)