RepVGG溯源 | RepVGG作者前期作品,ACNet零算力白嫖性能(附Pytorch代码详解)(二)

简介: RepVGG溯源 | RepVGG作者前期作品,ACNet零算力白嫖性能(附Pytorch代码详解)(二)

4实验更精彩


4.1 消融实验

虽然已经通过前面的实验证明了ACNet的有效性,但仍然希望找到一些解释。在本小节中试图通过一系列消融实验来研究ACNet。具体来说,主要关注以下三个设计决策:

  1. 水平kernel的使用
  2. 垂直kernel的使用
  3. 每个分支中的BN层的使用

为了具有可比性,使用相同的训练配置,在ImageNet上用不同的消融训练几个AlexNet和ResNet-18模型。值得注意的是,如果去除分支中的BN层,将对整个ACB 的输出进行批归一化,即批归一化层的位置从前求和变为后求和。

image.png

从表4中可以看出,去掉这三种设计中的任何一种都会降低模型的质量。然而,虽然水平卷积和垂直卷积都能提高性能,但由于在实际应用中对水平方向和垂直方向的处理不平等,可能会存在一定的差异。

image.png

例如,通常会对训练数据进行随机左右翻转,而不进行上下翻转。因此,如果一个上下颠倒的图像输入模型,最初3 x3层应该产生意义的结果,这是自然的,但水平kernel将产生相同的输出在原始图像上的轴对称位置(图4)。也就是说,ACB仍然可以提取一部分正确的特征。考虑到这一点,假设ACB可以增强模型对旋转畸变的鲁棒性,使模型能够更好地泛化未知数据

然后,用整个验证集包括逆时针90度旋转、180度旋转和上下翻转在内的旋转扭曲图像对之前训练的模型进行测试。当然,每个模型的精度都显著降低,但水平kernel模型在180度旋转和上下翻转的图像上的精度明显更高。

例如,在原始输入上,只配备水平kernel的ResNet-18的精度略低于只配备垂直kernel的ResNet-18,但在180个旋转输入上的精度要高0.75%。与基础模型相比,该模型在原始/180翻转图像上的准确率分别提高了0.34% / 1.27%。可以预见,在180度旋转和上下翻转输入条件下,模型具有相似的性能,因为180度旋转加上左右翻转等于上下翻转,并且由于数据增强方法,模型对左右翻转具有鲁棒性

综上所述,已经证明ACB的有效性,特别是其中的水平kernel,可以通过一个可观察的边际来增强模型对旋转畸变的鲁棒性。虽然这可能不是ACNet有效的主要原因,但作者认为它有希望对旋转不变性问题的进一步研究起到启发作用。

4.4 ACB提升方形kernel的skeleton

直观地说,在方形kernel上添加水平和垂直kernel可以被视为显式增强skeleton部分的一种手段,作者试图通过研究skeleton和corner权重之间的差异来解释ACNet的有效性。

受CNN剪枝方法的启发,从去除不同空间位置的一些权重开始,并在CIFAR-10上使用ResNet-56观察性能的下降。具体地说,在kernel中随机设置一些单独的权值为零,并测试模型。如图5a所示,对于标记为corner的曲线,从每个3×3 kernel的4个corner中随机选择权值,并将其设为零,以获得每个卷积层给定的全局稀疏比。注意,作为4/9=44.4%,稀疏比的44%意味着去除4个corner的大部分权重。对于skeleton,只从每个kernel的skeleton中随机选择权重。对于全局的,kernel中的每个个体权重都有相等的机会被选择。用不同的随机种子重复5次,并绘制了平均±std曲线。

可以观察到,由于随机效应,所有曲线随着稀疏比的增加而呈下降趋势,但由于随机效应,而不是单调的。很明显,从corner去除权重对模型的损害较小,但修剪skeleton的危害更大。这一现象表明,skeleton的权重对模型的表征能力更为重要。

将继续验证这一观察结果是否适用于ACNet。通过BN和分支融合对ACNet对等物进行转换,然后对其进行同样的实验。如图5b所示,可以观察到一个更显著的差距,例如,修剪几乎所有的corner的权重只会使模型的精度降低到60%以上。另一方面,修剪skeleton造成的损伤更大,当修剪skeleton所获得的全局稀疏度比仅达到13%,即去除13%×9/5=23.4%的skeleton权重时,模型被破坏。

然后通过对kernel的数值分析,探讨了产生上述现象的原因。使用大小(即绝对值)作为参数重要性的度量,这是许多之前的CNN修剪工作所采用的。具体来说,将卷积层中所有融合的二维kernel相加,取最大值逐层归一化,最后得到所有层归一化kernel的平均值。式中,设为第个滤波器在第个3 × 3层的3D kernel,L为所有这些层的个数,max和abs分别为max和元素的绝对值,计算kernel的平均大小矩阵为:

image.png

在图6a和图6b中给出了正常训练的ResNet-56和融合的ACNet,其中一定网格的数值和颜色表示3×3层相应位置的平均相对重要性,即值越大,背景色越深表示参数的平均重要性较高。

从图6a可以看出,正常训练的ResNet-56以不平衡的方式分布参数的大小,即中心点的大小最大,4角处的点最小。从图6b可以看出,ACNet加剧了这种不平衡,4个角的A值下降到0.400以下,skeleton点的A值在0.666以上。特别是,中心点的a值为1.000,这意味着这个位置在每一个3×3层中始终具有主导重要性。值得注意的是,正方形、水平和垂直kernel对应位置的权值有可能出现符号的相反增长,因此加起来可能会产生更大或更小的幅度。但都可以观察到一个一致的现象,即模型总是学会增强每一层的skeleton。

如果将非对称核添加到其他位置而不是中心skeleton,模型将如何?

具体来说,使用与之前相同的训练配置训练ResNet-56的ACNet,但将水平卷积向输入的底部移动一个像素,并将垂直卷积向右移动。因此,在分支融合过程中,将与BN融合的不对称kernel添加到正方形kernel的右下角边界(图6c),以得到一个等价的网络。可以观察到,这种ACBs也可以增强边界,但不像常规ACBs对skeleton的强度高。该模型的准确率为94.67%,比常规的ACNet模型低0.42%。此外,还在融合模型上进行了类似的剪枝实验(图5c)。正如观察到的,修剪角落仍然提供最好的准确性,修剪增强的右下角边界并没有比左上角的2×2方块更好的结果,也就是说,虽然边界的大小增加了,其他部分仍然是必不可少的。

综上所述:

  1. 在标准方形kernel中,skeleton本质上比Corner更重要
  2. ACB能显著增强skeleton,进而提升性能
  3. 与普通ACB相比,在边界上添加水平和垂直kernel会降低模型的性能

因此,将ACNet的有效性部分归因于其进一步增强skeleton的能力。ACNet直观地遵循方形卷积核的性质。

4.2 分类实验

1、CIFAR10

2、CIFAR100

3、ImageNet

如表3所示,AlexNet、ResNet-18和DenseNet-121的Top-1准确率分别提高了1.52%、0.78%和1.18%。

在实践中,针对同一精度目标,可以利用ACNet增强一个更高效的模型,以更少的推理时间、能量消耗和存储空间实现目标。另一方面,在计算预算或模型大小的相同限制下,可以使用ACNet来明显地提高精度,这样从终端用户的角度来看,所获得的性能可以被视为免费的好处。


5参考


[1].ACNet: Strengthening the Kernel Skeletons for Powerful CNN via Asymmetric Convolution Blocks

相关文章
|
2月前
|
机器学习/深度学习 算法 PyTorch
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
297 1
|
3月前
|
自然语言处理 PyTorch 算法框架/工具
自然语言生成任务中的5种采样方法介绍和Pytorch代码实现
在自然语言生成任务(NLG)中,采样方法是指从生成模型中获取文本输出的一种技术。本文将介绍常用的5中方法并用Pytorch进行实现。
124 0
|
1月前
|
机器学习/深度学习 关系型数据库 MySQL
大模型中常用的注意力机制GQA详解以及Pytorch代码实现
GQA是一种结合MQA和MHA优点的注意力机制,旨在保持MQA的速度并提供MHA的精度。它将查询头分成组,每组共享键和值。通过Pytorch和einops库,可以简洁实现这一概念。GQA在保持高效性的同时接近MHA的性能,是高负载系统优化的有力工具。相关论文和非官方Pytorch实现可进一步探究。
91 4
|
6月前
|
并行计算 PyTorch Linux
幸福的烦恼:显卡算力太高而pytorch版本太低不支持
幸福的烦恼:显卡算力太高而pytorch版本太低不支持
352 0
|
7月前
|
机器学习/深度学习 自然语言处理 算法
LSTM-CRF模型详解和Pytorch代码实现
在快速发展的自然语言处理领域,Transformers 已经成为主导模型,在广泛的序列建模任务中表现出卓越的性能,包括词性标记、命名实体识别和分块。在Transformers之前,条件随机场(CRFs)是序列建模的首选工具,特别是线性链CRFs,它将序列建模为有向图,而CRFs更普遍地可以用于任意图。
162 0
|
4月前
|
数据挖掘 PyTorch 算法框架/工具
人脸识别中的损失函数ArcFace及其实现过程代码(pytorch)--理解softmax损失函数及Arcface
人脸识别中的损失函数ArcFace及其实现过程代码(pytorch)--理解softmax损失函数及Arcface
163 0
|
20天前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch与迁移学习:利用预训练模型提升性能
【4月更文挑战第18天】PyTorch支持迁移学习,助力提升深度学习性能。预训练模型(如ResNet、VGG)在大规模数据集(如ImageNet)训练后,可在新任务中加速训练,提高准确率。通过选择模型、加载预训练权重、修改结构和微调,可适应不同任务需求。迁移学习节省资源,但也需考虑源任务与目标任务的相似度及超参数选择。实践案例显示,预训练模型能有效提升小数据集上的图像分类任务性能。未来,迁移学习将继续在深度学习领域发挥重要作用。
|
1月前
|
PyTorch 算法框架/工具
使用Pytorch Geometric 进行链接预测代码示例
该代码示例使用PyTorch和`torch_geometric`库实现了一个简单的图卷积网络(GCN)模型,处理Cora数据集。模型包含两层GCNConv,每层后跟ReLU激活和dropout。模型在训练集上进行200轮训练,使用Adam优化器和交叉熵损失函数。最后,计算并打印测试集的准确性。
17 6
|
2月前
|
机器学习/深度学习 并行计算 PyTorch
【多GPU炼丹-绝对有用】PyTorch多GPU并行训练:深度解析与实战代码指南
本文介绍了PyTorch中利用多GPU进行深度学习的三种策略:数据并行、模型并行和两者结合。通过`DataParallel`实现数据拆分、模型不拆分,将数据批次在不同GPU上处理;数据不拆分、模型拆分则将模型组件分配到不同GPU,适用于复杂模型;数据和模型都拆分,适合大型模型,使用`DistributedDataParallel`结合`torch.distributed`进行分布式训练。代码示例展示了如何在实践中应用这些策略。
85 2
【多GPU炼丹-绝对有用】PyTorch多GPU并行训练:深度解析与实战代码指南
|
2月前
|
机器学习/深度学习 PyTorch 算法框架/工具
卷积神经元网络中常用卷积核理解及基于Pytorch的实例应用(附完整代码)
卷积神经元网络中常用卷积核理解及基于Pytorch的实例应用(附完整代码)
23 0