一、背景
? ? 深度学习在经过了这么多年的发展,理论层面已经到达了瓶颈期,应用层面却发展的如火如荼。行业应用铺天盖地而起,大规模落地、低成本部署、压缩成本,似乎成了每个行业里必不可逾越的大山,跨过去海阔天空,跨不过去就会在行业的浪潮里死掉。所以说,性能 + 精度双优的模型对目前的行业应用来说至关重要。
? ? 模型剪枝、蒸馏、量化等是目前一些常见的精简模型、提高模型性能的处理方法,如果模型的设计和硬件的契合度也很好,比如主流的nvidia的GPU显卡,又会是锦上添花的一笔,RepVGG正是如此做的。
二、动机
? ? 原文提到 "Simple is Fast, Memory-economical, Flexible",其网络架构在推理阶段使用了清一色的3x3卷积,其设计理念秉承了机器学习中的奥卡姆剃刀原则。
- 主流显卡集成类似?Winograd Conv 3x3 的卷积优化算法
- 多分支存在延迟内存占用高、访存耗时问题,直通结构不存在这些问题
- 高并行度。每个block使用的卷积数量是1~3之间
- 更灵活的配置卷积层。比如ResNet要求必须按照残差块来组织,输入和输出维度需要一致
? ??以上这些是RepVGG体系结构设计的主要初衷。尽管相比一些其他模型RepVG有着更大的FLOPs,但是其在主流硬件上的FLOPS要比其他模型还要高。
三、原理
? ? RepVGG的全称是Re-param VGG,解释过来就是重参数化VGG网络,具体什么是重参?为何使用重参?
? ? 如图,中间是RepVGG训练时的网络结构,直通分支之外加入一个1x1卷积分支和一个shortcut分支。右侧是RepVGG推理时的网络结构,1x1卷积分支和一个shortcut分支被剔除,保持推理阶段的直通结构,这个便是通过重参来实现的。
? ? 简单来说,重参就是将1x1卷积和shortcut都转换为等价的3x3卷积形式,最后将3个3x3卷积相加便得到了右侧推理阶段的结构。
? ? 为什么训练和推理要这样区别对待那?直接上原文的解释。简单说,就是多分支结构训练阶段要优于单通路结构。
? ? ?有一个设想,在推理阶段直接将1x1卷积分支和shortcut分支去掉,是否也有类似的性能指标?这种做法也是比较普通的,比如:细粒度对象识别——DCL方法概述所介绍的DCL模型就行这样处理训练和推理阶段的网络结构。
四、总结
? ? RepVGG的重参思想个人认为是比较通用的,比如可以将ResNet改造为Rep系列尝试一下,主要的目的还是为了在保持精度的同时提高推理阶段的性能。
? ? 通过RepVGG也学习到了一个有着非常高FLOPs的模型不一定比有着低FLOPs的模型推理速度慢,因为很多在硬件层面的优化策略我们需要兼顾到。
|