RepVGG-学习记录

引入:本次学习内容基本来自于Xiaohan DingXiangyu Zhang等编写的的《RepVGG: Making VGG-style ConvNets Great Again》,以及部分讲解视频,本学习记录仅为个人学习收获,部分内容存在纰漏烦请各位大佬批评指正。
(一)摘要:RepVGG具有类似VGG的结构,是由一系列3×3矩阵和ReLU激活函数组成,它的训练阶段模型具有多个分支的拓扑结构。但是它使用了一种新的技术叫结构重参数化,使用了这个技术的新VGG模型叫RepVGG,比以往的模型具备更好的性能。

(二)发表时间:2021

(三)关键词:VGG,结构重参数化

(四)学习笔记:

作者纵观整个卷积神经网络,发现现在的那些网络架构是很厉害,准确率是很高,也变的越来越复杂,但是问题也有一些。比如分支过于复杂,点名ResNet的残差结构,googleNet中的多分支操作。内存访问成本增大,比如MobileNet的深度可分离卷积技术,以及ShuffleNet的通道重组技术。这些虽然都很厉害,但是想实现还是存在一定的难度。

而作者根据以前的VGG模型,提出的新模型具备以下优点:

  • 模型不具备其他分支,典型的拓扑结构。
  • 模型主体由3×3矩阵和ReLU组成。
  • 模型结构不是通过NAS技术,手动优化,复合缩放等复杂手段生成。

对于RepVGG的结构,归纳为三点便是:快速,省内存,灵活。

为什么快?是因为多分支模型在计算时必须考虑到多条分支的结果,单分支就不用等着其他分支,因为就一条路,计算完就进行下一步。

为什么省内存?因为多分支回路是多路情况,每条分支都需要内存进行处理运算,因此内存占用率就高了。

为什么灵活?因为多分支模型对自己的结构进行了约束,例如残差结构,必须通道数一致才可以进行操作,不然就没有意义了。同时,因为分支多,修剪起来也更麻烦。而我们的普通架构,就可以根据自己的需求来设置卷积层,并可以进行修剪以达到更好的性能。

虽然优点很多,都是也有一个很致命的缺陷:性能不好。

而为了解决这个问题,受到ResNet的启发,提出了结构重参数化的方法。简单讲就是对训练出的模型进行同等替换,换成一个更简单的模型,然后用这个简单的模型进行推理运算。第一步就是将conv2d和BN算子进行结合。假设输入的特征图通道数为2,使用两个卷积核去处理,得到的结果再作为BN层的输入做处理,得到的最后的卷积层只需要在对应的卷积核权重上乘以相关系数即可,最后加上偏执。第二步就是转为3×3卷积层。如果是1×1的卷积层,只需要padding就可以了。而为了保持输入输出特征图的高度一致,此处padding为1。

而对于将BN层转换为3×3卷积,因为BN层没有卷积,因此构建卷积层出来即可,卷积层只需要做恒等映射即可。

最后只需要将三路的卷积分支合并即可,如何合并呢?只需要相加即可。具体示意图如下。

对于模型的设计,遵循三个简单的原则。第一是因为开始初始阶段的分辨率较大,因此使用了一层卷积层来降低延迟。第二是因为最后一层有更多的通道,因此使用了一层卷积层来保存参数。第三是把大部分的层用在了第二阶段。部分布局也借鉴了ResNet。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值