RMNet推理去除残差结构让ResNet、MobileNet、RepVGG Great Again(必看必看)(一)

简介: RMNet推理去除残差结构让ResNet、MobileNet、RepVGG Great Again(必看必看)(一)

1简介


自从AlexNet问世以来,CNN最先进的架构变得越来越深入。例如,AlexNet只有5层卷积层,很快VGG网络和GoogLeNet分别将其扩展到19层和22层。然而,简单叠加层的深度网络很难训练,因为梯度反向传播到后面比较深的层时梯度可能会消失和爆炸(重复乘法可能会使梯度无穷小或无穷大)。

标准化初始化和中间标准化层在很大程度上解决了上述问题,它们使具有数十层的网络能够收敛。同时,也暴露出另一个退化问题:随着网络深度的增加,精度趋于饱和,然后迅速退化。

ResNet解决了退化问题,并通过添加一个从块的输入到输出的残差连接来实现1000+层的模型。ResNet不是希望每个堆叠层直接适合所需的底层映射,而是让这些层适合残余映射。当恒等映射是最优的时,将残差推到零比用一堆非线性层来拟合恒等映射更容易。随着ResNet的日益普及,研究者们提出了许多新的基于ResNet的架构,并从不同的方面对其成功进行了解释。

然而,ResDistill指出,ResNet-50中的残差连接约占特性图全部内存使用量的40%,这将减缓推理过程。此外,网络中的残留连接对网络剪枝也不友好。相比之下,VGG-like模型(本文也称plain模型)只有一条路径,速度快、内存经济、并行友好。

RepVGG提出了一种通过在推理时重新参数化来去除残差连接。具体来说,RepVGG将卷积、卷积和identity加在一起进行训练。在每个分支的末端加入BN层,并在加成后加入ReLU。在训练过程中,RepVGG只需要学习残差映射,而在推理阶段,利用重新参数化将RepVGG的基本块转换为卷积层加ReLU运算的堆叠,相对于ResNet有较好的速度-精度权衡。但是作者发现,随着网络的加深,RepVGG的性能会出现严重的下降。

本文提出了一种新的RM操作方法,该方法可以去除内部带有非线性层的残差连接,并保持模型的结果不变。RM操作通过第1卷积层、BN层和ReLU层保留输入的特征映射,然后在ResBlock中通过最后一次卷积将它们与输出的特征映射合并。通过这种方法,可以等价地将预训练的ResNet或MobileNetV2转换为RMNet模型,以增加并行度。此外,RMNet的体系结构使其具有良好的修剪性能,因为它没有残差连接。

主要贡献总结如下:

  • 作者发现用重参数化方法去除残差连接有其局限性,特别是在模型较深的情况下。它是一种非线性运算,不能放在残差连接内进行重新参数化;
  • 提出了一种新的RM操作方法,通过保留输入特征映射并将其与输出特征映射合并,在不改变输出的情况下去除非线性层间的残差连接;
  • 通过RM操作可以将ResBlocks转换为一个卷积和ReLU的堆叠,这有助于得到一个没有残差连接的更深层次的网络,并使其更适应于剪枝。

2相关工作


1、残差网络相对于普通模型的优势

何凯明引入了ResNet来解决退化问题。此外,在PreActResNet中,卷积层的梯度即使在权值任意小的情况下也不会消失,这带来了良好的反向传播特性。Balduzzi等人发现shattered gradients 问题使得DNN训练困难,实验结果表明,标准前馈网络中梯度之间的相关性随深度呈指数衰减。

相比之下,ResNet中的梯度更抗shattered,呈亚线性衰减。Veit等人也指出,残差网络可以看作是多个长度不同路径的集合。从这个观点来看,n个ResNet-Block有条隐式路径连接输入和输出,添加一个Block会使路径的数量增加一倍。

2、无残差连接的DNN

最近的一项工作结合了包括Leaky ReLU、max-norm和初始化在内的几种技术来训练一个30层Plain ConvNet,它可以达到74.6%的top-1精度,比Baseline低2%。

有学者提出了一种基于平均场理论的无分支超深卷积神经网络训练方法。而在CIFAR-10上,1k层普通网络的准确率仅为82%。Balduzzi使用外观线性初始化方法和CReLUs 在CIFAR-10上训练一个198层Plain ConvNet到85%的精度。尽管这些理论贡献颇有见地,但这些模型并不实用。可以通过重新参数化的方式获得没有残差连接的DNN:重新参数化意味着使用一个结构的参数来参数化另一组参数。这些方法首先训练具有残差连接的模型,并在推理时通过重新参数化去除残差连接。

DiracNet采用添加单位矩阵和卷积矩阵进行传播,卷积的参数只需要学习ResNet的残差函数即可。经过训练后,DiracNet将单位矩阵加入到卷积矩阵中,并使用重新参数化的模型进行推理。而DiracNet在ImageNet上只能训练34层Plain ConvNet,准确率为72.83%。

RepVGG只在训练时部署残差神经网络。在推理时,RepVGG可以通过重新参数化将残差块转换为由卷积和ReLU组成的普通模块。

DiracNet和RepVGG的区别在于DiracNet中的每个block都有2个分支(identity without BN和 ConvBN),而RepVGG有3个分支(identity with BN,  ConvBN,  ConvBN)。然而,那些利用交换性的重新参数化方法只能应用于线性层,即非线性层必须在残差连接之外,这限制了神经网络在大深度的潜力。

3、Filter剪枝

Filter剪枝是一种常见的加速CNN的方法。有学者提出了启发式度量,如卷积核的大小,零激活的平均百分比(APoZ)。也有一些工作让网络自动选择重要的Filter。例如,Liu对BN层的权值进行稀疏化,从而自动找出哪些Filter对网络性能贡献最大。但是,对于基于ResNet的体系结构,由于残差连接的输入和输出的维数必须保持一致,因此残差连接的存在限制了修剪的能力。因此,ResNet的剪枝率不大于plain Model的剪枝率。由于RM操作可以将ResNet等价地转换为一个plain Model,因此转移模型(RMNet)在剪枝方面也有很大的优势。


3Preliminary


image.png

在图1中描述了ResNet和RepVGG中使用的基本块。

在ResBlock(图1(a))中,有2个ReLUs分别为残差连接的内部和外部。而在RepBlock(图1(b)),由于重参数化是基于乘法交换律,2个Relu必须都在残差连接之外。通过用2个Rep-Block替换每个Res-Block,可以从基本的ResNet体系结构构建RepVGG。

接下来,分析了为什么Rep-VGG不能像ResNet一样通过向前和向后的传播进行深度较大模型的训练:

1、前向传播Path

假设ResNet的成功归咎于“model ensemble ”,那么可以把ResNet看作是许多不同长度路径的集合。因此,n个ResNet-Block有条隐式路径连接输入和输出。但是,不同于ResNet Block中的2个分支是可分离的、不能合并的,而RepVGG中的多个分支可以用一个分支来表示,可以表示为:

image.png

其中,是分支中每个Conv的合并卷积。因此,RepVGG不具有ResNet隐含的“ensemble assumption ”,同时随着block数量的增加,RepVGG与ResNet之间的表征差距也会增大。

2、反向传播Path

Balduzzi等人分析了深度神经网络中的”shattered gradients problem”  。当向后路径中有更多relu时,梯度的相关性表现为‘White Gaussian Noise’ 。

假设ResNet和RepVGG都有n层。从图1(a)可以看出,ResNet中的Information可以不经过每个block的ReLU内部而通过残差。然而,RepVGG中的每个ReLU都位于主路径中。

因此,ResNet在反向路径中的ReLUs为n/2, RepVGG在反向路径中的ReLUs为n,说明ResNet中的梯度在深度较大时更不易shattered,因此ResNet的性能优于RepVGG。

在图2中研究了网络深度如何影响ResNet和RepVGG的网络性能。作者使用的数据集是CIFAR-10/100。为了公平比较,每个方法都部署了相同的超参数:

  • Batchsize:256
  • 优化器:SGD
  • 初始学习率(0.1),动量(0.9),权重衰减(0.0005)
  • Epoch数200
  • 学习率每60 Epoch衰减0.1

image.png

从图2可以看出,随着深度的增加,ResNet可以得到更好的精度,这与前面的分析一致。相比之下,RepVGG-133在CIFAR-100上的准确率为79.57%,而RepVGG-133的准确率仅为41.38%。

image.png

表1显示了RepVGG和ResNet在ImageNet数据集上的性能。可以看到,在相同的网络结构下,ResNet-18比RepVGG-18高0.5%,而ResNet-34为

top-1准确度比RepVGG高0.8%;因此,RepVGG是以失去表征能力为代价提高了速度。

相关文章
|
6月前
|
机器学习/深度学习 编解码 数据可视化
英特尔提出新型卷积 | 让ResNet/MobileNet/ConvNeXt等Backbone一起涨点
英特尔提出新型卷积 | 让ResNet/MobileNet/ConvNeXt等Backbone一起涨点
249 2
|
机器学习/深度学习 PyTorch 算法框架/工具
【论文泛读】 ResNeXt:深度神经网络的聚合残差变换(ResNet的改进,提出了一种新的维度)
【论文泛读】 ResNeXt:深度神经网络的聚合残差变换(ResNet的改进,提出了一种新的维度)
【论文泛读】 ResNeXt:深度神经网络的聚合残差变换(ResNet的改进,提出了一种新的维度)
|
机器学习/深度学习 PyTorch 测试技术
【Pytorch(七)】基于 PyTorch 实现残差神经网络 ResNet
【Pytorch(七)】基于 PyTorch 实现残差神经网络 ResNet
【Pytorch(七)】基于 PyTorch 实现残差神经网络 ResNet
|
编解码 测试技术 计算机视觉
LVT | ViT轻量化的曙光,完美超越MobileNet和ResNet系列(二)
LVT | ViT轻量化的曙光,完美超越MobileNet和ResNet系列(二)
236 0
LVT | ViT轻量化的曙光,完美超越MobileNet和ResNet系列(二)
|
机器学习/深度学习 人工智能 算法
Resnet图像识别入门——残差结构
残差结构像是Resnet的告诉公路,可以将计算误差很好的保留下来。
Resnet图像识别入门——残差结构
|
机器学习/深度学习 编解码 自然语言处理
LVT | ViT轻量化的曙光,完美超越MobileNet和ResNet系列(一)
LVT | ViT轻量化的曙光,完美超越MobileNet和ResNet系列(一)
374 0
|
机器学习/深度学习 PyTorch 算法框架/工具
即插即用 | 5行代码实现NAM注意力机制让ResNet、MobileNet轻松涨点(超越CBAM)
即插即用 | 5行代码实现NAM注意力机制让ResNet、MobileNet轻松涨点(超越CBAM)
431 0
|
PyTorch 算法框架/工具 计算机视觉
RMNet推理去除残差结构让ResNet、MobileNet、RepVGG Great Again(必看必看)(二)
RMNet推理去除残差结构让ResNet、MobileNet、RepVGG Great Again(必看必看)(二)
167 0
|
PyTorch 算法框架/工具
ResNet残差网络Pytorch实现——结合各个残差块
ResNet残差网络Pytorch实现——结合各个残差块
160 0
|
PyTorch 算法框架/工具
ResNet残差网络Pytorch实现——Bottleneck残差块
ResNet残差网络Pytorch实现——Bottleneck残差块
293 0

热门文章

最新文章