第十四章 Vision Transformer网络详解

news2024/11/25 1:00:39

 系列文章目录


第一章 AlexNet网络详解

第二章 VGG网络详解

第三章 GoogLeNet网络详解 

第四章 ResNet网络详解 

第五章 ResNeXt网络详解 

第六章 MobileNetv1网络详解 

第七章 MobileNetv2网络详解 

第八章 MobileNetv3网络详解 

第九章 ShuffleNetv1网络详解 

第十章 ShuffleNetv2网络详解 

第十一章 EfficientNetv1网络详解 

第十二章 EfficientNetv2网络详解 

第十三章 Transformer注意力机制

第十四章 Vision Transformer网络详解 

第十五章 Swin-Transformer网络详解 

第十六章 ConvNeXt网络详解 

第十七章 RepVGG网络详解 

第十八章 MobileViT网络详解 

文章目录

  • 0. 摘要
  • 1. 前言
  • 2.   
    • 1.  
    • 2.
  • 总结


0、摘要

虽然Transformer架构已经成为自然语言处理任务的事实标准,但它在计算机视觉方面的应用仍然有限。在视觉中,注意力要么与卷积网络一起应用,要么用来替换卷积网络的某些组件,同时保持它们的总体结构。我们表明,这种依赖于CNN的做法并非必要的,一种纯Transformer可直接应用于图像块序列上,在图像分类任务中表现非常出色。当在大量数据上进行预训练并转移到多个中等或小型图像识别基准(ImageNet、CIFAR-100、VTAB等)时,Vision Transformer(ViT)可以比现有卷积网络表现更好,同时需要明显更少的计算资源来训练。

1、前言

1 引言 基于自注意力机制的架构,特别是 Transformer(Vaswani et al.,2017),已经成为自然语言处理(NLP)中的首选模型。主流方法是在大型文本语料库上进行预训练,然后在较小的任务特定数据集上进行微调(Devlin et al.,2019)。由于 Transformer 的计算效率和可伸缩性,现在可以训练规模空前的模型,参数超过 100B(Brown et al.,2020;Lepikhin et al.,2020)。随着模型和数据集的增长,性能仍未出现饱和的迹象。然而,在计算机视觉中,卷积架构仍然是主导的(LeCun et al.,1989;Krizhevsky et al.,2012;He et al.,2016)。受 NLP 成功的启发,多项研究尝试将类似于 CNN 的架构与自注意力相结合(Wang et al.,2018;Carion et al.,2020),有些将卷积完全替换(Ramachandran et al.,2019;Wang et al.,2020a)。后者虽然从理论上来说效率高,但由于使用了专门的注意力模式,在现代硬件加速器上尚未有效地扩展。因此,在大规模图像识别中,经典的 ResNet 类架构仍然是最先进的(Mahajan et al.,2018;Xie et al.,2020;Kolesnikov et al.,2020)。受 Transformer 在 NLP 中的缩放成功启发,我们尝试直接将标准 Transformer 应用于图像,并进行最少修改。为此,我们将图像分成补丁并将这些补丁的线性嵌入序列作为 Transformer 的输入。图像补丁与 NLP 应用中的标记(单词)被处理方式相同。我们以监督的方式对图像分类模型进行训练。

在像ImageNet这样的中型数据集上进行训练且没有强有力的正则化时,这些模型的准确性略低于相同大小的ResNet几个百分点。这看似令人沮丧的结果也是可以预料的:Transformer缺乏CNN固有的一些感应偏差,例如平移等变性和局部性,因此当训练数据不足时,无法很好地推广。然而,如果这些模型在更大的数据集(14M-300M张图像)上训练,则情况就会改变。我们发现大规模训练胜过于感应偏差。当Vision Transformer(ViT)在足够大的规模下预先训练并转移到数据较少的任务时,其结果非常出色。当在公共ImageNet-21k数据集或公司JFT-300M数据集上预先训练时,ViT在多个图像识别基准测试中接近或超越现有技术水平。特别是最佳模型在ImageNet上的准确率达到了88.55%,ImageNet-ReaL上为90.72%,CIFAR-100上为94.55%,VTAB一套19个任务上的准确率为77.63%。

2.正文分析

Transformer最初由Vaswani等人(2017)提出用于机器翻译,并且在许多自然语言处理任务中已成为最先进的方法。大型基于Transformer的模型通常会在大型语料库上预训练,然后针对当前任务进行微调:BERT(Devlin等人,2019)采用去噪自监督预训练任务,而GPT系列使用语言建模作为其预训练任务(Radford等人,2018; 2019; Brown等人,2020)。将自注意力应用于图像的简单应用需要每个像素对其他像素进行注意力计算。由于像素数量呈二次增长,这在实际输入尺寸上是不可扩展的。因此,为了在图像处理的上下文中应用Transformer,过去尝试过几种近似方法。Parmar等人(2018)仅在每个查询像素的局部邻域中应用自注意力,而非全局应用。这种局部多头点积自注意力块可以完全替代卷积(Hu等人,2019; Ramachandran等人,2019; Zhao等人,2020)。在不同的工作线路中,Sparse Transformers(Child等人,2019)采用可扩展的全局自注意力近似,以适用于图像。缩放注意力的另一种方法是将其应用于不同大小的块(Weissenborn等人,2019),在极端情况下仅沿着单个轴(Ho等人,2019; Wang等人,2020a)进行应用。这些专门的注意力架构中的许多都展示了在计算机视觉任务中有希望的结果,但需要复杂的工程才能有效地在硬件加速器上实现。

与我们最相关的模型是Cordonnier等人(2020)的模型,该模型从输入图像中提取2x2大小的补丁,并在其上应用完全自注意力。这个模型非常类似于ViT,但我们的工作进一步证明,大规模预训练使得vanilla transformers在(甚至比)最先进的CNN方面具有竞争力。此外,Cordonnier等人(2020)使用了2x2像素的小补丁大小,这使得该模型仅适用于小分辨率图像,而我们也处理中等分辨率的图像。另外,对于将卷积神经网络(CNNs)与自注意力的形式相结合也引起了很多兴趣,例如通过增强特征图进行图像分类(Bello等人,2019),或通过进一步使用自注意力处理CNN的输出以进行目标检测(胡等人,2018;Carion等人,2020),视频处理(Wang等人,2018;Sun等人,2019),图像分类(Wu等人,2020),无监督目标发现(Locatello等人,2020),或统一文本-视觉任务(Chen等人,2020c;Lu等人,2019;Li等人,2019)。另一个最近相关的模型是图像GPT(iGPT)(Chen等人,2020a),该模型通过降低图像分辨率和颜色空间,将Transformer应用于图像像素。该模型以无监督的方式进行训练,作为生成模型,并且结果表示可以进行线性微调或探测以进行分类性能,实现ImageNet最大准确率为72%。

我们的工作与探索比标准ImageNet数据集更大规模的图像识别论文库增添了一份贡献。使用额外的数据来源能够在标准基准测试中实现最先进的结果(Mahajan等,2018;Touvron等,2019;Xie等,2020)。此外,Sun等(2017)研究了CNN性能如何随着数据集大小扩展,Kolesnikov等(2020);Djolonga等(2020)对像ImageNet-21k和JFT-300M这样的大型数据集的CNN迁移学习进行了实证探索。我们也专注于这两个数据集,但是用的是Transformer而不是之前论文使用的ResNet-based模型进行训练。

(图1:模型概述。我们将图像分成固定大小的补丁,线性嵌入每个补丁,添加位置嵌入,并将产生的向量序列馈送到标准Transformer编码器。为了进行分类,我们使用添加额外的可学习“分类令牌”的标准方法,将其添加到序列中。Transformer编码器的插图灵感来自于Vaswani等人(2017年)的研究) 

“3方法

在模型设计中,我们尽可能地遵循原始Transformer(Vaswani等人,2017)的设计。这种故意简化的设置的优点在于可以几乎无需修改即可使用可扩展的NLP Transformer架构及其高效的实现。”

3.1 视觉变换器(VIT)

该模型的概述如图1所示。标准Transformer接收一个一维序列的标记嵌入作为输入。为了处理二维图像,我们将图像x 2 RH×W×C重新调整为扁平化的二维补丁序列xp,其中(H;W)是原始图像的分辨率,C是通道数量,(P; P)是每个图像补丁的分辨率,N = HW / P2是补丁数量,也作为Transformer的有效输入序列长度。Transformer在所有层中使用恒定的潜在矢量大小D,因此我们将补丁展平并使用可训练的线性投影映射到D维(公式1)。我们将该投影的输出称为补丁嵌入。类似于BERT的[class] token,我们在嵌入补丁序列之前添加一个可学习的嵌入(z0 0 = xclass),其在Transformer编码器输出(z0 L)处的状态作为图像表示y(公式4)。在预训练和微调期间,分类头部附加到z0 L。分类头由具有一个隐藏层的MLP实现,在微调时间内由单个线性层实现。位置嵌入被添加到补丁嵌入中以保留位置信息。我们使用标准的可学习的一维位置嵌入,因为我们没有观察到使用更先进的2D感知位置嵌入的显着性能提高(附录D.4)。得到的嵌入向量序列作为编码器的输入。

Transformer(encoder)包括多头自注意力(MSA,见附录A)和MLP块(Eq.2,3)的交替层。在每个块之前应用Layernorm(LN),在每个块之后使用残差连接(Wang等人,2019;Baevski和Auli,2019)。

MLP 包含两个层,采用 GELU 非线性函数。z0 =[xclass;x1 pE;x2 pE;···;xN p E]+Epos;E 2 R(P 2·C)×D;Epos 2 R(N+1)×D (1)z0‘=MSA(LN(z‘−1))+z‘−1;‘=1 :::L (2)z‘=MLP(LN(z0‘))+z0‘;‘=1 :::L (3)y =LN(z0 L)(4)归纳偏置。我们注意到,相比于 CNNs,Vision Transformer 有更少的图像特定归纳偏置。在 CNNs 中,局部性、二维邻域结构和平移等价性被整个模型的每一层中固定。在 ViT 中,只有 MLP 层是局部的和平移等变的,而自注意力层是全局的。二维邻域结构的使用非常节约:在模型开始时,它将图像切成补丁;在微调时间,它用于调整分辨率不同的图像的位置嵌入。除此之外,初始时的位置嵌入不含有有关补丁的 2D 位置的信息,所有补丁之间的空间关系都需从头开始学习。混合架构。与原始图像补丁不同,输入序列可以由 CNN (LeCun 等,1989) 的特征图形成。在这个混合模型中,将补丁嵌入投影 E (方程 1) 应用于从 CNN 特征图中提取的补丁上。作为一种特殊情况,补丁可以有 1x1 的空间大小,这意味着输入序列仅通过展平特征图的空间维度并投影到变压器维度来获得。分类输入嵌入和位置嵌入与上述描述相同。

3.2 微调和更高分辨率

通常,我们会在大型数据集上预训练 ViT 模型并微调到(较小的)下游任务。为此,我们会移除预训练的预测头,并添加一个零初始化的 D×K 前馈层,其中 K 是下游类别的数量。在更高分辨率下微调模型往往是有益的(Touvron et al.,2019; Kolesnikov et al. ,2020)。当输入更高分辨率的图像时,我们保持相同的补丁大小,这将导致更大的有效序列长度。VisionTransformer 可以处理任意序列长度(受内存约束限制),但是预训练的位置嵌入可能不再有意义。因此,我们会根据原始图像中位置进行预训练位置嵌入的二维插值处理。需要注意的是,这个分辨率调整和补丁提取是 VisionTransformer 中手动注入 2D 结构归纳偏差的唯一点。

4个实验。

我们评估ResNet、Vision Transformer (ViT)和混合模型的表示学习能力。为了了解每个模型的数据需求,我们在不同大小的数据集上进行预训练,并评估许多基准任务。考虑到预训练模型的计算成本,ViT表现非常优异,在较低的预训练成本下达到了大多数识别基准的最新水平。最后,我们进行了一个小的自监督实验,并展示自监督的ViT在未来有很大的发展前景。

4.1 设置数据集。

为了探索模型的可扩展性,我们使用了具有1k类和1.3M图像的ILSVRC-2012 ImageNet数据集(我们在接下来称其为ImageNet),它的超集ImageNet-21k具有21k类和14M图像(Deng等,2009),以及具有18k类和303M高分辨率图像的JFT(Sun等,2017)。 我们按照Kolesnikov等人(2020)的方法对预训练数据集进行去重,针对下游任务的测试集。我们将在这些数据集上训练的模型转移到几个基准任务:ImageNet(原始验证标签和清理后的ReaL标签(Beyer等人,2020)),CIFAR-10/100(Krizhevsky,2009),Oxford-IIIT Pets(Parkhi等人,2012)和Oxford Flowers-102(Nilsback&Zisserman,2008)。 对于这些数据集,预处理按照Kolesnikov等人(2020)进行。

我们还在19个任务的VTAB分类套件(Zhai等人,2019b)上进行评估。VTAB评估低数据传递到各种任务中,每个任务使用1,000个训练示例。任务分为三组:自然任务(如上述任务,宠物,CIFAR等),专业任务(医学和卫星图像),结构化任务(需要几何理解,如定位)。模型变体。我们基于BERT(Devlin等人,2019)中使用的配置来设置ViT配置,如表格1所示。 “基本”和“大型”模型直接采用自BERT,并添加较大的“巨大”模型。接下来,我们使用简短的符号来表示模型大小和输入补丁大小:例如,ViT-L / 16表示具有16×16输入补丁大小的“大型”变体。请注意,变换器的序列长度与补丁大小的平方成反比,因此具有较小补丁大小的模型在计算上更昂贵。对于基线CNN,我们使用ResNet(He等人,2016),但将批量归一化层(Ioffe&Szegedy,2015)替换为组归一化(Wu&He,2018),并使用标准化卷积(Qiao等人,2019)。这些修改改进了传输(Kolesnikov等人,2020),我们将修改后的模型称为“ResNet(BiT)”。对于混合型,我们将中间特征映射馈送到具有一个“像素”补丁大小的ViT中。为了尝试不同的序列长度,我们(i)采用常规ResNet50的第4阶段的输出或(ii)移除第4阶段,在第3阶段中放置相同数量的层(保持总层数),并采用此扩展的第3阶段的输出。选项(ii)导致4倍的序列长度和更昂贵的ViT模型。

训练和微调。

我们使用Adam(Kingma&Ba,2015)训练所有模型,包括ResNets,使用β1 = 0.9,β2 = 0.999,批处理大小为4096,并采用0.1的高权重衰减,我们发现对于所有模型的转移很有用(附录D.1显示,与常见做法相反,在我们的设置中,Adam对于ResNets要略好于SGD)。我们使用线性学习率热身和衰减,请参阅附录B.1的详细信息。对于微调,我们使用带动量的SGD,批处理大小为512,适用于所有模型,请参阅附录B.1.1。对于表2中的ImageNet结果,我们以更高的分辨率进行微调:ViT-L/16为512,ViT-H/14为518,并且还使用Polyak&Juditsky(1992)平均值,因数为0.9999(Ramachandran等人,2019; Wang等人,2020b)。

指标。

我们通过少量样本或微调准确性报告下游数据集的结果。微调准确性捕捉每个模型在相应数据集上微调后的性能。少量样本准确性是通过解决一个正则化的最小二乘回归问题来获得的,该问题将训练图像子集的(冻结)表示映射到f−1;1gK目标向量。这种公式使我们能够以闭合形式恢复精确解。尽管我们主要关注微调性能,但有时我们使用线性少数派准确性进行快速的即时评估,其中微调将过于昂贵。

4.2 与现有技术的比较

我们首先比较我们最大的模型——ViT-H/14和ViT-L/16——与来自文献的最先进的CNN。第一个比较点是Big Transfer(BiT)(Kolesnikov等人,2020),它使用大型ResNets进行监督式迁移学习。第二个是Noisy Student(Xie等人,2020),它是使用半监督学习在ImageNet和JFT-300M上训练的大型EfficientNet,标签已被删除。目前,Noisy Student是ImageNet上的最先进技术,BiT-L是其他数据集的最先进技术。所有模型均在TPUv3硬件上进行训练,并报告每个模型进行预训练所需的TPU v3核心天数,即在训练时间(以天为单位)中使用的TPU v3核心数(每个芯片2个)的乘积。

表格2展示了结果。使用JFT-300M预训练的较小的ViT-L/16模型在所有任务上表现优于使用相同数据集预训练的BiT-L模型,同时需要较少的计算资源进行训练。较大的ViT-H/14模型进一步提高了性能,特别是在更具挑战性的数据集(如ImageNet、CIFAR-100和VTAB组套)上。有趣的是,这个模型仍然比之前的最先进技术需要更少的计算资源进行预训练。然而,我们注意到预训练效率可能不仅受架构选择的影响,还可能受到其他参数(如训练计划、优化器、权重衰减等)的影响。我们在第4.4节中提供了对不同架构的性能与计算资源的控制研究。最后,使用公共的ImageNet-21k数据集预训练的ViT-L/16模型在大多数数据集上表现良好,同时需要更少的预训练资源:它可以在约30天内使用标准云TPUv3和8个核心进行训练。图2将VTAB任务分解为它们各自的组,并与之前的SOTA方法进行比较:BiT、VIVI(一种在ImageNet和Youtube上共同训练的ResNet)和S4L(在ImageNet上进行监督加半监督学习)。ViT-H/14在自然和结构任务上的性能超过了BiT-R152x4和其他方法。在专业任务中,前两个模型的性能相似。

 (图2: VTAB在自然、专业和结构化任务组中的表现分析)

4.3 预训练数据需求 Vision Transformer 在大型 JFT-300M 数据集上进行预训练效果良好。相对于 ResNets,视觉学习的归纳偏见较少,数据集大小对性能的影响有多大呢?我们进行了两个系列的实验。首先,我们使用不断增大的数据集 ImageNet、ImageNet-21k 和 JFT-300M 进行 ViT 模型的预训练。为了提高在这些较小数据集上的性能,我们优化了三个基本的正则化参数——权重衰减、随机失活和标签平滑。图 3 显示了在微调到 ImageNet 后的结果(其他数据集的结果见表 5)。 当使用最小的数据集 ImageNet 进行预训练时,ViT-Large 模型的表现不如 ViT-Base 模型,即使进行了(适度的)正则化。当采用 ImageNet-21k 进行预训练时,它们的性能相似。只有在使用 JFT-300M 数据集时,我们才能看到更大模型的完全受益。图 3 还显示了 BiT 模型在不同规模下的性能区域。BiT CNNs 在 ImageNet 上的表现优于 ViT,但在较大的数据集上,ViT 超越了 BiT。

其次,我们将模型训练在随机子集上,包括9M、30M、90M以及完整JFT-300M数据集。我们不会对较小的子集进行额外的正则化,而是为所有设置使用相同的超参数。这样,我们评估的是内在的模型属性,而不是正则化的影响。但是,我们会使用早停技术,并报告训练期间达到的最佳验证准确度,以节省计算资源,我们报告优于全微调的数值。图4显示了结果。在小规模数据集上,与计算成本相当的ResNets相比,Vision Transformers的过度拟合更多。例如,ViT-B/32比ResNet50略快。它在9M子集上表现要差得多,但在90 M+子集上更好。ResNet152x2和ViT-L/16也是如此。这个结果强化了卷积归纳偏置对于小数据集是有用的这一直觉,但对于更大的数据集来说,直接从数据中学习相关模式足以甚至有益。总体而言,ImageNet(图4)的少样本结果以及VTAB(Table 2)的低数据结果似乎有很大的转移学习空间。对ViT的少样本特性进行进一步分析是未来工作的一个令人兴奋的方向。

 (图3:转移到ImageNet。当使用小型数据集对大型ViT模型进行预训练时,它们的性能不如BiT ResNets(阴影区域),但当使用大型数据集进行预训练时,它们会表现出色。同样,随着数据集的增长,较大的ViT变体超越了较小的ViT变体)

【JFT预训练样本数量】

 (图4:ImageNet上的线性少样本评估与预训练大小。ResNet在较小的预训练数据集上表现更好,但比ViT更快地达到平台期,ViT在较大的预训练上表现更好。ViT-b是ViT-B所有隐藏维度都减半)

 (图5:不同架构的预训练计算性能对比:Vision Transformers、ResNets和混合型模型。在相同的计算预算下,Vision Transformers通常比ResNets表现更好。混合型模型在模型尺寸较小时比纯Transformer表现更好,但是在模型尺寸较大时差距就消失了)

4.4 缩放研究

我们通过评估从JFT-300M的传输性能,对不同模型进行控制缩放研究。在这种情况下,数据大小不会成为模型性能的瓶颈,并且我们评估每个模型的预训练成本与性能的关系。模型集包括:7个ResNets,R50x1,R50x2,R101x1,R152x1,R152x2,预先训练7个时代,再加上预先训练14个时代的R152x2和R200x3;6个Vision Transformers,ViT-B/32,B/16,L/32,L/16 ,预先训练7个时代,再加上预先训练14个时代的L/16和H/14;以及5个混合体,R50+ViT-B/32,B/16,L/32,L/16预训练7个时代,再加上R50+ViT-L/16预先训练14个时代(对于混合体,模型名称末尾的数字不代表补丁大小,而代表ResNet骨干网络的总下采样比率)。

图5显示了传输性能与总预训练计算的关系(有关计算成本详见附录D.5)。每个模型的详细结果在附录表6中提供。可以观察到一些模式。

首先,Vision Transformers在性能/计算的权衡方面超越了ResNets。ViT使用了大约2-4倍的计算来达到相同的性能(平均值在5个数据集上)。

其次,在小型计算预算中,混合体略微优于ViT,但对于较大的模型,差异消失了。这个结果有些令人惊讶,因为人们可能期望卷积局部特征处理有助于任何大小的ViT。

第三,Vision Transformers似乎没有达到尝试的范围内的饱和,这推动了未来的扩展工作。

(图6:输出词元对输入空间的典型关注示例。详见附录D.7) 

4.5 视觉变换器检查

为了开始理解视觉Transformer如何处理图像数据,我们需要分析它的内部表示。视觉Transformer的第一层将扁平的图像块线性投影到一个更低维度的空间中(方程1)。图7(左)显示了学习过程中嵌入滤波器的前几个主要成分,这些成分看起来像是用于表示每个图像块内部细节的合理基函数。在进行投影后,学习得到的位置嵌入将被添加到图像块表示中。图7(中)显示模型学习将距离编码到位置嵌入的相似性中,也就是说,更接近的图像块往往具有更相似的位置嵌入。此外,出现行列结构,同一行/列的图像块具有相似的嵌入。最后,对于较大的网格,有时会出现正弦结构(附录D)。位置嵌入学习表示2D图像拓扑,这解释了为何手工制作的2D感知嵌入变体没有带来改进(附录D.4)。

自注意力使得ViT可以在最低层次上整合整个图像的信息。我们研究这个网络在多大程度上利用了这种能力。具体来说,我们根据注意权重计算图像空间中信息整合的平均距离(参见图7,右图)。这个"注意距离"类似于CNN中的感受野大小。我们发现,一些头已经在最低层就涵盖了大部分图像,表明模型确实使用了整合全局信息的能力。其他注意头在低层中的注意距离一直很小,在应用ResNet之前使用Transformer的混合模型中,这种高度局部化的注意力就不那么明显了(参见图7,右图),这表明它可能具有与CNN中早期卷积层类似的功能。此外,随着网络深度的增加,注意距离也会增加。总体来说,我们发现该模型关注与分类有关的语义相关的图像区域(参见图6)。

4.6 自监督的Transformer在NLP任务上表现出色。然而,它们的成功很大程度上不仅源于其出色的可伸缩性,还源于大规模的自监督预训练(Devlin等,2019;Radford等,2018)。我们还进行了关于掩码补丁预测的初步探索,模拟BERT中使用的掩码语言建模任务。通过自监督预训练,我们较小的ViT-B/16模型在ImageNet上实现了79.9%的准确率,这是一个显著的提升,比从头开始训练高出2%,但仍然比监督预训练差4%。附录B.1.2包含更多细节。我们留待未来工作进行对比预训练(Chen等,2020b;He等,2020;Bachman等,2019;Henaff等,2020)的探索。

 (图7:左:ViT-L/32 的 RGB 值初始线性嵌入的滤波器。中心:ViT-L/32 的位置嵌入的相似度。瓷砖显示了指定行和列的补丁的位置嵌入与所有其他补丁的位置嵌入之间的余弦相似度。右:头部和网络深度受到关注区域的大小。每个点显示了一层中 16 个头部的一个图像上的平均关注距离。详见附录 D.7)

附录A:多头自注意力标准的qkv自注意力(SA,Vaswani et al.(2017))是神经架构中常用的构建模块。对于输入序列z∈RN×D中的每个元素,我们计算所有值v在序列中的加权和。注意力权重Aij基于序列中两个元素及其各自的查询qi和键kj表示之间的成对相似性计算得出。 [q;k;v] = zUqkv Uqkv∈RD×3Dh;(5) A = softmax(qk>=pDh)A∈RN×N;(6) SA(z)= Av :(7) 多头自注意力(MSA)是SA的扩展,其中我们并行运行k个自注意力操作(称为“头”的操作)并投影它们的串联输出。为了保持计算和参数数量的恒定性,当调整k和Dh(Eq.5)时,通常将D设置为k。 MSA(z)= [SA1(z); SA2(z); ···; SAK(z)] Umsa Umsa∈Rk·Dh×D'

'B 实验细节

B.1 训练

表 3 总结了我们不同模型的训练设置。我们发现强的正则化是从头开始在 ImageNet 上训练模型时的关键。Dropout,在每个密集层后使用,除了 qkv 投影和直接添加位置到补丁嵌入后。混合模型与其 ViT 对应项具有相同的设置。最后,所有训练都在分辨率 224 上完成。B.1.1 微调 我们使用动量为 0.9 的 SGD 对所有 ViT 模型进行微调。我们在表 4 中查看学习率范围,进行了小范围的网格搜索。为此,我们使用训练集的小子集(10% 对于宠物和花卉,2% 对于 CIFAR,1% 对于 ImageNet)作为开发集,并在剩余数据上训练。对于最终结果,我们对整个训练集进行训练,并在相应的测试数据上进行评估。对于微调 ResNets 和混合模型,我们使用完全相同的设置,仅在 ImageNet 上添加另一个值 0:06 到学习率范围。此外,对于 ResNets,我们还运行了 Kolesnikov 等人的设置(2020),并选择此运行和我们的范围中的最佳结果。最后,如果没有其他说明,所有微调实验都在分辨率 384 上运行(在微调时运行不同分辨率的常见做法(Kolesnikov 等人,2020)。)

当将ViT模型转移到另一个数据集时,我们删除整个头(两个线性层),并用一个单一的、零初始化的线性层替换它,输出目标数据集所需的类别数。我们发现这比简单地重新初始化最后一层要稍微健壮一些。对于VTAB,我们遵循Kolesnikov等人(2020)的协议,并对所有任务使用相同的超参数设置。我们使用学习率0.01进行训练,共进行2500步(Tab.4)。我们通过对两个学习速率和两个调度进行小规模调查,并选择在200个示例验证集上具有最高VTAB分数的设置来选择这个设置。我们遵循Kolesnikov等人(2020)使用的预处理方法,但不使用任务特定的输入分辨率。相反,我们发现对于所有任务,Vision Transformer最受益于高分辨率(384×384)。

B.1.2 自我监督 我们在初步自我监督实验中使用掩码补丁预测目标。为此,我们通过以下三种方式之一使50%的补丁嵌入发生错误:将它们的嵌入替换为可学习的[mask]嵌入(80%),随机选择其他补丁嵌入(10%),或保持原样(10%)。此设置非常类似于Devlin等人(2019)用于语言的设置。最后,我们使用它们各自的补丁表示来预测每个受损补丁的3位平均颜色(即共有512种颜色)。我们在JFT上以批量大小为4096、进行了100万次训练步骤(大约14个时期),使用Adam,基本学习率为2·10−4,预热10k步,余弦学习率衰减。作为预训练的预测目标,我们尝试了以下设置:1)仅预测平均3位颜色(即512种颜色的1种预测),2)同时预测带有3位颜色的16×16补丁的4 ×4缩小版本(即512种颜色的16个预测),3)使用L2对整个补丁进行回归(即256个对3个RGB通道的回归)。令人惊讶的是,发现所有设置都非常有效,尽管L2略差一些。我们仅报告选项1)的最终结果,因为它具有最好的少样本性能。我们还尝试了Devlin等人(2019)使用的15%噪声污染率,但结果在我们的少样本评估指标上也略微差一些。最后,我们想指出的是,我们的掩码补丁预测实例不需要如此大量的预训练,也不需要像JFT这样的大型数据集,以便在ImageNet分类上获得类似的性能提升。也就是说,我们观察到,在100k预训练步骤之后,下游性能的收益递减,并且当在ImageNet上进行预训练时,也可以获得类似的收益。

C 额外结果:

我们报告对论文中呈现的图表的详细结果。表5对应论文中的图3,展示了在越来越多的数据集(ImageNet、ImageNet-21k和JFT-300M)上预训练的不同ViT模型的转移性能。表6对应论文中的5,展示了不同大小的ViT、ResNet和混合模型的转移性能,以及它们的预训练估算计算成本。

附加分析 D.1 对于 ResNets 的 SGD 与 Adam 比较 通常使用 SGD 来训练 ResNets,而我们使用 Adam 作为优化器是非常不寻常的。我们在这里展示了支持这种选择的实验,即我们比较了两个 ResNets——50x1 和 152x2——在 JFT 上使用 SGD 和 Adam 预训练的微调性能。对于 SGD,我们使用了 Kolesnikov et al.(2020) 推荐的超参数。结果在表格 7 中呈现。Adam 预训练在大多数数据集上以及平均表现上均优于 SGD 预训练。这证明了在 JFT 上预训练 ResNets 时使用 Adam 作为优化器的选择是有道理的。请注意,绝对数字比 Kolesnikov 等人报告的数字要低,因为我们只预训练了 7 个 epoch,而不是 30 个。

(图8:调整不同模型尺寸的视觉转换器)

 D.2Transformer形状

我们对变压器架构的不同维度进行了缩放消融实验,以找出最适合大规模模型缩放的维度。图8显示了不同配置在ImageNet上的5-shot性能。所有配置都基于一个ViT模型,具有8层,D=1024,DMLP=2048和一个大小为32的补丁,是所有线的交点。我们可以看到,扩展深度会带来最大的改进,直到64层仍然明显。然而,在16层之后,收益递减已经明显可见。有趣的是,缩放网络的宽度似乎会产生最小的变化。减小补丁大小,从而增加有效序列长度,展现出惊人的稳健改善,而不会引入额外的参数。这些发现表明,计算能力可能是性能的更好预测因素,而不是参数数量,如果需要缩放,则应强调深度而不是宽度。总的来说,我们发现按比例缩放所有维度会带来稳健的改进。

D.3 头类型和类令牌

为了尽可能保持与原始变压器模型的接近,我们使用了一个额外的[class]token,它被视为图像表示。这个令牌的输出然后通过一个带有tanh非线性激活函数的小型多层感知器(MLP)转换为类别预测,这个设计是从文本变压器模型继承而来的,并在主要论文中使用。最初仅使用图像嵌入和全局平均池化(GAP)的方法,后跟一个线性分类器——就像ResNet的最终特征映射一样——表现非常差。然而,我们发现,这既不是由于额外的令牌,也不是由于GAP的操作。相反,性能差异完全可以用不同的学习率来解释,见图9。

'D.4 位置嵌入。

我们对使用位置嵌入编码空间信息的不同方式进行了剖析。我们尝试了以下几种情况:

•不提供位置信息:将输入视为补丁包。

•一维位置嵌入:将输入视为按光栅顺序排列的一系列补丁(本文中所有其他实验的默认方式)。

•二维位置嵌入:将输入视为一个二维补丁网格。

在这种情况下,我们学习了两组嵌入,分别为一维X嵌入和一维Y嵌入,每组嵌入的大小均为D = 2。然后,基于输入路径上的坐标,我们将X和Y嵌入连接在一起,得到该补丁的最终位置嵌入。•相对位置嵌入:考虑到补丁之间的相对距离来编码空间信息,而不是它们的绝对位置。为此,我们使用一维相对注意力,定义了所有可能的补丁对的相对距离。因此,对于每个给定的对(一个作为查询,另一个作为关键/值在注意机制中),我们有一个偏移量pq-pk,每个偏移量都与一个嵌入相关联。然后,我们简单地运行额外的注意力,使用原始查询(查询内容)但使用相对位置嵌入作为关键字。然后,在应用softmax之前,将相对注意力的logits作为偏差项添加到主注意力(基于内容的注意力)的logits上。'

除了编码空间信息的不同方法,我们还尝试了在模型中结合该信息的不同方式。对于一维和二维位置嵌入,

我们尝试了三种不同情况:(

1)在模型的主干后立即添加位置嵌入,然后再将输入馈送到Transformer编码器中(本文中所有其他实验的默认方式);

(2)在每个层的开始学习和添加位置嵌入;

(3)在每个层的开始添加一个已学习的位置嵌入(在层之间共享)。表8总结了在ViT-B/16模型上进行的这个削减研究的结果。正如我们所看到的,虽然没有位置嵌入的模型和有位置嵌入的模型之间存在巨大差距,但编码位置信息的不同方式之间几乎没有差别。我们猜测,由于我们的Transformer编码器是以补丁级别输入而不是像素级别输入运行的,因此如何编码空间信息的差异就不那么重要了。更准确地说,在补丁级别输入中,空间维度比原始的像素级别输入要小得多,例如14×14而不是224×224,并且学习表示这个分辨率中的空间关系对于这些不同的位置编码策略同样容易。即使如此,网络学习的位置嵌入相似性的具体模式取决于训练超参数(图10)。

(图11:通过头部和网络深度参加区域的大小。通过平均查询像素与所有其他像素之间的距离加权计算注意距离,对128个示例图像进行计算。每个点显示了在一层的16个头之一中跨图像的平均注意距离。图像宽度为224个像素)

 'D.5 实证计算成本

我们还对我们的硬件上架构的实际速度感兴趣,这并不总是由于细节如车道宽度和缓存大小而好预测理论FLOPs。为此,我们在TPUv3加速器上对主要感兴趣的模型进行推理速度的计时;推理速度和反向传播速度之间的差异是一个恒定的模型无关因子。图12(左)显示了各种输入尺寸下每个核心可以处理多少图像的性能。每个点都指的是在各种批处理大小范围内测量的峰值性能。如图所示,仅在最大分辨率的最大模型下,ViT理论上随着图像大小的双二次扩展才刚刚开始发生。另一个感兴趣的量是每个模型可以容纳的最大批量大小,在扩展到大型数据集时,越大越好。图12(右)显示了相同模型组的这个数量。这表明大型ViT模型在内存效率方面比ResNet模型具有明显优势。'

(图12:左:各个架构在不同输入尺寸下的真实挂钟计时。ViT模型的速度与类似的ResNet相当。右:各种架构在不同输入尺寸下适合设备的最大每核批处理大小。ViT模型显然更具有内存效率)

 'D.6 轴向注意力

轴向注意力(Huang等,2020;Ho等,2019)是一种简单而有效的技术,用于对以多维张量形式组织的大型输入运行自注意力。轴向注意力的一般思想是,在输入张量的单个轴上执行多个注意力操作,而不是对输入的扁平版本应用1维注意力。在轴向注意力中,每个注意力沿着特定轴混合信息,同时保持其他轴上的信息独立。沿着这条线,Wang等人(2020b)提出了AxialResNet模型,在其中ResNet50中所有内核大小为3×3的卷积都被轴向自注意力替换,即行和列注意力,增加了相对位置编码。我们已将AxialResNet实现为基线模型。3.此外,我们修改了ViT以处理2维形状的输入,而不是1维序列的补丁,并将轴向Transformer块纳入其中,其中一行自注意力加上一个MLP,然后是一列自注意力加上一个MLP。

图13展示了在JFT数据集上预训练的情况下,Axial ResNet、Axial-ViT-B/32和Axial-ViT-B/16在ImageNet 5shot linear数据集上的表现,与预训练计算量相关的FLOPs数量和推理时间(例如每秒)等方面。从图中可以看出,Axial-ViT-B/32和Axial-ViT-B/16在性能上都优于其ViT-B对应模型,但这是以更多计算量为代价的。这是因为在Axial-ViT模型中,每个全局自注意力的Transformer块被替换为两个Axial Transformer块,一个带有行自注意力和一个带有列自注意力,虽然自注意力操作的序列长度在轴向情况下更小,但每个Axial-ViT块中额外有一个MLP。对于AxialResNet,尽管在准确度/计算平衡方面看起来合理(图13左),但天真的实现在TPUs上非常慢(图13右)。

 (图13:基于轴向注意力的模型在ImageNet 5-shot线性分类方面的top-1精度与FLOPs数量(左)和推理时间(右)的速度表现)

'D.7 注意距离

为了理解ViT如何使用自注意力在整个图像中集成信息,我们分析了不同层级上注意力权重所覆盖的平均距离(图11)。这个“注意距离”类似于CNN中的感受野大小。平均注意距离在较低层中的不同头部之间变化非常大,一些头部关注整个图像,而其他头部关注在查询位置附近的小区域。随着深度的增加,所有头部的注意距离都会增加。在网络的后半部分,大多数头部关注所有标记。

D.8 注意力图

要计算从输出标记到输入空间的注意力图(图6和14),我们使用Attention Rollout (Abnar & Zuidema,2020)。简而言之,我们平均了ViTL/16的所有头部的注意力权重,然后递归乘以所有层的权重矩阵。这考虑到了所有层之间通过标记混合的注意力。

D.9 ObjectNet结果

我们还评估了我们最主要的ViT-H/14模型在ObjectNet基准测试中的表现,遵循Kolesnikov等人(2020)的评估设置,结果为82.1%的top-5准确性和61.7%的top-1准确性。

D.10 VTAB分解

表9显示了每个VTAB-1k任务的得分。'

 (图14:类似于图6的进一步示例注意力地图(随机选择))

表1:Vision Transformer模型变体的细节。

Table 1:Details of Vision Transformer model variants.

Model

Layers

Hidden size D

MLP size

Heads

Params

ViT-Base

12

768

3072

12

86M

ViT-Large

24

1024

4096

16

307M

ViT-Huge

32

1280

5120

16

632M

这个表格是关于不同Vision Transformer模型的详细参数的汇总。下面是每个参数的解释:

Model Layers: 模型层数,指的是Transformer encoder层数。

Hidden size: 隐藏层维度,也就是Transformer encoder各层输出的维度。

D MLP size: Transformer encoder中Feedforward Network层的中间维度。

Heads: Multi-head self-attention中的头数。

Params: 模型参数数量,以百万为单位。

通过这个表格,我们可以发现以下规律或结论:

随着模型规模的增加,模型参数数量也随之增加。

随着模型规模的增加,模型的层数、隐藏层维度、MLP中间维度和Attention头数等参数也随之增加。

在同一模型规模下,ViT-Huge模型与ViT-Base和ViT-Large相比,参数数量更多,且层数、隐藏层维度、MLP大小和Attention头数也更大。

综上所述,这个表格主要展示了Vision Transformer模型的不同参数,帮助研究者选择最适合自己任务的模型。同时,它也揭示了模型规模与模型性能之间的关系,即通常情况下,模型规模越大,参数数量越多,模型性能也越好。

表2:在流行图像分类基准测试上与现有技术的比较。我们报告了在三次微调运行中平均准确性的平均值和标准差。在所有数据集上,预先在JFT-300M数据集上训练的Vision Transformer模型均优于基于ResNet的基线,同时要比预先训练所需的计算资源少得多。在较小的公共ImageNet-21k数据集上预训练的ViT表现也不错。∗在Touvron等人(2020)中报道了略微改进的88.5%结果。

Table 2:Comparison with state of the art on popular image classification benchmarks.We re port mean and standard deviation of the accuracies,averaged over three fine-tuning runs.Vision Transformer models pre-trained on the JFT-300M dataset outperform ResNet-based baselines on all datasets,while taking substantially less computational resources to pre-train.ViT pre-trained on the smaller public ImageNet-21k dataset performs well too.∗Slightly improved 88:5%result reported in Touvron et al.(2020).

Ours-JET

(ViT-H/14)

Ours-JET

(ViT-L/16)

Ours-I21k

(ViT-L/16)

BiT-L

(ResNet152x4)

Noisy Student

(EfficientNet-L2)

ImageNet

88.55±0.04

87.76±0.03

85.30±0.02

87.54±0.02

88.4/88.5*

ImageNet ReaL

90.72±0.05

90.54±0.03

88.62±0.05

90.54

90.55

CRFAR-10

99.50±0.06

99.42±0.03

99.15±0.03

99.37±0.06

-

CIFAR-100

94.55±0.04

93.90±0.05

93.25±0.05

93.51±0.08

-

Oxford-ⅢT Pets

97.56±0.03

97.32±0.11

94.67±0.15

96.62±0.23

-

Oxford Flowers-102

99.68±0.02

99.74±0.00

99.61±0.02

99.63±0.03

-

VTAB(19 tasks)

77.63±0.23

76.28±0.46

72.72±0.21

76.29±1.70

-

TPUv3-core-days

2.5k

0.68k

0.23k

9.9k

12.3k

这个表格是对比不同模型在几个流行的图像分类基准数据集上的性能表现,包括ImageNet、CIFAR-10、CIFAR-100、Oxford-IIIT Pets和Oxford Flowers-102等。下面是每个参数的解释:

Model: 模型名称,包括Ours-JFT、Ours-I21k、BiT-L、Noisy Student等。

ImageNet: 在ImageNet数据集上的准确率,以百分比表示。

ReaL: 在ImageNet-Real数据集上的准确率,以百分比表示。

CIFAR-10: 在CIFAR-10数据集上的准确率,以百分比表示。

CIFAR-100: 在CIFAR-100数据集上的准确率,以百分比表示。

Oxford-IIIT Pets: 在Oxford-IIIT Pets数据集上的准确率,以百分比表示。

Oxford Flowers-102: 在Oxford Flowers-102数据集上的准确率,以百分比表示。

VTAB (19 tasks): 在包括19个不同任务的VTAB基准数据集上的平均准确率,以百分比表示。

TPUv3-core-days: 在TPUv3上的预训练计算资源消耗,以千小时为单位。

通过这个表格,我们可以发现以下规律或结论:

Vision Transformer模型在各个数据集上的表现优于ResNet等传统模型,特别是在ImageNet数据集上的表现更为突出。

在同一数据集下,使用不同的预训练数据集进行预训练会对模型的性能产生影响。同时,使用更大的预训练数据集能够提高模型的性能,但同时也需要更多的计算资源。

在计算资源消耗方面,Vision Transformer模型相比于传统模型需要更少的预训练计算资源,这表明Vision Transformer模型具有更好的计算效率。

综上所述,这个表格主要展示了Vision Transformer模型在多个图像分类基准数据集上的表现,并且说明了使用更大的预训练数据集能够提高模型性能,但需要更多的计算资源。同时,Vision Transformer模型相比于传统模型具有更好的计算效率。

这几个模型都是图像分类领域中使用的预训练模型,其中包括:

Ours-JET (ViT-H/14):这是一个基于Transformer架构的Vision Transformer模型,使用JFT-300M数据集进行预训练。它具有14个Transformer encoder层和12个多头自注意力头,在JFT-300M数据集上进行了预训练,然后在各种图像分类任务中进行了微调。它在多个基准数据集上具有很高的准确率,并且具有比传统模型更高的计算效率。

Ours-JET (ViT-L/16):这是Ours-JET的轻量级版本,具有16个Transformer encoder层和12个多头自注意力头。它的设计与Ours-JET相似,但具有更少的参数和更低的计算资源消耗。

Ours-I21k (ViT-L/16):这是一个基于Vision Transformer模型的预训练模型,使用ImageNet-21k数据集进行预训练。它具有16个Transformer encoder层和12个多头自注意力头,在ImageNet-21k数据集上进行了预训练,然后在各种图像分类任务中进行了微调。它在多个基准数据集上具有很高的准确率,证明了使用更大的预训练数据集能够提高模型性能。

BiT-L (ResNet152x4):这是一个基于ResNet架构的预训练模型,使用JFT-300M数据集进行预训练。它具有152层的ResNet结构,并使用4倍的宽度扩展。它在多个基准数据集上表现出色,但需要更多的计算资源进行预训练。

Noisy Student (EfficientNet-L2):这是一个基于EfficientNet架构的预训练模型,使用JFT-300M和ImageNet数据集进行预训练,并使用无噪声标签的数据进行自监督训练。它具有更高的计算效率和更高的模型性能,在多个基准数据集上表现出色。

综上所述,这几个模型都是在大规模数据集上进行预训练的图像分类模型,能够在各种图像分类任务中表现出色。其中,Vision Transformer模型相比传统模型具有更高的计算效率,而使用更大的预训练数据集能够提高模型性能。同时,自监督训练也是提高模型性能的有效手段之一。

表3:训练的超参数。所有模型都使用4096批量大小和10000步学习率预热进行训练。对于ImageNet,我们发现另外应用全局范数为1的梯度裁剪是有益的。训练分辨率为224。

Table 3:Hyperparameters for training.All models are trained with a batch size of 4096 and learn ing rate warmup of 10k steps.For ImageNet we found it beneficial to additionally apply gradient clipping at global norm 1.Training resolution is 224.

总结

5 结论

我们探讨了Transformer直接应用于图像识别的方法。与计算机视觉中使用自注意力的先前工作不同的是,除了初始的图块提取步骤外,我们没有将图像特定的归纳偏差引入架构中。相反,我们将图像解释为一个图块序列,并将其通过标准的Transformer编码器(与NLP中使用的相同)进行处理。当与大型数据集的预训练相结合时,这种简单但可扩展的策略表现出惊人的效果。因此,Vision Transformer在许多图像分类数据集上达到或超过了现有技术水平,同时预训练成本相对较低。尽管这些初步结果令人鼓舞,但仍面临许多挑战。其中之一是将ViT应用于其他计算机视觉任务,如检测和分割。我们的结果与Carion等人(2020)的结果一起表明了这种方法的潜力。另一个挑战是继续探索自监督预训练方法。我们的初步实验显示出自监督预训练的改进,但自监督与大规模监督预训练之间仍存在巨大差距。最后,进一步扩展ViT可能会导致性能提高。

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

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

相关文章

Presto 之Cross Join消除的实现

一. 前言 Cross Join是指无条件的join。因为Cross Join的代价为笛卡尔乘积,代价很大,因此在Presto的执行优化中,会尽量消除掉Cross Join。Presto Cross Join的消除原理主要是尽可能通过对Join表的重新排序实现将Cross Join转换为Inner Join。…

Python基础六

目录 一、Python数据类型--字典 1.访问字典里的值 2.修改字典 3.删除字典元素 4.字典键的特性 二、Python内置函数--字典相关 一、Python数据类型--字典 字典是另一种可变容器模型,且可存储任意类型对象。 字典的每个键值 key>value 对用冒号 : 分割&#…

Tesla EDI 项目数据库方案开源介绍

近期为了帮助广大用户更好地使用 EDI 系统,我们根据以往的项目实施经验,将成熟的 EDI 项目进行开源。用户安装好知行之桥EDI系统之后,只需要下载我们整理好的示例代码,并放置在知行之桥指定的工作区中,即可开始使用。 …

Centos下 ffmpeg Unknown encoder ‘libx264‘终极解决方法

目录 背景 原因分析 解决问题 1. 确认提前安装了X264以及相关依赖。

数据结构的三要素

1 三要素之逻辑结构:数据元素之间的逻辑关系 集合:各个元素同属同一集合,别无其他关系,比如全世界500强公司 线性结构:数据元素是一对一的关系,除了第一个元素,其他元素都有唯一前驱&#xff…

设计模式学习之工厂方法模式

设计模式系列往期文章 设计模式学习之策略模式设计模式学习之策略模式在前端的应用设计模式学习之简单工厂模式 在上一篇文章中我们学习了简单工厂模式——这是工厂模式中最简单的一种模式,通过工厂类提供的方法创建类(可以类比为产品)&…

【区块链 | GameFi】 - 传统游戏进军链游GameFi的探索之路

撰文:W Labs Kluxury,Cplus 【原文链接】 本文要点: 一,什么游戏类型最适合改为链游? 除了链游特有的质押挖矿型和纯 NFT 型,其余的类型都和传统游戏类型高度重合。所以不存在绝对的什么类型可以链改而什么类型不能链改的结论。 开发者立场上看,符合如下几个特性的游…

机器学习之LDA算法

目录 LDA算法 LDA目标 LDA原理推导 LDA除法模型 LDA减法模型 LDA除法正则模型 LDA减法正则模型 证明:StSwSb LDA算法流程 LDA优点 LDA缺点 基于LDA的人脸识别 LDA算法 线性判别分析(linear discriminant analysis,LDA&#xff0…

chatgpt赋能python:Python编码转换:理解不同的编码方式

Python编码转换:理解不同的编码方式 Python是一种功能强大的编程语言,它广泛用于各种领域,包括Web开发、数据分析、人工智能等等。与其他编程语言类似,Python也需要进行编码转换以处理不同的字符集和文本编码。 本文将介绍Pytho…

Spark Local环境搭建及测试

🥇🥇【大数据学习记录篇】-持续更新中~🥇🥇 篇一:Linux系统下配置java环境 篇二:hadoop伪分布式搭建(超详细) 篇三:hadoop完全分布式集群搭建(超详细&#xf…

TypeScript ~ TS 面向对象编程 ⑧

作者 : SYFStrive 博客首页 : HomePage 📜: TypeScript ~ TS 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &…

6. Redis缓存设计与性能优化

分布式缓存技术Redis 1. 多级缓存架构2. 缓存设计2.1 缓存穿透2.2 缓存失效(击穿)2.3 缓存雪崩2.4 热点缓存key重建优化2.5 缓存与数据库双写不一致 3. 开发规范与性能优化3.1 键值设计3.1.1 key名设计3.1.2 value设计 3.2 命令使用3.3 三、客户端使用 4. 系统内核参数优化 本文…

3-2 Named tensors

这里有一张图像img_t 彩色图像可以看作一个矩阵,只是矩阵中的每一个点不是一个值,而是包含3个值的数组,这3个值就是RGB值 我们给它随机化为一个形状为 [3, 5, 5] 的三维张量img_t img_t torch.randn(3, 5, 5) # shape [channels, rows, co…

数据库是如何工作的

数据库是如何工作的 注: 本文翻译自db_tutorial. 数据库计算机世界的一个基础软件,要想深入了解数据库,就不得不思考如下几个问题: 数据以什么格式保存?(在内存和磁盘上)它何时从内存移动到磁…

永磁同步电机的矢量控制PMSM仿真(matlab仿真与图像处理系列第一期)

永磁同步电机(Permanent Magnet Synchronous Motor, PMSM) PMSM具有高效率、高功率密度和快速响应等特点,在现代工业中得到了广泛应用。而矢量控制是一种广泛应用于永磁同步电机的高精度控制方法,它能够实现永磁同步电机的快速、准确、稳定的运行。 矢量控制 矢量控制的…

Android自定义View合集

文章目录 自定义QQ步数QQ计步效果分析自定义View分析的常用步骤自定义属性获取自定义属性画外圆弧画内圆画文字增加动画让其动起来 自定义评分控件RatingBar自定义评分View效果分析自定义属性获取自定义属性重写onMeasure()方法画出对应数量的星星触摸事件处理 自定义酷狗侧滑菜…

Ubuntu设置无线wifi的静态IP

安装 net-tools sudo apt install net-tools 输入ifconfig查看当前网络ip地址&#xff1a; pulsarpulsar:~$ ifconfig docker0: flags4099<UP,BROADCAST,MULTICAST> mtu 1500inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255ether 02:42:02:8c:87:a…

Linux下使用Mysql数据库忘记密码问题解决

​ 方法1查看初始化密码进行登录&#xff1a; 查看mysql的初始密码 在rootlocalhost后面的就是mysql初始的密码&#xff0c;以上图为例 初始密码则为&#xff1a;ukehBfivW1 方法2直接跳过数据库密码验证&#xff1a; 1、用vi指令进入mysql配置文件/etc/my.cnf并修改 在最后…

jmeter的web接口测试

目录 前言&#xff1a; 一、安装Jmeter 二、添加HTTP接口测试 三、添加新的POST请求 四、添加断言 前言&#xff1a; 使用JMeter进行Web接口测试是一种常见的应用场景。 一、安装Jmeter 二、添加HTTP接口测试 我们的所以工具都会在Jmeter工具中完成&#xff0c;接来就…

python爬虫之Scrapy框架--测试调试--保存数据

目录 ScrapyShell 启动ScrapyShell 基本方法 注意 保存数据到文件 方法一 使用python原生方式保存 方法二 使用Scrapy内置方式 方法三 Item Pipeline的使用 功能 ScrapyShell ScrapyShell是Scrapy框架提供的一个交互式的开发工具&#xff0c;用于调试和测试爬虫&…