RepVGG论文详解以及使用Pytorch进行模型复现
RepVGG: Making VGG-style ConvNets Great Again 是2021 CVPR的一篇论文,正如他的名字一样,使用structural re-parameterization的方式让类VGG的架构重新获得了最好的性能和更快的速度。在本文中首先对论文进行详细的介绍,然后再使用Pytorch复现RepVGG模型.
论文详解
1、多分支模型的问题
速度:
上图可以看到3×3 conv的理论计算密度大约是其他计算密度的4倍,这表明理论总FLOPs不是不同架构之间的实际速度的可比指标。例如,VGG-16比effentnet - b3大8.4×,但在1080Ti上运行却速度快1.8×。
在Inception的自动生成架构中,使用多个小的操作符,而不是几个大的操作符的多分支拓扑被广泛采用。
NASNet-A中的碎片化量为13,这对GPU等具有强大并行计算能力的设备不友好。
内存:
多分支的内存效率很低,因为每个分支的结果都需要保存到残差连接或连接为止,这会显著提高内存占用的峰值。上图显示,一个残差块的输入需要一直保持到加法。假设块保持feature map的大小,额外内存占用的峰值为为输入的2倍。
2、RepVGG
(a) ResNet:它在训练和推理过程中都得到了多路径拓扑,速度慢,内存效率低。
(b) RepVGG训练 :仅在训练时得到多路径拓扑。
(c) RepVGG推理:只在推理时得到单路径拓扑,推理时间快。
对于多分支,ResNets成功解释了这样的多分支架构使模型隐式地集成了许多较浅的模型。具体来说,当有n个块时,模型可以解释为2^n个模型的集合,因为每个块都将流分支为两条路径。由于多分支拓扑在推理方面存在缺陷,但是分支有利于训练,因此使用多分支来实现众多模型的集成只在训练时花费很多时间。
repvgg使用类似于 identity层(尺寸匹配时,输入就是输出,不做操作)和1×1卷积,因此构建块的训练时间信息流为y = x+g(x)+f(x),如上图的(b) 。所以模型变成了3^n个子模型的集合,包含n个这样的块。
为普通推断时间模型重新设置参数:
完整文章:
https://avoid.overfit.cn/post/f9263685607b40df80e5c4f949a28b42
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)