1 简介
RepVGG架构是一个简单且强大的卷积神经网络架构,该架构具有类似于VGG的推理时间主体,该主体仅由3x3卷积和ReLU的堆叠组成,而训练时间模型具有多分支拓扑。训练时间和推理时间架构的这种解耦是通过结构重新参数化(re-parameterization)技术实现的,因此该模型称为RepVGG。
在ImageNet上,RepVGG的top-1准确性达到80%以上,这是单模型首次实现超越80%的精度。在NVIDIA 1080Ti GPU上,RepVGG模型的运行速度比ResNet-50快83%,比ResNet-101快101%,具有更高的精度,并且与诸如EfficientNet和RegNet的最新模型相比,显示出良好的精度-速度折衷。
2 前人工作
2.1 Single-path到Multi-branch
自从VGG在ImageNet数据集的分类精度提高到70%以上以后,在使卷积网络变得复杂以达到高性能方面已经有了许多创新;例如GoogLeNet采用精心设计的多分支架构、ResNet提出简化两分支架构和DenseNet拓扑更复杂的连接方式。
神经结构搜索(NAS)和人工架构设计都可以生成性能更高的卷积网络,但需要耗费大量的计算资源或人力。NAS生成模型的一些大型模型甚至不能在普通GPU上训练,因此限制了应用其发展。除了实现上的不便之外,复杂的模型可能会降低并行度,从而降低推理的速度。
2.2 有效训练Single-path模型
已经有人尝试训练没有分支的卷积网络模型。然而,前人的工作主要是寻求非常深的模型的精度收敛,并没有达到比复杂模型更好的性能。因此,所建立的方法和模型既不简单也不实用。
例如,有学者提出了一种训练extremely deep plain ConvNets的初始化方法。使用mean-field-theory-based方案,10000层网络在MNIST上训练的准确率超过99%,在CIFAR-10上训练的准确率达到82%。虽然模型不实用(甚至LeNet-5在MNIST上可以达到99.3%的准确率,VGG-16在CIFAR-10上可以达到93%以上),但理论贡献是很有见地的。
最近的一项工作结合了几种技术,包括Leaky ReLU、max-norm和Careful initialization。在ImageNet上,参数为147M的普通ConvNet可以达到74.6% top-1精度。
而本文目标是建立一个简单的模型,具有合理的深度和良好的精度-速度权衡,可以简单地用最常见的组件实现(例如正则卷积和BN)。
2.3 Model Re-parameterization
DiracNet是一种与本文相关的重新参数化的方法。它通过将卷积层的核编码为来构建深平面模型,其中是用于卷积的最终权值(一个被视为矩阵的4d张量)、a和b是学习向量、是规范化的可学习kernel。与同等参数量的ResNets相比,CIFAR-100上DiracNet的top-1准确率降低了2.29%,ImageNet上降低了0.62%。
DiracNet与本文的方法的不同之处在于:
- 本文的结构重新参数化是通过一个具体的结构来实现实际数据流,然后可以转换成另一个结构,而DiracNet仅仅使用了另一个卷积核的数学表达式,以方便优化。即,一个结构上重新参数化的普通模型是一个真正的训练时间多分支模型,但DiracNet不是。
- DiracNet模型的性能高于一般参数化的plain模型,但低于ResNet模型,而RepVGG模型的性能则大大优于ResNets模型。Asym Conv块(ACB)采用不对称Conv加强常规Conv的“Backbone”,它可以被视为另一种形式的结构性re-parameterization,它训练块转换成Conv。ACB即插即用的结构,可以插入到其他的Backbone中进行使用。
2.4 Winograd卷积
RepVGG只使用了3x3的Conv,下表显示了在1080Ti GPU上用cuDNN 7.5.0测试的理论FLOPs、实际运行时间和计算密度(TFLOPS)。
结果表明,3×3的conv的理论计算密度与其他算法相比约为4倍,这表明在不同的体系结构中,理论速度并不能代表实际速度。加速3x3的conv的一个经典算法是Winograd算法(仅当stride为1时),它已经被像cuDNN和MKL这样的库很好地支持(并默认启用)。
例如,用标准的的Winograd,一个3x3的卷积的乘法(MULs)减少到原来的4/9。由于MUL计算更耗时,文中记录了计算MULs与计算Winograd的实验(如下表)。注意,具体计算库和硬件决定是否使用Winograd每个供应商的产品。因为小规模的计算变化可能不是加速由于内存开销。