DEiT:通过注意力训练数据高效的图像transformer 蒸馏

news2024/11/18 10:11:24

摘要

最近,纯基于注意力的神经网络被证明可以解决图像理解任务,如图像分类。这些高性能的是使用大型基础设施预先训练数以亿计的图像,从而限制了它们的采用。

本文仅通过在Imagenet上训练,产生有竞争力的无卷积transformer。我们用一台电脑在不到3天的时间里训练它们。所提出的参考视觉transformer (86M参数)在没有外部数据的情况下,在ImageNet上实现了83.1%(单裁剪)的top-1精度。

更重要的是,引入了transformer特有的师生策略。它依赖于蒸馏标记,确保学生通过注意力从老师那里学习。展示了这种基于令牌的蒸馏的兴趣,特别是在使用convnet作为老师时。这导致我们报告的结果在Imagenet(获得高达85.2%的精度)和转移到其他任务时都与convnets竞争。我们共享我们的代码和模型。

1 介绍

卷积神经网络一直是图像理解任务的主要设计范式,正如最初在图像分类任务中演示的那样。他们成功的一个因素是大型训练集的可用性,即Imagenet[13,42]。受自然语言处理中基于注意的模型的成功[14,52]的激励,人们对利用convnets中的注意机制的架构越来越感兴趣[2,34,61]。最近,一些研究人员提出了将transformers成分移植到convet的混合架构,以解决视觉任务[6,43]。

Dosovitskiy等人[15]介绍的vision transformer(ViT)是直接继承自然语言处理[52]的体系结构,但应用于以原始图像补丁为输入的图像分类。他们的论文展示了用大型私有标记图像集(JFT-300M[46], 3亿张图像)训练的transformers的出色结果。本文的结论是,transformers“在数据量不足的情况下,不能很好地进行泛化训练”,而这些模型的训练需要大量的计算资源。

在本文中,我们用2到3天(53小时的预训练,可选的20小时的微调)在单个8-GPU节点上训练一个vision transformer,这与具有相似数量参数和效率的convnets具有竞争力。它使用Imagenet作为唯一的训练集。我们在Dosovitskiy等人[15]的可视化转换器架构和timm库[55]中的改进基础上进行构建。使用我们的数据高效图像转换器(DeiT),我们报告了比以前结果的较大改进,参见图1。我们的消融研究详细描述了超参数和成功训练的关键成分,如重复增强。

在这里插入图片描述

我们要解决另一个问题:如何蒸馏这些模型?我们介绍了一种基于令牌的策略,具体到transformers,用DeiT⚗表示,并表明它有效地取代了通常的蒸馏。

综上所述,我们的工作有以下贡献:

  • 不包含卷积层的神经网络在没有外部数据的情况下,可以在ImageNet上取得与最先进水平相当的结果。它们在三天内使用4个GPU在单个节点上完成训练。我们的两个新模型DeiT-S和DeiT-Ti具有更少的参数,可以被视为ResNet-50和ResNet-18的对应模型。
  • 引入了一个基于蒸馏标记的新蒸馏程序,其作用与类标记相同,只是它旨在重现老师估计的标签。两个token通过注意力在transformer中相互作用。这种特定于transformer的策略明显优于vanilla distillation。
  • 有趣的是,通过蒸馏,图像transformer从卷积网络中学到的东西比从另一个性能相当的transformer中学到的东西更多。
  • 在Imagenet上预学习的模型在迁移到不同的下游任务时,如细粒度分类,在几个流行的公共基准上是有竞争力的:CIFAR-10、CIFAR-100、牛津-102鲜花、斯坦福汽车和iNaturalist-18/19。

本文的构成如下:回顾了第2节中的相关工作,并在第3节中重点介绍了用于图像分类的transformer。我们将在第4节介绍transformer的蒸馏策略。实验部分第5节提供了与convnets和最近的transformer的分析和比较,以及对特定于transformer的蒸馏的比较评估。第六节详细介绍了我们的培训计划。它包括对数据高效训练选择的广泛消融,这对DeiT所涉及的关键成分提供了一些见解。我们在第7节结束。

2 相关工作

图像分类是计算机视觉的核心,经常被用作衡量图像理解进展的基准。任何进展通常都会转化为其他相关任务的改进,如检测或分割。自2012年AlexNet[32]以来,convnets一直主导这一基准,并已成为事实上的标准。ImageNet数据集[42]上最新技术的发展反映了卷积神经网络架构和学习的进展[32,44,48,50,51,57]。

尽管有几次尝试使用transformers进行图像分类[7],但到目前为止,它们的性能一直不如卷积网络。然而,结合卷积网络和transformers的混合架构,包括自注意机制,最近在图像分类[56]、检测[6,28]、视频处理[45,53]、无监督对象发现[35]和统一文本视觉任务[8,33,37]方面展示了具有竞争力的结果。

最近,视觉 transformers(ViT)[15]在不使用任何卷积的情况下缩小了与ImageNet上最先进技术的差距。这种性能是显著的,因为卷积图像分类方法受益于多年的调整和优化[22,55]。然而,根据这项研究[15],需要对大量策展数据进行预训练才能使学习的transformers有效。在我们的论文中,我们不需要大量的训练数据集,即仅使用Imagenet1k,就实现了强大的性能。

由Vaswani等人提出的用于机器翻译的Transformer架构目前是所有自然语言处理(NLP)任务的参考模型。许多用于图像分类的卷积算法的改进都是受到transformers的启发。例如,挤压和激励[2]、选择核[34]和分裂注意网络[61]利用了类似transformers自注意(SA)机制的机制。

由Hinton等人提出的知识蒸馏(KD)是指学生模型利用来自强大教师网络的“软”标签的训练范式。这是教师的softmax函数的输出向量,而不仅仅是分数的最大值,它给出了一个“硬”标签。这样的训练提高了学生模型的表现(或者,它可以被看作是将教师模型压缩成一个更小的模型——学生)。一方面,老师的软标签将有类似的标签平滑[58]的效果。另一方面,如Wei et al.[54]所示,教师的监督考虑了数据增强的影响,有时会导致真实标签与图像之间的错位。例如,让我们考虑一个带有“猫”标签的图像,它代表一个大的风景和角落里的一只小猫。如果猫不再在数据增强的作物上,它会隐式地改变图像的标签。KD可以将归纳偏差[1]以一种温和的方式转移到学生模型中,使用教师模型,其中它们将以一种艰难的方式合并。例如,通过使用卷积模型作为教师,在转换器模型中诱导由于卷积而产生的偏差可能是有用的。在我们的论文中,我们研究了一个transformers学生或transformers教师的蒸馏。介绍了一种新的transformers蒸馏工艺,并说明了该工艺的优越性。

3 视觉transformer概述

在本节中,我们简要回顾与视觉transformer相关的初步内容[15,52],并进一步讨论位置编码和分辨率。

多头自注意力层(MSA)。 注意力机制基于(键,值)向量对的可训练联想记忆。使用内积将查询向量 q ∈ R d q \in \mathbb{R}^{d} qRd与一组k个键向量(打包成矩阵 K ∈ R k × d K \in \mathbb{R}^{k \times d} KRk×d)进行匹配。然后用softmax函数对这些内积进行缩放和归一化,以获得k个权重。注意力的输出是一组k值向量的加权和(打包成 V ∈ R k × d V \in \mathbb{R}^{k \times d} VRk×d)。对于一个包含N个查询向量的序列(打包到 Q ∈ R N × d Q \in \mathbb{R}^{N \times d} QRN×d中),它产生一个输出矩阵(大小为 N × d N×d N×d):
Attention ⁡ ( Q , K , V ) = Softmax ⁡ ( Q K ⊤ / d ) V (1) \operatorname{Attention}(Q, K, V)=\operatorname{Softmax}\left(Q K^{\top} / \sqrt{d}\right) V \tag{1} Attention(Q,K,V)=Softmax(QK/d )V(1)
其中,Softmax函数应用于输入矩阵的每一行, d \sqrt{d} d 项提供适当的归一化。

在[52]中,提出了自注意力层。查询、键和值矩阵本身是从N个输入向量序列中计算出来的(打包成 X ∈ R N × D X \in \mathbb{R}^{N \times D} XRN×D): Q = X W Q , K = X W K , V = X W V Q=X W_{\mathrm{Q}}, K=X W_{\mathrm{K}}, V=X W_{\mathrm{V}} Q=XWQ,K=XWK,V=XWV,使用线性变换 W Q , W K , W V W_{\mathrm{Q}}, W_{\mathrm{K}}, W_{\mathrm{V}} WQ,WK,WV的约束条件是k = N,这意味着注意力位于所有输入向量之间。

最后,通过考虑h个注意力"头",即h个自注意力函数应用于输入,定义了多头自注意力层(MSA)。每个头提供一个大小为N × d的序列。这些h序列被重新排列为N × dh序列,并通过线性层重投影到N × d中。

用于图像的Transformer块。为了像[52]那样得到一个完整的transformer块,我们在MSA层的顶部添加一个前馈网络(FFN)。该FFN由两个线性层组成,由GeLu激活的[23]分隔。第一层线性层将维度从D扩展到4D,第二层将维度从4D降回D。由于skip-connections, MSA和FFN都作为残差算子运行,并具有层归一化[3]。

为了让transformer处理图像,我们的工作建立在ViT模型[15]的基础上。这是一个简单而优雅的架构,它处理输入图像就像处理输入标记序列一样。将固定大小的输入RGB图像分解为N个固定大小的16 × 16像素块(N = 14 × 14)。每个patch被投影为一个线性层,该层保持其整体尺寸3 × 16 × 16 = 768。

上面描述的transformer块与块嵌入的顺序无关,因此没有考虑它们的相对位置。位置信息被合并为固定的[52]或可训练的[18]位置嵌入。它们被添加到第一个transformer块之前的补丁令牌,然后将补丁令牌馈送到transformer块的堆栈。

类令牌是一个可训练的向量,添加到第一层之前的patch标记中,通过transformer层,然后用线性层进行投影以预测类。这个类令牌继承自NLP[14],并与计算机视觉中用于预测类的典型池化层不同。因此,transformer处理D维的(N + 1)批次令牌,其中只有类向量用于预测输出。这种架构迫使自注意力在块标记和类标记之间传播信息:在训练时,监督信号仅来自类嵌入,而块令牌是模型的唯一变量输入。

修复跨分辨率的位置编码。 Touvron等人的[50]研究表明,使用较低的训练分辨率并在较大的分辨率下微调网络是可取的。这加快了完全训练的速度,并提高了在主流数据增强方案下的准确性。当增加输入图像的分辨率时,我们保持patch大小相同,因此输入patch的数量N确实会改变。由于transformer块和类标记的架构,模型和分类器不需要修改以处理更多标记。相比之下,人们需要适应位置嵌入,因为有N个位置嵌入,每个patch一个。Dosovitskiy 等人[15]在改变分辨率时插值位置编码,并证明该方法在后续的微调阶段有效。

4 通过注意力蒸馏

在本节中,我们假设我们可以使用一个强大的图像分类器作为教师模型。它可以是卷积网络,也可以是分类器的混合。本文解决了如何利用这个老师来学习transformer的问题。正如我们将在第5节中通过比较精度和图像吞吐量之间的权衡看到的,用transformer代替卷积神经网络可能是有益的。本节涵盖蒸馏的两个轴:硬蒸馏与软蒸馏,以及经典蒸馏与蒸馏token。

软蒸馏:[24,54]最小化教师模型的softmax和学生模型的softmax之间的Kullback-Leibler散度。
Z t Z_t Zt是教师模型的对数, Z s Z_s Zs是学生模型的对数。我们通过 τ τ τ表示用于蒸馏的温度,λ表示平衡地面真值标签y上的Kullback-Leibler散度损失(KL)和交叉熵(LCE)的系数,以及softmax函数。蒸馏的目的是:
L global  = ( 1 − λ ) L C E ( ψ ( Z s ) , y ) + λ τ 2 K L ( ψ ( Z s / τ ) , ψ ( Z t / τ ) ) (2) \mathcal{L}_{\text {global }}=(1-\lambda) \mathcal{L}_{\mathrm{CE}}\left(\psi\left(Z_{\mathrm{s}}\right), y\right)+\lambda \tau^{2} \mathrm{KL}\left(\psi\left(Z_{\mathrm{s}} / \tau\right), \psi\left(Z_{\mathrm{t}} / \tau\right)\right) \tag{2} Lglobal =(1λ)LCE(ψ(Zs),y)+λτ2KL(ψ(Zs/τ),ψ(Zt/τ))(2)

Hard-label蒸馏。我们引入了蒸馏的一种变体,将老师的艰难决定作为真正的标签。设 y t = argmax ⁡ c Z t ( c ) y_{\mathrm{t}}=\operatorname{argmax}_{c} Z_{\mathrm{t}}(c) yt=argmaxcZt(c)是教师的困难决策,与此硬标签蒸馏相关的目标是:
L global  hardDistill  = 1 2 L C E ( ψ ( Z s ) , y ) + 1 2 L C E ( ψ ( Z s ) , y t ) (3) \mathcal{L}_{\text {global }}^{\text {hardDistill }}=\frac{1}{2} \mathcal{L}_{\mathrm{CE}}\left(\psi\left(Z_{s}\right), y\right)+\frac{1}{2} \mathcal{L}_{\mathrm{CE}}\left(\psi\left(Z_{s}\right), y_{\mathrm{t}}\right) \tag{3} Lglobal hardDistill =21LCE(ψ(Zs),y)+21LCE(ψ(Zs),yt)(3)
对于给定的图像,与教师相关的硬标签可能会改变,这取决于特定的数据增强。我们将看到,这种选择比传统的选择更好,而且没有参数,概念上更简单:教师预测yt扮演的角色与真实标签y相同。

还请注意,硬标签也可以通过标签平滑[47]转换为软标签,其中真实标签被认为具有 1 − ε 1-\varepsilon 1ε"的概率,其余"在其余类别中共享。在所有使用真实标签的实验中,我们将此参数固定为“ ε = 0.1 \varepsilon= 0.1 ε=0.1”。
在这里插入图片描述

蒸馏令牌。现在我们关注我们的建议,如图2所示。我们将一个新标记,蒸馏标记,添加到初始嵌入(补丁和类标记)。蒸馏标记与类标记的使用类似:它通过自注意力与其他嵌入交互,并在最后一层后由网络输出。其目标目标由损失的蒸馏成分给出。蒸馏嵌入允许我们的模型从老师的输出中学习,就像在常规蒸馏中一样,同时与类嵌入保持互补。

有趣的是,我们观察到学习到的类和蒸馏标记收敛于不同的向量:这些标记之间的平均余弦相似度等于0.06。随着在每一层计算类嵌入和蒸馏嵌入,它们通过网络逐渐变得更相似,一直到最后一层,它们的相似度很高(cos=0.93),但仍然低于1。这是意料之中的,因为它们旨在产生相似但不相同的目标。

与简单地添加与相同目标标签相关联的额外类标记相比,我们验证了蒸馏标记向模型中添加了一些东西:我们用两个类标记进行了transformer实验,而不是教师伪标记。即使我们随机独立地初始化它们,在训练期间它们也收敛于相同的向量(cos=0.999),并且输出嵌入也准相同。这个额外的类标记对分类性能没有任何影响。相比之下,蒸馏策略比vanilla蒸馏基线有显著改进,这一点在5.2节的实验中得到了验证。

使用蒸馏进行微调。在微调阶段,我们在更高分辨率下同时使用真实标签和教师预测。我们使用具有相同目标分辨率的teacher,通常通过Touvron等人[50]的方法从较低分辨率的teacher获得。我们也只测试了真正的标签,但这降低了教师的利益,导致较低的表现。

用我们的方法分类:联合分类器。在测试时,transformer产生的类或蒸馏嵌入都与线性分类器相关,并能够推断图像标签。然而,我们的参考方法是这两个独立头部的后期融合,为此我们将两个分类器的softmax输出相加以进行预测。我们将在第5节中评估这三个选项。

5 实验

本节介绍一些分析实验和结果。我们首先讨论我们的蒸馏策略。然后对比分析了卷积网络和视觉transformer的效率和精度。

5.1 Transformer模型

如前所述,我们的架构设计与Dosovitskiy等人提出的架构相同。[15]没有卷积。我们唯一的区别是训练策略和蒸馏token。此外,我们不使用MLP头进行预训练,而只使用线性分类器。为了避免混淆,我们参考了ViT在之前的工作中获得的结果,并将我们的结果前缀为DeiT。如果没有指定,DeiT指的是我们的参考模型DeiT- b,它与ViT-B具有相同的架构。当我们以更大的分辨率对DeiT进行微调时,我们将得到的操作分辨率附加在末尾,例如DeiT- b”384。最后,当使用我们的蒸馏程序时,我们用alembic符号识别它为DeiT⚗。

ViT-B(因此DeiT-B)的参数固定为D= 768, h = 12和 d = D / h = 64 d=D / h=64 d=D/h=64。我们引入了两个较小的模型,即DeiT-S和DeiT-Ti,我们改变了heads的数量,保持d固定。表1总结了我们在论文中考虑的模型。
在这里插入图片描述

5.2蒸馏

蒸馏方法产生了一个视觉transformer,在精度和吞吐量之间的权衡方面与最好的convnets相当,见表5。有趣的是,蒸馏模型在准确性和吞吐量之间的权衡方面优于它的老师。在ImageNet-1k上的最佳模型为85.2%。top-1精度在分辨率为384时(84.15%)优于在JFT-300M上预训练的最佳Vit-B模型。作为参考,在分辨率为512的JFT-300M上训练的ViTH模型(600M参数)通过额外的训练数据获得了88.55%的最新水平。随后我们给出了一些分析和观察。

卷积神经网络的老师。 我们观察到,使用convnet teacher比使用transformer有更好的性能。表2比较了不同teacher架构下的蒸馏结果。正如Abnar等人在[1]中解释的那样,卷积网络是一个更好的老师,这可能是由于transformer通过蒸馏继承的归纳偏差。在我们随后的所有蒸馏实验中,默认的老师是RegNetY-16GF [40] (84M参数),我们用与DeiT相同的数据和相同的数据增强进行训练。这位老师在ImageNet上达到了82:9%的最高准确率。
在这里插入图片描述

蒸馏方法的比较。 我们在表3中比较了不同蒸馏策略的性能。对于transformer,硬蒸馏明显优于软蒸馏,即使只使用类token:硬蒸馏在分辨率224×224上达到83.0%,而软蒸馏精度为81.8%。第4节中的蒸馏策略进一步提高了性能,表明两个token提供了对分类有用的互补信息:两个token上的分类器明显优于独立的类和蒸馏分类器,它们本身已经超过了蒸馏基线。

蒸馏令牌的结果比类令牌稍好。它也更相关的convnets预测。这种性能上的差异可能是由于它更多地受益于convnet的归纳偏差。我们将在下一段给出更多的细节和分析。蒸馏令牌对于初始训练具有不可否认的优势。
在这里插入图片描述

同意老师&归纳偏置? 如上所述,teacher的架构有重要影响。它是否继承了有助于训练的现有归纳偏差?虽然我们认为很难正式回答这个问题,但我们在表4中分析了convnet老师、我们的图像transformer DeiT仅从标签中学习的图像transformer DeiT和我们的transformer DeiT⚗之间的决策协议。

与从头学习的Transformer相比,蒸馏模型与convnet的相关性更强。正如预期的那样,与蒸馏嵌入相关的分类器更接近于类嵌入相关的convnet,相反,于类嵌入相关的分类器更接近于不蒸馏学习的DeiT。不出所料,联合class+distil分类器提供了一个中间地带。

epoch个数。 增加迭代次数可以显著提高蒸馏训练的性能,见图3。经过300个epoch,我们的蒸馏网络DeiT-B⚗已经比DeiT-B更好。但是对于后者,虽然性能会随着更长的时间表而饱和,但我们的蒸馏网络显然会从更长的训练时间中受益。

5.3 效率与精度:与convnets的比较研究

在文献中,图像分类方法经常被作为精度和另一个标准(如FLOPs、参数数量、网络大小等)之间的折中进行比较。

在图1中,我们关注的是吞吐量(每秒处理的图像)和ImageNet上top-1分类精度之间的权衡。本文关注流行的最先进的EfficientNet convnet,它受益于多年的convnets研究,并通过ImageNet验证集上的架构搜索进行优化。

所提出方法DeiT略低于EfficientNet,这表明仅用Imagenet训练时,几乎弥合了视觉transformer和convnets之间的差距。这些结果比之前仅在Imagenet1k[15]上训练的ViT模型有了重大改进(在可比设置中+6.3% top-1)。此外,当DeiT受益于从一个相对较弱的regness生产DeiT⚗,它优于EfficientNet。在分辨率为384的JFT300M上预训练的Vit-B模型(85.2% vs 84.15%)也比它高出1% (top-1 acc),同时训练速度明显更快。
在这里插入图片描述

表5报告了在ImageNet V2和ImageNet Real上的更多细节和额外评估的数值结果,它们的测试集与ImageNet验证集不同,这减少了验证集上的过拟合。实验结果表明,DeiT-B⚗和DeiT-B⚗"384在GPU上的精度和推理时间之间的权衡方面以一定的优势优于最先进的技术。
在这里插入图片描述

5.4 迁移学习:下游任务的性能

尽管DeiT在ImageNet上表现很好,但为了衡量DeiT的泛化能力,重要的是在其他具有迁移学习的数据集上评估它们。我们通过对表6中的数据集进行微调,在迁移学习任务上对此进行了评估。表7比较了DeiT迁移学习结果与ViT[15]和最先进的卷积架构[48]的结果。DeiT与有竞争力的convnet模型相当,这与我们之前对ImageNet的结论一致。
在这里插入图片描述

在这里插入图片描述

比较vs从零开始训练。 本文研究了在没有Imagenet预训练的情况下,在小型数据集上从头训练的性能。我们在较小的CIFAR-10上得到以下结果,与图像数量和标签数量相比,它都很小:
在这里插入图片描述
对于这个实验,我们试图尽可能接近Imagenet预训练的对应对象,这意味着(1)我们考虑更长的训练时间表(多达7200个epoch,相当于300个Imagenet epoch),这样网络总共被输入了相当数量的图像;(2)我们将图像缩放到224 × 224,以确保我们有相同的增强效果。结果不如Imagenet预训练(98.5% vs 99.1%),这是意料中的,因为网络的多样性低得多。然而,它们表明,仅在CIFAR-10上学习合理的transformer是可能的。

6 训练细节及消融

在本节中,我们将讨论DeiT训练策略,以数据高效的方式学习视觉转换器。我们建立在PyTorch[39]和timm库[55]的基础上。我们提供了超参数以及消融研究,其中我们分析了每种选择的影响。

初始化和超参数。transformers对初始化相对敏感。在初步实验中测试了几个选项后,其中一些不收敛,我们遵循Hanin和Rolnick[20]的建议,用截断的正态分布初始化权重。
在这里插入图片描述

表9显示了我们在所有实验训练时默认使用的超参数,除非另有说明。对于蒸馏,我们遵循Cho等人[9]的建议来选择参数τ和λ。对于通常的(软)蒸馏,我们取典型值τ = 3.0和λ = 0.1。

Data-Augmentation。与整合更多先验(如卷积)的模型相比,transformers需要更大的数据量。因此,为了使用相同大小的数据集进行训练,我们依赖于广泛的数据增强。我们评估不同类型的强数据增强,目标是达到一个数据高效的训练机制。

Auto-Augment[11]、Rand-Augment[12]和随机擦除[62]改善了结果。对于后两者,我们使用timm[55]自定义,在消融后,我们选择Rand-Augment而不是AutoAugment。总的来说,我们的实验证实了transformers需要强大的数据增强:我们评估的几乎所有数据增强方法都被证明是有用的。一个例外是辍学,我们将其排除在我们的培训程序之外。

正则化和优化器。 我们考虑了不同的优化器,交叉验证了不同的学习率和权重衰减。transformers对优化超参数的设置很敏感。因此,在交叉验证过程中,我们尝试了3种不同的学习率(5:10−4;3:10−4;5:10−5)和3权重衰减(0:03,0:04,0:05)。我们根据批大小缩放学习率,公式为: lr ⁡ s c a l e d = l r 512 ×  batchsize  \operatorname{lr}_{\mathrm{scaled}}=\frac{\mathrm{lr}}{512} \times \text { batchsize } lrscaled=512lr× batchsize ,与Goyal等人[19]类似,只是我们使用512而不是256作为基准值。

最好的结果是使用AdamW优化器,它具有与ViT[15]相同的学习率,但具有更小的权值衰减,因为论文中报道的权值衰减会影响我们设置中的收敛。

我们采用了随机深度[29],这有利于transformers的收敛,特别是深度transformers[16,17]。对于视觉变形器,最初是由Wightman[55]在训练过程中采用的。像Mixup[60]和Cutmix[59]这样的正则化可以提高性能。我们还使用了重复增强[4,25],这大大提高了性能,是我们提出的训练程序的关键成分之一。

指数移动平均(EMA)。 我们对训练后得到的网络EMA进行评估。有一些小的增益,在微调后就消失了:EMA模型有0.1个精度点的优势,但经过微调后,两个模型达到了相同的(改进的)性能。
在这里插入图片描述

不同分辨率微调。 我们采用Touvron et al.[51]的微调程序:我们的计划、正则化和优化程序与FixEfficientNet相同,但我们保留了训练时间数据的增强(与Touvron et al.[51]的阻尼数据增强相反)。我们还插值位置嵌入:原则上,任何经典的图像缩放技术,如双线性插值,都可以使用。然而,与相邻向量相比,一个向量的双线性插值减少了它的2范数。这些低范数向量不适应预训练的transformers,如果我们直接使用而不进行任何形式的微调,我们会观察到精度的显著下降。因此,我们采用双三次插值,在使用AdamW[36]或SGD微调网络之前,近似地保留向量的范数。这些优化器在微调阶段具有类似的性能,请参见表8。
在这里插入图片描述

默认情况下,类似于ViT[15],我们在分辨率224训练DeiT模型,并在分辨率384进行微调。我们将在第3节详细介绍如何进行插值。但是,为了测量分辨率的影响,我们在不同的分辨率下对DeiT进行了微调。我们在表10中报告了这些结果。

训练时间。 对于DeiT-B,典型的300个epoch的训练在2个节点上需要37小时,在单个节点上需要53小时。作为比较点,使用RegNetY-16GF [40] (84M参数)进行类似的训练要慢20%。DeiT-S和DeiT-Ti在4个GPU上的训练时间不超过3天。然后,我们可以选择以更大的分辨率微调模型。在单个节点(8个GPU)上需要20个小时才能生成分辨率为384×384的FixDeiT-B模型,对应25个epoch。不需要依赖批量范数可以在不影响性能的情况下减少批量大小,这使得训练更大的模型更容易。请注意,由于我们使用重复3次的重复增强[4,25],因此在单个epoch3中我们只能看到三分之一的图像。

7 结论

在本文中,我们介绍了DeiT,这是一种图像transformers,不需要非常大量的数据来训练,这要归功于改进的训练,特别是一种新的蒸馏程序。在近十年的时间里,卷积神经网络在架构和优化方面都进行了优化,包括通过广泛的架构搜索,这很容易出现过拟合,例如EfficientNets[51]。对于DeiT,我们已经开始了现有的数据增强和正则化策略,除了我们新的蒸馏令牌之外,没有引入任何重要的架构。因此,更适合或更适合transformers的数据增强研究很可能会带来进一步的收获。因此,考虑到我们的结果,图像转换器已经与卷积网络相同,我们相信它们将迅速成为一种选择方法,考虑到它们在给定精度下的较低内存占用。我们提供了方法的开源实现。可以在https://github.com/facebookresearch/deit上找到它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react原理-transition概念

在react18之中,引入了transition的概念。而且有一个新的api和两个新的hooks startTransitionuseTransitionuseDeferredValue 场景应用: 比如通过输入框输入内容更新列表内容,对于用户来说,输入框输入之后立马反馈的优先级是高过…

VS ChatGPT 中文版插件安装

1.打开Visual Studio Code 2.搜索chatGpt中文版 3.安装完后,重启一下软件 有国模式和国外模式,更多的教程请看插件作者的视频教程

分布式事物

Seata实践 XA模式 AT模式 TCC模式 性能 Saga模式 高可用------集群的形式 Seata实践解决方案 解决方式 Seata 引入服务协调者模式 实践步骤: 分布式事物的入口方法,会调用其他的微服务,每次调用的服务都是一个分支事物调用了多少个分支事…

SpringSecurity 认证实现

在之前一篇 博客 已经说明了 SpringSecurity 认证与授权的原理。这篇用来具体实现一下。 1、新建SecurityConfig 并创建认证管理器 Bean public AuthenticationManager authenticationManager() {... }2、新建认证提供者 Configuration public class SystemUserPasswordAuth…

Oracle项目管理之PrimaveraUnifier组织-业主/合作伙伴公司

目录 一、业主公司 二、合作伙伴公司 三、成员公司 Oracle Primavera Unifier 是企业项目协同管理系统,在国际化项目管理中,在进行常规的业务管理之外,对合同公司/EPC或分包供应商也有一定的管理要求,在Unifier中为了更好的实现…

sja1000 CAN驱动学习、调试记录(基于PeliCan Mode)

一、基础知识 网上讲sja1000 CAN总线控制器的资料很多,这里放一个引路贴:(151条消息) CAN总线控制器SJA1000_FATE的博客-CSDN博客_sja1000 BasicCAN Mode:仅支持11位的ID。 PeliCan Mode:在扩展模式下,允许使用 11 位 …

找出DataFrame中指定数据类型的列:select_dtypes()函数

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 找出DataFrame中指定数据类型的列 select_dtypes()函数 选择题 下列说法错误的是? import pandas as pd myDF pd.DataFrame({A:[1,2],B:[1.0,2.0],C:[a,b]}) print("【显示】myDF&qu…

leecode#同构字符串#反转链表

题目描述: 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一…

ReentrantLock详解

JUC中的锁API 在juc中有一个Lock接口他的作用和synchronized相似都是为了保证线程安全性提供的解决方案 Lock中定义了一系列释放锁和抢占锁相关的API lock() 抢占锁资源 如果当前线程没有抢占到锁 则阻塞 tryLock() 尝试抢占锁资源 如果抢占成功则返回true 否则返回false unlo…

简单的深度活体智能记忆模型

🍿*★,*:.☆欢迎您/$:*.★* 🍿 正文

基于Antd Input组件自定义Input的成功状态

前言 Ant Design的Input组件的有一个状态的Api 需求 公司自研UI组件,在Antd的基础上进行开发。其中Input组件除了警告与错误状态外,还增加了成功的状态。如下图⬇️ 开发实现 方案一:覆盖CSS样式 一开始准备通过判断状态来增加类名&am…

软件工程习题

软件工程第一章 软件与软件工程作业第二章 可行性研究作业第三章 需求分析作业第四章 总体设计作业第五章 详细设计作业第六章 软件编码测验第七章 软件测试作业选择判断简答题第一章 软件与软件工程作业 一、单选题(共7题,58.1分) 1、软件是…

刷题13-左右两边子数组的和相等

题目012-左右两边子数组的和相等 思路:用到了三个循环,从头到尾遍历数组,比较左右两边数组的和是否相等,当然这种思路时间复杂度也比较高 核心代码: class Solution {public int pivotIndex(int[] nums) {int sum1,…

6.2 、MyBatis 高级映射(resultMap 标签多表联查 , 一对多,多对一关系)

文章目录一、实现多表联查(association 标签)1、实现多对一关系结果集映射二、实现多表联查(collection 标签)一、实现多表联查(association 标签) association 标签: 实现一对一,多…

因果推断1--基本方法介绍(个人笔记)

目录 一、因果推断介绍 1.1 什么是因果推断 1.2为什么研究因果推断 1.3因果推断阶梯 1.4因果推断问题分类 二、因果推断理论框架 2.1 定义(这些定义后面会经常用到) 2.2 Assumptions(三大基本假设) 三、因果效应估计 3.1 因果效应…

JavaEE【Spring】:SpringBoot 配置文件

文章目录一、配置文件的作用二、配置文件的格式1、注意2、说明三、properties 配置文件说明1、基本语法2、读取配置文件① 注意3、优缺点四、yml 配置文件说明1、基本语法2、yml 使用进阶① yml 配置不同数据类型及 nullⅠ. yml 配置读取Ⅱ. 练习a. 值为 null 的配置b. 根本不存…

利用云服务器发布项目

前言 平时开发我会写一些小demo,我自己觉得有用的会集中起来形成一个项目,本来想利用gitee的gitee page直接部署出来,但后面了解了下,它只支持官网之类的静态页面,无法与后台数据交互,想要完整的服务还是得…

数据分析业务场景 | 用户画像

一.概况 定义 是根据用户的一系列行为和意识过程建立起来的多维度标签;是根据用户人口学特征,网络浏览内容,网络社交活动和消费行为等信息而抽象出的一个标签化的用户模型;首要任务:根据业务需求整理和数据情况分析建…

Springboot redirect重定向使用RedirecAtrributes传递数据

参考资料 【转载】关于重定向RedirectAttributes的用法RedirectAttributes 的使用 目录前期准备一. RedirecAtrributes重定向传参三. 重定向目标页面接收参数前期准备 ⏹配置文件 server:servlet:context-path: /jmw⏹访问url http://localhost:8080/jmw/test16/init?name…

NX二次开发(C#)-UI Styler-选择对象TaggedObject转换为Body、Face等对象

文章目录 1、前言2、选择对象的过滤器2、选择对象类型为TaggedObject3、TaggedObject转换为Face类型1、前言 前面的博客中已经写过了UI Styler中选择对象(selection)的一些内容,但是依然有读者不知道运用,本文将在前文的基础上更加深入的介绍选择对象的应用(建议与https:/…