最佳Backbone | RepVGG重镇VGG雄风,各大任务独占鳌头(附源码和论文下载)(一)

简介: 最佳Backbone | RepVGG重镇VGG雄风,各大任务独占鳌头(附源码和论文下载)(一)

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与本文的方法的不同之处在于:

  1. 本文的结构重新参数化是通过一个具体的结构来实现实际数据流,然后可以转换成另一个结构,而DiracNet仅仅使用了另一个卷积核的数学表达式,以方便优化。即,一个结构上重新参数化的普通模型是一个真正的训练时间多分支模型,但DiracNet不是。
  2. 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这样的库很好地支持(并默认启用)。

image.png

例如,用标准的的Winograd,一个3x3的卷积的乘法(MULs)减少到原来的4/9。由于MUL计算更耗时,文中记录了计算MULs与计算Winograd的实验(如下表)。注意,具体计算库和硬件决定是否使用Winograd每个供应商的产品。因为小规模的计算变化可能不是加速由于内存开销。

image.png

image.png

相关文章
|
消息中间件 存储 cobar
用了8年MQ!聊聊消息队列的技术选型,哪个最香! 下
用了8年MQ!聊聊消息队列的技术选型,哪个最香! 下
交叉编译安装tslib
交叉编译安装tslib
373 0
|
Linux 虚拟化 Windows
Linux、Windows上还不会端口映射的网工,请低调看过来!
Linux、Windows上还不会端口映射的网工,请低调看过来!
454 0
|
运维 监控 安全
阿里巴巴DevOps实践指南(十九)| 监管控一体化运维
阿里巴巴应用运维监管控一体化的建设随着业务形态和技术架构还在不断地探索和发展,本文主要介绍了应用运维监管控一体化建设的背景和思路。我们以应用为中心,从应用监控管角度出发,通过全视角监控实时掌握应用的运行状态,通过高效发布部署和灵活的运维编排对应用进行安全变更,通过智能化运维和安全防护实现应用的高级防护。
阿里巴巴DevOps实践指南(十九)| 监管控一体化运维
|
7月前
|
存储 数据挖掘 调度
像架构拼乐高一样构建采集系统
本教程教你如何构建一个模块化、可扩展的某博热搜采集系统,涵盖代理配置、多线程加速与数据提取,助你高效掌握网络舆情分析技巧。
164 0
像架构拼乐高一样构建采集系统
|
11月前
|
缓存 编解码 监控
开发体育直播系统:用户管理机制与内容审核技术实现方案
本体育赛事直播系统基于ThinkPHP框架构建管理端,实现内容审核、用户管理和权限配置等功能。系统通过角色与权限设计(如普通用户、主播、专家等),结合JWT认证和多端统一登录方案,确保安全性和灵活性。内容管理方面,采用敏感词过滤、自动化审核及阿里云内容安全服务,保障直播质量。性能优化涵盖推流鉴权、H.265编码和缓存策略,提升用户体验。此外,系统还提供实时监控看板与用户行为分析,支持粘性分析和智能推荐,全方位满足体育直播需求。
|
Shell Android开发 Python
Flutter如何正确使用图片资源
Flutter如何正确使用图片资源
273 0
|
Java
Java IO流终极指南:从InputStream/OutputStream到Reader/Writer的全面解读
【6月更文挑战第26天】Java IO流涵盖字节流(InputStream/OutputStream)和字符流(Reader/Writer),前者处理二进制数据,后者专司文本。例如,FileInputStream/FileOutputStream用于文件的字节级读写,而FileReader/FileWriter处理字符级文本。Buffered流提供缓冲功能,提升效率。选择合适的流类取决于数据类型和性能需求。
330 0
|
机器学习/深度学习 数据采集 自然语言处理
24 LLM错误代码补全:机器学习顶会NeurIPS‘23 智能体评估:自行构建数据集Buggy-HumanEval、Buggy-FixEval+错误代码补全+修复模型【网安AIGC专题11.22】
24 LLM错误代码补全:机器学习顶会NeurIPS‘23 智能体评估:自行构建数据集Buggy-HumanEval、Buggy-FixEval+错误代码补全+修复模型【网安AIGC专题11.22】
884 0
|
存储 SQL 数据库连接
数据输入输出概念详解与代码示例
在编程领域,数据的输入与输出是极为关键的环节,它们构成了程序与外界交互的桥梁。数据的输入是指程序从外部获取数据的过程,而数据的输出则是程序将处理后的数据展现给外部用户或系统的过程。了解并掌握数据输入输出的概念对于编写高效、实用的程序至关重要。
514 0

热门文章

最新文章