RepVGG 痛定思痛。 2022-09-09 09:58 124阅读 0赞 论文:[https://arxiv.org/pdf/2101.03697v3.pdf][https_arxiv.org_pdf_2101.03697v3.pdf] 代码:[https://github.com/DingXiaoH/RepVGG][https_github.com_DingXiaoH_RepVGG] VGG式的推理模型,由3 \* 3卷积块和ReLU激活函数组成。 训练时用的是一个多分支的网络,然后通过结构re-parameter技术得到推理网络。因为用到了结构re-parameter,所以叫做RepVGG。 # 1 简介 # 复杂网络可以取得更高的识别精度,但是有如下缺点: 1. 复杂的多分支结构(ResNet中的残差直连通道、Inception中的多分支相加)使得模型难以实现,降低了内存利用率和推理速度; 2. 某些组件(Xception和MobileNets中的depthwise卷积、ShuffleNet中的channel shuffle)增加了内存访问代价,很多设备是不支持的; 内存利用率、内存访问速度等众多因素都可能影响模型的推理速度,所以单纯使用FLOPs是无法得到准确的模型推理速度的。所以虽然很多新的模型比VGG、ResNet-18/34/50的FLOPs要小,但实际的运行速度却不一定会更快。 多分支的网络可以看做是多个浅层网络的集成,所以训练过程中可以避免梯度弥散,取得比plain 网络更好的效果。但上面也说到了多分支网络在推理过程中的缺点,所以本文作者通过结构re-parameter的技术用多分支网络进行训练,但只用plain网络进行推理。**re-parameter是指一个模块和对应的参数可以映射到另一个不同结构的模块,新模块的参数也跟着调整,确保两个模块可以取得相同的效果**。 本文的主要贡献: 1. 提出了RepVGG,在图像分类和语义分割领域取得了SOTA的效果,且具有良好的处理效率; 2. 提出了使用结构re-parameter解耦训练时的多分支网络和推理时的plain网络。 本文的RepVGG推理网络具有下述优点: 1. plain结构,没有任何额外的分支; 2. 只使用了3 \* 3卷积和ReLU; 3. 网络结构没有刻意进行设计; # 2 核心思想 # ## 2.1 简洁网络的优点 ## ### 2.1.1 速度快 ### 很多多分支网络的FLOPs比VGG小,但实际的推理速度却比VGG慢,这说明两个网络的计算密度是不同的。例如VGG-16的FLOPs比EfficientNet-B3大8.4倍,但实际运行时的吞吐量却是后者的1.8倍,说明VGG的计算密度是后者的15倍。 FLOPs和实际吞吐量之间的差异主要在于前者没有考虑两个因素: 1. 内存访问代价(Memory Access Cost,MAC) 虽然分支addition或concatenation的计算量不大,但是MAC很大。尤其在使用分组卷积时,MAC占用了大量的时间。 2. 模型的并行化程度 两个具有相同FLOPs的模型,并行化程度却可以有很大的差距。NASNET-A中一个块的单独卷积和池化操作的分散计算量是13,ResNet中一个块的分散计算量是2或3。模型的分散程度越大,在具备强大的并行能力的GPU上是无法充分发挥GPU的能力进行高效并行计算的。 ### 2.1.2 内存占用小 ### 多分支结构需要在进行add/concatenate之前保存各个分支的计算结果,所以总体内存占用更大。但一个plain网络,总是对前一层的输出进行计算得到本层的输出,无需额外的存储空间,内存占用更小。如下图所示: ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_15_color_FFFFFF_t_70_g_se_x_16] 在设计专用硬件时,如果内存需求量小,那么就可以集成更多的计算单元以进一步加速网络的推理。 ### 2.1.3 网络结构更容易设计 ### 多分支网络需要进行定制化的设计。例如,ResNet需要对每一个残差块的最后一个卷积层进行定制化设计以使得其输出和残差块的输入具有相同的尺寸。 更不好的一点是多分支结构会限制模型剪枝的应用,会使得剪枝的过程需要很强的技巧,如果剪枝不得当,可能模型的准确性会大幅下降或者剪枝的提速效果有限。 而一个plain的网络没有上述限制,可以自由地进行网络结构设计和剪枝。 ## 2.2 训练多分支网络 ## plain网络虽然有2.1节介绍的优点,但有一个核心缺点:准确率较低。所以本文在模型训练时还是使用了多分支网络。本文具体用的是ResNet,其核心思想是 `y = f(x)+x`或`y=f(x)+g(x)`,`f(x)`表示残差学习函数,`x`表示shortcut通路,`g(x)`表示使用了1 \* 1 卷积的shortcut通路。ResNet之所以能取得较好的训练效果,是因为其可以看做是多个浅层网络的集成,对于包含n个残差块的ResNet,可以看作是 2 n 2^n 2n个浅层网络的集成,`2`表示每个残差块中的两个分支。 本文作者设计了一个新的残差块`y = x + f(x) + g(x)`,按照上一段的思想,具有n个该残差块的网络可以看作是 3 n 3^n 3n个浅层网络的集成。 ### 2.3 Re-parameter过程 ### ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_16_color_FFFFFF_t_70_g_se_x_16] 本节讲述如何把`y=x+f(x)+g(x)`通过re-parameter变为一个3 \* 3卷积的过程。 输入: M ( 1 ) ∈ R N × C 1 × H 1 × W 1 M^\{(1)\} \\in R^\{N \\times C\_1 \\times H\_1 \\times W\_1\} M(1)∈RN×C1×H1×W1, C 1 C\_1 C1个channel,上图中定义为2; 输出: M ( 2 ) ∈ R N × C 2 × H 2 × W 2 M^\{(2)\} \\in R^\{N \\times C\_2 \\times H\_2 \\times W\_2\} M(2)∈RN×C2×H2×W2, C 2 C\_2 C2个channel,上图中定义为2; 参数: * 3 \* 3分支: * 卷积核 W ( 3 ) ∈ R C 2 × C 1 × 3 × 3 W^\{(3)\} \\in R^\{C\_2 \\times C\_1 \\times 3 \\times 3\} W(3)∈RC2×C1×3×3 * BN层的 μ ( 3 ) \{\\mu\}^\{(3)\} μ(3)、 σ ( 3 ) \{\\sigma\}^\{(3)\} σ(3)、 γ ( 3 ) \{\\gamma\}^\{(3)\} γ(3)、 β ( 3 ) \{\\beta\}^\{(3)\} β(3) * 1 \* 1分支: * 卷积核 W ( 1 ) ∈ R C 2 × C 1 × 1 × 1 W^\{(1)\} \\in R^\{C\_2 \\times C\_1 \\times 1 \\times 1\} W(1)∈RC2×C1×1×1 * BN层的 μ ( 1 ) \{\\mu\}^\{(1)\} μ(1)、 σ ( 1 ) \{\\sigma\}^\{(1)\} σ(1)、 γ ( 1 ) \{\\gamma\}^\{(1)\} γ(1)、 β ( 1 ) \{\\beta\}^\{(1)\} β(1) * shortcut分支: * BN层的 μ ( 0 ) \{\\mu\}^\{(0)\} μ(0)、 σ ( 0 ) \{\\sigma\}^\{(0)\} σ(0)、 γ ( 0 ) \{\\gamma\}^\{(0)\} γ(0)、 β ( 0 ) \{\\beta\}^\{(0)\} β(0) 设定 C 1 = C 2 C\_1 = C\_2 C1=C2, W 1 = W 2 W\_1 = W\_2 W1=W2,有: ![在这里插入图片描述][7e83db1aa3e8443c891ba6a73c74f053.png] **BN层合并到卷积层中**: bn表示BN层,对 ∀ 1 ≤ i ≤ C 2 \\forall 1 \\leq i \\leq C\_2 ∀1≤i≤C2计算过程可以表示为: ![在这里插入图片描述][fc669611feaf41dabbfe1385aedae979.png] BN层合并到卷积层中,可得: ![在这里插入图片描述][b1826bc69ce742058067db9277c37981.png] ![在这里插入图片描述][69f6d65412c546329c4633acd5b7a0fb.png] **直连分支**: 直连分支可以看做是卷积核为单位矩阵的1 \* 1的卷积。 **总体re-parameter**: 一个 3 \* 3的卷积核,两个1 \* 1的卷积核,三个偏移量。然后把两个1 \* 1的卷积变换为3 \* 3的卷积,偏移向量也进行叠加,得到了Fig. 4的中间结果。最后再把三个3 \* 3的矩阵进行相加,得到一个3 \* 3的矩阵,同理也得到了一个长度为2的向量。 上面的re-parameter的过程要求3 \* 3的卷积和1 \* 1的卷积有相同大小的stride值,且后者的padding值要比前者小1。 ### 2.1.4 网络结构设计 ### ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_15_color_FFFFFF_t_70_g_se_x_16 1] 只使用 3 \* 3的卷积,没有使用Max Pooling,目的是减少用到的层的类型。 网络分为5个stage,每个stage的第一个卷积层的stride都是2,用于减小feature map的尺寸。 对图像分类任务,网络头部使用GAP层+fc层;其他任务,使用自定义的网络头。 每一个stage的层的数量按照下面三个原则进行设计: 1. 第一个stage输入的分辨率大,计算比较耗时,为了减少延迟,只有一层; 2. 最后一个stage应该有较多的channel,为了减少参数量,也只有一层; 3. 倒数第二个stage层数最多。 按照上面的原则,构建了两个网络,分别是RepVGG-A和RepVGG-B,前者五个stage分别包含1,2,4,14,1个层,后者五个stage分别包含1,4,6,16,1个层。前者对应于轻量化或中等大小的网络,例如ResNet-18//34/50,后者对应大的网络,如ResNet-101。 层的channel数也遵从\[64,128,256,512\]的原则,使用两个系数 α \\alpha α和 β \\beta β缩放channel数量,前四个stage使用 α \\alpha α,最后一个stage使用系数 β \\beta β,且一般设置 β \\beta β > α \\alpha α,目的是保证输出有更加丰富的特征。因为最后stage只有一个层,使用较大的 β \\beta β值也不会使模型变得特别大。第一个stage因为输入分辨率很大,所以不允许对其channel数进行扩充,所以设计成 m i n ( 64 , 64 α ) min(64,64 \\alpha) min(64,64α)。 为进一步减少计算量和参数量,作者配置了可选的分组卷积。 # 3 实验 # ## 3.1 分类 ## 网络: ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_15_color_FFFFFF_t_70_g_se_x_16 2]![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_15_color_FFFFFF_t_70_g_se_x_16 3]![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_15_color_FFFFFF_t_70_g_se_x_16 4] ### 3.1.2 消融实验 ### ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_15_color_FFFFFF_t_70_g_se_x_16 5] 上面的实验说明了训练过程中多分支对于准确率的正向作用。 ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_15_color_FFFFFF_t_70_g_se_x_16 6] 说明了BN的重要性、增加更多的ReLU单元可以进一步提升性能,下面部分的对比实验也说明了本文re-parameter技术的优越性。 将本文的re-parameter技术和DiracNet、Trival Re-Param进行对比,前者依赖于带有BN层的具体结构的数据流,后两者只是在卷积核上应用了一次数学计算。前者的re-param表示使用一个结构的参数来参数化另一个结构。后两者却是计算两组参数用于其他的计算。因为有训练时的非线性单元BN,前者无法用后两者近似。实验结果也证明了移除BN降低了网络性能,使用更多的ReLU单元增强了网络性能。换言之,虽然一个RepVGG块可以在推理时等价转换为一个conv层,但推理时的结果并不等价于训练时的结果,所以不能把一个训练时的RepVGG块转换为一个conv层。 ## 3.2 语义分割 ## ![在这里插入图片描述][watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_15_color_FFFFFF_t_70_g_se_x_16 7] # 4 总结 # RepVGG简单、实用,推理速度快,适用于GPU和其他专用设备。比ResNets参数少、效率高。 但在低功耗的设备上,不一定比MobileNet/ShuffleNet更好。 [https_arxiv.org_pdf_2101.03697v3.pdf]: https://arxiv.org/pdf/2101.03697v3.pdf [https_github.com_DingXiaoH_RepVGG]: https://github.com/DingXiaoH/RepVGG [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_15_color_FFFFFF_t_70_g_se_x_16]: /images/20220829/5713af4c440d43fe9a89667c3a6c470e.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_16_color_FFFFFF_t_70_g_se_x_16]: /images/20220829/06b27d90fde64c078a5e75769c3f33d7.png [7e83db1aa3e8443c891ba6a73c74f053.png]: /images/20220829/9de1b8ff4f464deba618ecc7874303cf.png [fc669611feaf41dabbfe1385aedae979.png]: /images/20220829/804c7e426d9a475caddd389970a70760.png [b1826bc69ce742058067db9277c37981.png]: /images/20220829/870bc7a2b47942e591b9eda337cf7f69.png [69f6d65412c546329c4633acd5b7a0fb.png]: /images/20220829/f0dfdc88875d458abc9c1a0c34a348ae.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_15_color_FFFFFF_t_70_g_se_x_16 1]: /images/20220829/9d2c4353eda14a4494b49a3e55a4b8a7.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_15_color_FFFFFF_t_70_g_se_x_16 2]: https://img-blog.csdnimg.cn/08d122cc02fc42ea9757152241b79f23.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY2RrbmlnaHRfaGFwcHk=,size_15,color_FFFFFF,t_70,g_se,x_16 [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_15_color_FFFFFF_t_70_g_se_x_16 3]: https://img-blog.csdnimg.cn/58e86e7f2f334883928b82a298180603.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAY2RrbmlnaHRfaGFwcHk=,size_15,color_FFFFFF,t_70,g_se,x_16 [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_15_color_FFFFFF_t_70_g_se_x_16 4]: /images/20220829/72fdf65dde3546d18baaf6116ed1df80.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_15_color_FFFFFF_t_70_g_se_x_16 5]: /images/20220829/2470d8b898f544a397d901019cba5106.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_15_color_FFFFFF_t_70_g_se_x_16 6]: /images/20220829/b007dc21403f4e66b5090cb1b882eea1.png [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBAY2RrbmlnaHRfaGFwcHk_size_15_color_FFFFFF_t_70_g_se_x_16 7]: /images/20220829/55e527a40d0249328b60b85f81a3919f.png
相关 清华&旷视:RepVGG,更优的速度-精度平衡!编程 清华&旷视:RepVGG,更优的速度-精度平衡!编程 RepVGG是由清华大学和旷视科技共同研发的一种创新的卷积神经网络架构,旨在实现更佳的速度和精度平衡。本文将详细介绍Re 女爷i/ 2023年10月15日 23:38/ 0 赞/ 13 阅读
相关 RepVGG:极简架构,SOTA性能,让VGG式模型再次伟大 > 点击上方“机器学习与生成对抗网络”,关注"星标" > > 获取有趣、好玩的前沿干货! 本文作者简介:丁霄汉作为清华大学博士生,导师为丁贵广副教授,研究方向是神经网络基本 痛定思痛。/ 2023年01月11日 13:14/ 0 赞/ 78 阅读
相关 RepVGG:极简架构,SOTA性能,让VGG式模型再次伟大 RepVGG: 极简架构,SOTA性能,让VGG式模型再次伟大 本文作者简介:丁霄汉作为清华大学博士生,导师为丁贵广副教授,研究方向是神经网络基本模型的设计与优化。 曾在 忘是亡心i/ 2023年01月09日 15:41/ 0 赞/ 140 阅读
相关 RepVGG算法详解 RepVGG: Making VGG-style ConvNets Great Again-[论文链接][Link 1]\-[代码链接][Link 2] 目录 心已赠人/ 2023年01月07日 07:18/ 0 赞/ 75 阅读
相关 论文阅读|图像分类网络RepVGG,沿用VGG风格,简单强大,精度和速度上取得更好权衡。 目录 相关信息 Abstract 1. Introduction 2. Related Work 2.1. From Single-p 短命女/ 2022年11月05日 08:44/ 0 赞/ 125 阅读
相关 RepVGG 论文:[https://arxiv.org/pdf/2101.03697v3.pdf][https_arxiv.org_pdf_2101.03697v3.pdf] 代码:[ 痛定思痛。/ 2022年09月09日 09:58/ 0 赞/ 125 阅读
相关 追求极致:Repvgg重参数化对YOLO工业落地的实验和思考 本文作者主要借鉴repvgg重参化的思想,将原有的3×3conv替换成Repvgg Block,为原有的YOLO模型涨点。 前言: 之前做了一次shufflenetv2与yo ╰半夏微凉°/ 2022年08月28日 12:58/ 0 赞/ 253 阅读
还没有评论,来说两句吧...