大核卷积及其计算性能优化

大核卷积

参考的文章是:

最开始是看到:

卷积网络的 kernel size 可以多大?答案是:25x25 就很好,31x31 甚至更好。我们发现卷积网络的基础设计维度——kernel size——对模型的性能特别是分割和检测等下游任务至关重要。我们提出一种大量采用超大卷积核的模型——RepLKNet,在结构重参数化、depthwise 卷积等设计要素的加持下,超大卷积既强又快,在目标检测和语义分割等任务上超过 Swin Transformer 而且远超传统小卷积模型。比如,在ImageNet数据集上RepLKNet取得了87.8%的top1精度;在ADE20K数据集上,RepLKNet取得了56.0%mIoU指标。 在部署落地方面,我们提出一种专门为超大卷积核优化的卷积算法以实现大幅加速,所以 RepLKNet 不但 FLOPs 低,实际运行也快,对工业应用非常友好

提升大核卷积计算性能方案:

一:depthwise 卷积

不同于常规卷积操作,Depthwise Convolution的一个卷积核负责一个通道,一个通道只被一个卷积核卷积。上面所提到的常规卷积每个卷积核是同时操作输入图片的每个通道。
同样是对于一张5×5像素、三通道彩色输入图片(shape为5×5×3),Depthwise Convolution首先经过第一次卷积运算,不同于上面的常规卷积,DW完全是在二维平面内进行。卷积核的数量与上一层的通道数相同(通道和卷积核一一对应)。所以一个三通道的图像经过运算后生成了3个Feature map(如果有same padding则尺寸与输入层相同为5×5),如下图所示。


  • UniRepLKNet使用深度卷积(Depthwise Convolution)代替密集卷积(Dense Convolution),这样可以将参数量和浮点运算(FLOPs)减少到输入通道数的倒数。深度卷积是一种逐通道的卷积操作,它可以保持输入和输出的通道数相同,而不需要额外的1x1卷积进行通道混合。

二:结构重参数化

使用结构重参数化(Structural Reparameterization)技术,这是一种将大核卷积转换为小核卷积的方法,可以减少优化难度和计算复杂度1。结构重参数化是一种训练时和推理时的动态结构调整技术,它可以在训练时使用小核卷积来模拟大核卷积的效果,然后在推理时将小核卷积折叠为大核卷积,从而保持模型的性能和效率。

1大核卷积指导方针

大核卷积的实用往往伴随着性能与速度的下降,为此,我们总结了5条大核卷积高效使用的指标方针。

大核深度卷积可以更高效

一般来讲,大核卷积计算量非常大。这是因为核尺寸会导致参数量与FLOPs的二次提升,而这个弊端可以通过Depth-wise卷积解决。比如,RepLKNet的的卷积核从[3,3,3,3]提升到了[31,29,27,13],但FLOPs与参数量仅增加18.6%与10.4%。实际上,计算复杂度主要由1×1卷积主导。

也许有人会说:深度卷积计算效率低。对于常规3×3深度卷积确实如此,这是因为其存算比(每次只有9个乘法)过低导致;而大核深度卷积的存算比更高(11×11深度卷积,每次有121个乘法),其实际推理延迟并未大幅提升。

不幸的是,现有深度学习框架对大核卷积的支持很差,见上表。我们尝试了几种方法进行优化加速,最终选择了block-wise(inverse) implicit gemm方案,该方案已集成到MegEngine。从上表可以看到:相比pytorch的实现,MegEngine优化的方案速度更快,推理延迟从49.5%下降到了12.3%,近似正比于FLOPs。

恒等跳过连接对于大核卷积非常重要

为验证此,我们采用MobileNetV2作为基线(它同时具有深度卷积与跳过连接)。对于大核版本,我们采用13×13深度卷积替换原始的深度卷积。上表给出了性能对比,从中可以看到:(1) 大核卷积+短连接可以提升其性能达0.77%;(2)移除短连接后,大核卷积的性能仅为53.98%。

小核重参数有助于弥补优化问题

我们将MobileNetV2中的3×3卷积替换为9×9,13×13并采用结构重参数技术,可参考上图。完成训练后,我们再参考结构重参数进行模块折叠,即转换后的模型将不再包含小核等两者等价。关于结构重参数化相关的知识可以参考作者的RepVGG与DBB,这两篇paper的解读可参考:

RepVGG|让你的ConVNet一卷到底,plain网络首次超过80%top1精度
CVPR2021|“无痛涨点”的ACNet再进化,清华大学&旷视科技提出Inception类型的DBB

从上表结果可以看到:将卷积核尺寸从9提升到13反而会带来性能下降;而引入结构重参数化后则可以解决该问题。类似的现象在语义分割任务也再次发生。也就是说,通过结构重参数技术,提升卷积核尺寸将不再导致性能下降。

大核卷积对下游任务的提升更明显

前面Table3的结果表明:对于ImageNet分类卷积核从3提升到9带来的性能提升为1.33%,而Cityscapes的性能提升则达到了3.99%。上表Table5也带来的类似的趋势,这意味着:具有相似ImageNet分类性能的模型可能具有完全不同的下游任务迁移能力

那么,其背后的根因是什么呢?首先,大核设计可以大幅提升感受野(Effective Receptive Fields, ERFs),而感受野对于下游任务非常重要;其次,我们认为大核设计可以为网络带来更多的形状偏置

大核卷积对于小图仍然有效

为验证此,我们将MobieNetV2最后一阶段的深度卷积尺寸提升到7和13,因此卷积核尺寸比特征尺寸相当、甚至更大。

从上表可以看到:尽管最后阶段的卷积已有包含非常大的感受野,进一步提升感受野还可以进一步提升下游任务的性能。

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: torch卷积神经网络的训练过程主要包括以下几个步骤: 1. 数据准备:首先需要准备训练集和验证集。训练集是用来训练模型的数据集,而验证集则是用来评估模型性能和调整超参数的数据集。数据集通常需要进行预处理,如图像数据需要进行归一化处理。 2. 模型构建:使用torch搭建卷积神经网络模型。卷积神经网络包括多个卷积层、池化层、全连接层等。可以通过定义网络的结构和参数来构建模型。 3. 损失函数定义:选择适当的损失函数来度量模型预测结果与真实标签之间的差异。常用的损失函数包括交叉熵损失函数、均方差损失函数等。 4. 优化算法选择:选择合适的优化算法来更新模型的参数。常用的优化算法包括梯度下降法及其改进算法,如Adam、RMSprop等。 5. 训练模型:使用训练集对模型进行训练。每次迭代时,通过前向传播获得模型的输出,再通过反向传播计算梯度,并根据优化算法更新模型参数。重复这个过程直到达到事先设定的停止条件,如达到最大迭代次数或损失函数收敛。 6. 模型评估:使用验证集对训练得到的模型进行评估,计算模型在验证集上的准确率、精确率等指标。可以根据评估结果对模型进行进一步的调优。 7. 模型应用:使用测试集对训练好的模型进行测试,进一步评估模型的泛化能力和性能。 整个训练过程可以多次重复,通过不断调整模型参数、优化算法以及数据预处理等方法,逐步改进模型的性能,提高模型的准确率和鲁棒性。 ### 回答2: Torch卷积神经网络的训练过程主要包括数据准备、网络搭建、损失函数选择、优化器选择和迭代训练等步骤。 首先,数据准备是一个重要的步骤。我们需要将数据集分成训练集、验证集和测试集,并进行数据预处理。预处理过程可能包括图像尺寸调整、归一化等操作,以便更好地适应模型的输入。 接下来,我们需要选择并搭建卷积神经网络模型。Torch提供了丰富的卷积神经网络模型,如VGG、ResNet等。我们根据具体任务的需求选择合适的网络结构,并用Torch搭建起来。 然后,我们需要选择合适的损失函数来衡量模型的输出与真实标签之间的误差。对于分类任务,常用的损失函数包括交叉熵损失函数等。 接下来,我们需要选择合适的优化器来更新模型的参数,以最小化损失函数。Torch提供了常用的优化器,如SGD、Adam等。我们可以根据实际情况选择合适的优化器,并设置合适的学习率以控制参数的更新速度。 最后,我们开始进行迭代训练。训练过程中,我们将训练集输入到模型中,通过前向传播计算模型的输出。然后,将输出与真实标签计算损失函数,并通过反向传播计算梯度。最后,利用优化器对模型的参数进行更新。这个过程会迭代多次,直到达到预设的训练轮数或损失函数收敛为止。 通过以上步骤的迭代,我们可以不断优化模型的参数,使得模型在训练集上能够更好地拟合,并通过验证集的性能指标来调整模型的超参数,最终在测试集上评估训练好的模型的性能。 ### 回答3: Torch卷积神经网络的训练过程通常包含以下几个步骤: 1. 数据准备:首先需要准备好训练所需的数据集。通常会将数据集划分为训练集、验证集和测试集。训练集用于网络的参数更新,验证集用于调整网络的超参数,而测试集用于评估网络的性能。 2. 网络搭建:接下来需要搭建卷积神经网络模型。Torch提供了灵活且强大的工具,可以轻松构建各种类型的神经网络模型。可以选择不同的图层类型,如卷积层、池化层、全连接层等来设计网络结构。 3. 参数初始化:在训练开始之前,需要对网络模型的参数进行初始化。可以使用Torch提供的初始化方法,如正态分布、均匀分布等,来随机初始化网络参数。 4. 前向传播:在每个训练周期中,将输入数据通过网络进行前向传播,得到预测结果。通过计算损失函数来衡量预测结果与真实标签之间的差距。 5. 反向传播:利用反向传播算法,根据损失函数的梯度信息,逐层更新网络参数,以减小损失函数的值。Torch提供了自动求导功能,可以自动计算网络参数的梯度。 6. 参数更新:使用优化算法对网络参数进行更新。常用的优化算法包括随机梯度下降(SGD)、Adam等。这些优化算法会根据网络参数的梯度信息来更新参数值,以逐步降低损失函数的值。 7. 重复训练:重复执行步骤4至步骤6,直到达到预定的训练轮数。每轮训练完成后,可以使用验证集进行模型的性能评估,并根据验证集的结果来调整网络的超参数。 8. 测试和评估:训练完成后,可以使用测试集来评估模型在未见过的数据上的性能。通过计算分类准确率、精确率、召回率等指标,来评估模型的性能并与其他方法进行比较。 总结来说,Torch卷积神经网络的训练过程主要包括数据准备、网络搭建、参数初始化、前向传播、反向传播、参数更新、重复训练和测试评估等步骤。这些步骤的目标是通过多次迭代优化网络参数,使得网络模型能够很好地拟合训练数据,并在未见过的数据上具有泛化能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值