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

相关文章
|
7月前
|
机器学习/深度学习 算法 PyTorch
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
1471 1
|
7月前
|
机器学习/深度学习 关系型数据库 MySQL
大模型中常用的注意力机制GQA详解以及Pytorch代码实现
GQA是一种结合MQA和MHA优点的注意力机制,旨在保持MQA的速度并提供MHA的精度。它将查询头分成组,每组共享键和值。通过Pytorch和einops库,可以简洁实现这一概念。GQA在保持高效性的同时接近MHA的性能,是高负载系统优化的有力工具。相关论文和非官方Pytorch实现可进一步探究。
900 4
|
1月前
|
存储 物联网 PyTorch
基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
**Torchtune**是由PyTorch团队开发的一个专门用于LLM微调的库。它旨在简化LLM的微调流程,提供了一系列高级API和预置的最佳实践
161 59
基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
|
3月前
|
机器学习/深度学习 PyTorch 算法框架/工具
CNN中的注意力机制综合指南:从理论到Pytorch代码实现
注意力机制已成为深度学习模型的关键组件,尤其在卷积神经网络(CNN)中发挥了重要作用。通过使模型关注输入数据中最相关的部分,注意力机制显著提升了CNN在图像分类、目标检测和语义分割等任务中的表现。本文将详细介绍CNN中的注意力机制,包括其基本概念、不同类型(如通道注意力、空间注意力和混合注意力)以及实际实现方法。此外,还将探讨注意力机制在多个计算机视觉任务中的应用效果及其面临的挑战。无论是图像分类还是医学图像分析,注意力机制都能显著提升模型性能,并在不断发展的深度学习领域中扮演重要角色。
121 10
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】26.卷积神经网络之AlexNet模型介绍及其Pytorch实现【含完整代码】
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
【从零开始学习深度学习】28.卷积神经网络之NiN模型介绍及其Pytorch实现【含完整代码】
|
2月前
|
机器学习/深度学习 并行计算 PyTorch
提高 PyTorch 性能
提高 PyTorch 是一个非常流行的深度学习框架,它支持动态计算图,非常适合快速原型设计和研究。
46 3
|
3月前
|
机器学习/深度学习 PyTorch 调度
在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型
在深度学习中,学习率作为关键超参数对模型收敛速度和性能至关重要。传统方法采用统一学习率,但研究表明为不同层设置差异化学习率能显著提升性能。本文探讨了这一策略的理论基础及PyTorch实现方法,包括模型定义、参数分组、优化器配置及训练流程。通过示例展示了如何为ResNet18设置不同层的学习率,并介绍了渐进式解冻和层适应学习率等高级技巧,帮助研究者更好地优化模型训练。
201 4
在Pytorch中为不同层设置不同学习率来提升性能,优化深度学习模型
|
2月前
|
机器学习/深度学习 PyTorch 算法框架/工具
聊一聊计算机视觉中常用的注意力机制以及Pytorch代码实现
本文介绍了几种常用的计算机视觉注意力机制及其PyTorch实现,包括SENet、CBAM、BAM、ECA-Net、SA-Net、Polarized Self-Attention、Spatial Group-wise Enhance和Coordinate Attention等,每种方法都附有详细的网络结构说明和实验结果分析。通过这些注意力机制的应用,可以有效提升模型在目标检测任务上的性能。此外,作者还提供了实验数据集的基本情况及baseline模型的选择与实验结果,方便读者理解和复现。
59 0
聊一聊计算机视觉中常用的注意力机制以及Pytorch代码实现
|
4月前
|
机器学习/深度学习 并行计算 PyTorch
GPU 加速与 PyTorch:最大化硬件性能提升训练速度
【8月更文第29天】GPU(图形处理单元)因其并行计算能力而成为深度学习领域的重要组成部分。本文将介绍如何利用PyTorch来高效地利用GPU进行深度学习模型的训练,从而最大化训练速度。我们将讨论如何配置环境、选择合适的硬件、编写高效的代码以及利用高级特性来提高性能。
859 1