推广类软文,青岛网络优化公司,网站建设规划大纲,如何自己做网站发布到服务器上面RepVGG#xff1a; 极简架构#xff0c;SOTA性能#xff0c;让VGG式模型再次伟大 本文作者简介#xff1a;丁霄汉作为清华大学博士生#xff0c;导师为丁贵广副教授#xff0c;研究方向是神经网络基本模型的设计与优化。 曾在CVPR#xff0c;ICML#xff0c;ICCV#… RepVGG 极简架构SOTA性能让VGG式模型再次伟大 本文作者简介丁霄汉作为清华大学博士生导师为丁贵广副教授研究方向是神经网络基本模型的设计与优化。 曾在CVPRICMLICCVNeurIPS等国际会议作为第一作者发表论文5篇。其个人学习和研究得到百度奖学金2019资助。 2020年B站年度弹幕是“爷青回”。一定有很多瞬间让你感觉“爷的青春回来了”。在这个卷积网络各种超参精确到小数点后三位的时代你是否还记得五六年前的田园时代堆几个卷积层就能涨点的快乐 我们最近的工作RepVGG用结构重参数化structural re-parameterization实现VGG式单路极简架构一路3x3卷到底在速度和性能上达到SOTA水平在ImageNet上超过80%正确率。 不用NAS不用attention不用各种新颖的激活函数甚至不用分支结构只用3x3卷积和ReLU也能达到SOTA性能 RepVGG让VGG式模型再次伟大 清华大学、旷视科技等 丁霄汉、张祥雨、马宁宁、韩军功、丁贵广、孙剑 论文地址https://arxiv.org/abs/2101.03697 开源预训练模型和代码PyTorch版https://github.com/DingXiaoH/RepVGG。 已有700 star模型已被下载数百次据同行反馈在真实业务上效果很好。 MegEngine版https://github.com/megvii-model/RepVGG 太长不看版 方法有多简单呢下午5点看完文章晚饭前就能写完代码开始训练第二天就能看到结果。如果你没时间看完这篇文章只要点开下面的代码看完前100行就可以 完全搞明白。https://github.com/DingXiaoH/RepVGG/blob/main/repvgg.py 下面是详细介绍。 模型定义 我们所说的“VGG式”指的是 1. 没有任何分支结构。即通常所说的plain或feed-forward架构。 2. 仅使用3x3卷积。 3. 仅使用ReLU作为激活函数。 下面用一句话介绍RepVGG模型的基本架构将20多层3x3卷积堆起来分成5个stage每个stage的第一层是stride2的降采样每个卷积层用ReLU作为激活函数。 再用一句话介绍RepVGG模型的详细结构RepVGG-A的5个stage分别有[1, 2, 4, 14, 1]层RepVGG-B的5个stage分别有[1, 4, 6, 16, 1]层宽度是[64, 128, 256, 512]的若干倍。这里的倍数是随意指定的诸如1.5,2.5这样的“工整”的数字没有经过细调。 再用一句话介绍训练设定ImageNet上120 epochs不用trick甚至直接用PyTorch官方示例的训练代码就能训出来 为什么要设计这种极简模型这么简单的纯手工设计模型又是如何在ImageNet上达到SOTA水平的呢 为什么要用VGG式模型 除了我们相信简单就是美以外VGG式极简模型至少还有五大现实的优势详见论文。 1. 3x3卷积非常快。在GPU上3x3卷积的计算密度理论运算量除以所用时间可达1x1和5x5卷积的四倍。 2. 单路架构非常快因为并行度高。同样的计算量“大而整”的运算效率远超“小而碎”的运算。 3. 单路架构省内存。例如ResNet的shortcut虽然不占计算量却增加了一倍的显存占用。 4. 单路架构灵活性更好容易改变各层的宽度如剪枝。 5. RepVGG主体部分只有一种算子3x3卷积接ReLU。在设计专用芯片时给定芯片尺寸或造价我们可以集成海量的3x3卷积-ReLU计算单元来达到很高的效率。别忘了单路架构省内存的特性也可以帮我们少做存储单元。 结构重参数化让VGG Great Again 相比于各种多分支架构如ResNetInceptionDenseNet各种NAS架构近年来VGG式模型鲜有关注主要自然是因为性能差。例如有研究[1]认为ResNet性能好的一种解释是ResNet的分支结构shortcut产生了一个大量子模型的隐式ensemble因为每遇到一次分支总的路径就变成两倍单路架构显然不具备这种特点。 既然多分支架构是对训练有益的而我们想要部署的模型是单路架构我们提出解耦训练时和推理时架构。我们通常使用模型的方式是 1. 训练一个模型 2. 部署这个模型 但在这里我们提出一个新的做法 1. 训练一个多分支模型 2. 将多分支模型等价转换为单路模型 3. 部署单路模型 这样就可以同时利用多分支模型训练时的优势性能高和单路模型推理时的好处速度快、省内存。这里的关键显然在于这种多分支模型的构造形式和转换的方式。 我们的实现方式是在训练时为每一个3x3卷积层添加平行的1x1卷积分支和恒等映射分支构成一个RepVGG Block。这种设计是借鉴ResNet的做法区别在于ResNet是每隔两层或三层加一分支而我们是每层都加。 训练完成后我们对模型做等价转换得到部署模型。这一转换也非常简单因为1x1卷积是一个特殊卷积核中有很多0的3x3卷积而恒等映射是一个特殊以单位矩阵为卷积核的1x1卷积根据卷积的线性具体来说是可加性每个RepVGG Block的三个分支可以合并为一个3x3卷积。 下图描述了这一转换过程。在这一示例中输入和输出通道都是2故3x3卷积的参数是4个3x3矩阵1x1卷积的参数是一个2x2矩阵。注意三个分支都有BNbatch normalization层其参数包括累积得到的均值及标准差和学得的缩放因子及bias。这并不会妨碍转换的可行性因为推理时的卷积层和其后的BN层可以等价转换为一个带bias的卷积层也就是通常所谓的“吸BN”。 对三分支分别“吸BN”之后注意恒等映射可以看成一个“卷积层”其参数是一个2x2单位矩阵将得到的1x1卷积核用0给pad成3x3。最后三分支得到的卷积核和bias分别相加即可。这样每个RepVGG Block转换前后的输出完全相同因而训练好的模型可以等价转换为只有3x3卷积的单路模型。 从这一转换过程中我们看到了“结构重参数化”的实质训练时的结构对应一组参数推理时我们想要的结构对应另一组参数只要能把前者的参数等价转换为后者就可以将前者的结构等价转换为后者。 实验结果 在1080Ti上测试RepVGG模型的速度-精度相当出色。在公平的训练设定下同精度的RepVGG速度是ResNet-50的183%ResNet-101的201%EfficientNet的259%RegNet的131%。注意RepVGG取得超过EfficientNet和RegNet并没有使用任何的NAS或繁重的人工迭代设计。 这也说明在不同的架构之间用FLOPs来衡量其真实速度是欠妥的。例如RepVGG-B2的FLOPs是EfficientNet-B3的10倍但1080Ti上的速度是后者的2倍这说明前者的计算密度是后者的20余倍。 在Cityscapes上的语义分割实验表明在速度更快的情况下RepVGG模型比ResNet系列高约1%到1.7%的mIoU或在mIoU高0.37%的情况下速度快62%。 另外一系列ablation studies和对比实验表明结构重参数化是RepVGG模型性能出色的关键详见论文。 最后需要注明的是RepVGG是为GPU和专用硬件设计的高效模型追求高速度、省内存较少关注参数量和理论计算量。在低算力设备上可能不如MobileNet和ShuffleNet系列适用。 参考文献 [1] Andreas Veit, Michael J Wilber, and Serge Belongie. Residual networks behave like ensembles of relatively shallow networks. In Advances in neural information processing systems, pages 550–558, 2016. 2, 4, 8