【论文阅读】ViTAE:Vision transformer advanced by exploring intrinsic inductive bias

news2024/7/6 18:18:17

ViTAE:Vision transformer advanced by exploring intrinsic inductive bias

    • 论文地址
    • 摘要:
    • 简介:
    • 3 方法论
      • 3.1 重温视觉变压器
      • 3.2 ViTAE
      • 3.3 缩减单元
      • 3.4 Normal cell
      • 3.5 模型细节
    • 4 训练
      • 4.1 Implementation details
      • 4.2 Comparison with the state-of-the-art
    • 5 局限性与讨论
    • 6 总结

论文地址

1、论文地址
2、论文源码地址

摘要:

Transformer 在各种计算机视觉任务中显示出巨大的潜力,因为它们使用自注意力机制对远程依赖进行建模的强大能力。然而,视觉变换器将图像视为一维视觉标记序列,在建模局部视觉结构和处理尺度方差时缺乏内在的归纳偏差 (IB)。或者,他们需要大规模的训练数据和更长的训练计划来隐式学习 IB。在本文中,我们提出了一种新的 Vision Transformer Advanced by Exploring intrinsic IB from convolutions,即 ViTAE。从技术上讲,ViTAE 有几个空间金字塔缩减模块,通过使用具有不同扩张率的多个卷积对输入图像进行下采样并将其嵌入到具有丰富的多尺度上下文的标记中。通过这种方式,它获得了一个内在的尺度不变性 IB,并且能够为各种尺度的对象学习鲁棒的特征表示。此外,在每个转换器层中,ViTAE 都有一个与多头自注意力模块并行的卷积块,其特征被融合并馈入前馈网络。因此,它具有内在的局部性 IB,并且能够协同学习局部特征和全局依赖性。在 ImageNet 和下游任务上的实验证明了 ViTAE 优于基线转换器和并发工作。源代码和预训练模型将在代码处提供。

简介:

变形金刚[79, 17, 40, 14, 46, 61]在NLP研究中显示出支配趋势,因为它们在通过自我注意机制建模长期依赖方面具有很强的能力[67,81,51]。变形器的这种成功和良好特性激发了许多将它们应用于各种计算机视觉任务的工作[19,100,97,80,7]。其中,ViT [19] 是开创性的纯变压器模型,它将图像嵌入到一系列可视令牌中,并使用堆叠的变压器块对它们之间的全局依赖关系进行建模。尽管它在图像分类方面取得了可喜的表现,但它需要大规模的训练数据和更长的训练计划。一个重要原因是ViT在建模局部视觉结构(例如,边缘和角落)和处理各种尺度的对象(如卷积)时缺乏内在的归纳偏差(IB)。或者,ViT 必须从大规模数据中隐式地学习这种 IB。

与视觉转换器不同,卷积神经网络 (CNN) 自然地配备了尺度不变性和局部性的内在 IB,并且仍然作为视觉任务中的普遍骨干 [26, 70 , 62, 8, 96]。 CNN 的成功激励我们探索视觉转换器中的内在 IB。我们首先分析 CNN 的上述两个 IB,即局部性和尺度不变性。计算相邻像素之间局部相关性的卷积擅长提取边缘和角点等局部特征。因此,CNN 可以在浅层 [94] 提供丰富的低级特征,然后通过大量顺序卷积 [32、68、71] 逐渐将这些特征聚合成高级特征。此外,CNN 具有层次结构,可以在不同层提取多尺度特征 [68、38、26]。此外,层内卷积还可以通过改变内核大小和膨胀率来学习不同尺度的特征[25、70、8、45、96]。因此,可以通过层内或层间特征融合获得尺度不变的特征表示。然而,CNN 不太适合模拟长程依赖性 2,而这是 transformer 的主要优势。一个有趣的问题出现了:我们能否利用 CNN 的良好特性来改进视觉转换器?最近,DeiT [76] 探索了将知识从 CNN 提取到 Transformer 以促进训练和提高性能的想法。但是,它需要一个现成的 CNN 模型作为老师,并且会消耗额外的训练成本。

与 DeiT 不同的是,我们通过重新设计本文中的网络结构,将内在 IB 显式引入视觉转换器。当前的视觉转换器总是获得具有单尺度上下文的标记 [19、93、80、86、47、69、77],并学习适应来自数据的不同尺度的对象。例如,T2T-ViT [93] 通过以软分割方式巧妙地生成令牌来改进 ViT。具体来说,它使用一系列 Tokens-to-Token 转换层来聚合单尺度相邻上下文信息,并逐步将图像结构化为 tokens。受 CNN 在处理尺度方差方面的成功启发,我们探索了变压器中的类似设计,即具有不同感受野的层内卷积 [70、91],以将多尺度上下文嵌入到标记中。这样的设计允许令牌携带对象在各种尺度上的有用特征,从而自然地具有内在的尺度不变性 IB,并明确地促进变换器更有效地从数据中学习尺度不变的特征。另一方面,低级局部特征是生成高级判别特征的基本要素。尽管 transformer 也可以从数据中学习浅层的这些特征,但它们在设计上并不像卷积那样熟练。最近,[89、43、21] 按顺序堆叠卷积层和注意力层,证明局部性是对全局依赖性的合理补偿。但是,这种串行结构在局部建模期间忽略了全局上下文(反之亦然)。为了避免这种困境,我们遵循“分而治之”的思想,建议并行地对局部性和远程依赖性进行建模,然后融合这些特征来解释两者。通过这种方式,我们使 transformers 能够更有效地学习每个块内的局部和远程特征。

从技术上讲,我们提出了一种新的 Vision Transformers Advanced by Exploring Intrinsic Inductive Bias (ViTAE),它是两种基本单元的组合,即还原细胞 (RC) 和正常细胞 (NC)。 RCs 用于对输入图像进行下采样并将其嵌入到具有丰富的多尺度上下文的 token 中,而 NCs 旨在联合建模 token 序列中的局部性和全局依赖性。此外,这两种类型的细胞共享一个简单的基本结构,即并行的注意模块和卷积层,然后是前馈网络(FFN)。值得注意的是,RC 有一个额外的金字塔缩减模块,具有不同扩张率的空洞卷积,以将多尺度上下文嵌入到标记中。按照 [93] 中的设置,我们堆叠三个缩减单元以将空间分辨率降低 1/16,并堆叠一系列 NC 以从数据中学习判别特征。 ViTAE 在数据效率和训练效率(见图 1)以及下游任务的分类准确性和泛化方面优于代表性视觉转换器。

我们的贡献有三方面。
• 首先,我们探索了变压器中两种类型的内在 IB,即尺度不变性和局部性,并证明了该思想在提高变压器特征学习能力方面的有效性。
• 其次,我们基于两个新的还原和正常单元设计了一个名为 ViTAE 的新变压器架构,以内在地结合上述两个 IB。拟议的 ViTAE 将多尺度上下文嵌入到标记中,并学习局部和远程特征有效。
• 第三,ViTAE在分类精度、数据效率、训练效率和下游任务的泛化方面优于代表性视觉变压器。ViTAE 在 ImageNet 上分别实现了 75.3% 和 82.0% 的顶级 1 精度,参数分别为 4.8M 和 23.6M。

3 方法论

3.1 重温视觉变压器

我们首先对视觉变压器进行简要回顾。为了使变压器适应视觉任务,ViT [19] 首先将图像 x ∈ RH×W×C 拆分为还原比为 p 的标记(即 xt ∈ R((H×W)/p2)×D),其中 H、W 和 C 表示高度、宽度和通道尺寸输入图像 D = Cp2 表示令牌维度。然后,在以元素方式添加位置嵌入之前,将额外的类标记连接到可视标记。生成的令牌将馈送到以下转换器层。每个变压器层由多头自注意力模块(MHSA)和前馈网络(FFN)两部分组成。

MHSA多头自我注意通过为每个头部使用不同的投影矩阵来扩展单头自我注意(SHSA)。具体来说,输入标记 xt 首先使用投影矩阵投影到查询 (Q)、键 (K) 和值 (V),即 Q,K,V =xtWQ,xtQK,xtQV,其中 WQ/K/V ∈ RD×D 分别表示查询、键和值的投影矩阵。然后,该 SHSA 模块重复 h 次以制定 MHSA 模块,其中 h 是磁头数。 h个头的输出特征沿着通道维度连接起来,形成MHSA模块的输出。

FFN FFN被放置在MHSA模块之上,并且相同且分别应用于每个令牌。它由两个线性变换组成,中间有一个激活函数。
此外,在 MHSA 和 FFN 之前和旁边分别添加了层归一化 [2] 和快捷方式。
在这里插入图片描述

3.2 ViTAE

ViTAE 的概述架构旨在将 CNN 中的固有 IB 引入视觉转换器。如图 2 所示,ViTAE 由两种类型的细胞组成,即 RC 和 NC。 RC 负责将多尺度上下文和局部信息嵌入到令牌中,而 NC 用于进一步对令牌中的局部性和远程依赖性进行建模。以图像 x ∈ RH ×W ×C 作为输入,使用三个 RC 分别将 x 逐渐下采样 4×、2× 和 2×。因此,RC 的输出标记的大小为 [H/16,W/16,D],其中 D 是标记维度(在我们的实验中为 64)。然后 RC 的输出标记被展平为 RHW/256×D,与类标记连接,并通过正弦波位置编码添加。接下来,令牌被送入以下 NC,这些 NC 保持令牌的长度。最后,使用来自最后一个 NC 的类标记的线性分类层获得预测概率。
在这里插入图片描述

3.3 缩减单元

我们设计了缩减单元,将多尺度上下文和局部信息嵌入到视觉标记中,而不是直接将图像分割和展平为基于线性图像块嵌入层的视觉标记,这引入了内在的尺度不变性和局部性 IB卷积。
从技术上讲,RC 有两个并行分支分别负责建模局部性和远程依赖性,然后是一个用于特征转换的 FFN。
我们将第 i 个 RC 的输入特征表示为 fi ∈ RHi ×Wi ×Di 。第一个 RC 的输入是图像 x。

在全局依赖分支中,fi 首先被送入金字塔缩减模块 (PRM) 以提取多尺度上下文,即
在这里插入图片描述

(2) 其中Convij(·)表示PRM中的第j个卷积层(PRMi(·))。它使用来自对应于第 i 个 RC 的预定义扩张率集 Si 的扩张率 sij。请注意,我们使用步幅卷积从预定义的缩减比率集 R 中按比率 ri 缩减特征的空间维度。conv 特征沿通道维度连接,即 f ms ∈ iR(Wi/p)×(Hi/p) ×(|Si|D),其中|S|表示 S 中扩张率的数量。

然后通过 MHSA 模块 iii 处理 fms 以建模远程依赖性,即
在这里插入图片描述

(3) 其中 Img2Seq(·) 是一个简单的重塑操作,用于将特征图展平为一维序列。

通过这种方式,fig 将多尺度上下文嵌入到每个标记中。此外,我们使用并行卷积模块 (PCM) 将局部上下文嵌入标记中,这些标记与 fig 融合如下:
在这里插入图片描述

(4) 这里,PCMi(·)表示PCM,它由三个堆叠的卷积层和一个Img2Seq(·)操作组成。值得注意的是,并行卷积分支通过使用步长卷积具有与 PRM 相同的空间下采样率。这样,令牌特征可以携带局部和多尺度上下文,这意味着 RC 通过设计获得局部 IB 和尺度不变 IB。融合的标记然后由 FFN 处理,重塑回特征图,并馈送到以下 RC 或 NC,即
在这里插入图片描述

(5) 其中 Seq2Img(·)是一个简单的重塑操作,用于将标记序列重塑回特征图。 F F Ni (·) 表示第 i 个 RC 中的 FFN。在我们的 ViTAE 中,三个 RC 按顺序堆叠以分别逐渐将输入图像的空间维度减少 4×、2× 和 2×。最后一个RC生成的feature maps大小为[H/16, W/16, D],然后被压扁成visual tokens,送入后面的NCs。

3.4 Normal cell

在这里插入图片描述

如图右下部分所示如图 2 所示,除了没有 PRM 外,NC 与还原单元RC具有相似的结构。由于16RCs后feature map的空间尺寸相对较小(1×),NCs中没有必要使用PRM。

给定来自第三个 RC 的 f3,我们首先将它与类标记 tcls 连接起来,然后将它添加到位置编码中以获得后续 NC 的输入标记 t。在这里,为了清楚起见,我们忽略了下标,因为所有 NC 都具有相同的架构,但可学习的权重不同。 tcls 在训练开始时随机初始化,并在推理期间固定。

与 RC 类似,令牌被送入 MHSA 模块,即 tg = MHSA(t)。
同时,它们被重塑为 2D 特征图并输入 PCM,即 tl = Img2Seq(PCM(Seq2Img(t)))。请注意,类标记在 PCM 中被丢弃,因为它与其他视觉标记没有空间连接。为了进一步减少 NC 中的参数,我们在 PCM 中使用组卷积。

MHSA 和 PCM 的特征然后通过逐元素求和融合,即 tlg = tg + tl。
最后,将 tlg 馈入 FFN 得到 NC 的输出特征,即 tnc = F F N (tlg ) + tlg 。
与 ViT [19] 类似,我们对最后一个 NC 生成的类标记应用层归一化,并将其馈送到分类头以获得最终分类结果。

3.5 模型细节

我们在实验中使用了两种ViTAE变体,以公平地比较具有sim-ilar模型大小的其他模型。它们的详细信息总结在第一个RC的表 1.In 中,默认的convo-lution核大小为7×7,跨度为4,膨胀率为S1 = [1, 2, 3, 4]。在以下两个RC中,卷积核大小分别为3×3,步幅为2,膨胀率分别为S2 = [1, 2, 3]和S3 = [1, 2]。由于令牌的空间维度减小,因此无需使用大内核和膨胀率。RC 和 NC 中的 PCM 包括三个卷积层,内核大小为 3 × 3。
在这里插入图片描述

4 训练

4.1 Implementation details

我们在标准 ImageNet [38] 数据集上训练和测试了提议的 ViTAE 模型,该数据集包含约 130 万张图像并涵盖 1k 类。除非明确说明,否则训练期间的图像大小设置为 224 × 224。我们使用 AdamW [48] 优化器与余弦学习速率调度器,并使用与 T2T [93] 完全相同的数据增强策略进行公平比较,涉及训练策略和模型大小。我们使用 512 的批量大小来训练所有模型,并将初始学习率设置为 5e-4。我们的模型结果可以在表 2 中找到,其中所有模型都在 8 个 V100 GPU 上训练了 300 个 epoch。这些模型建立在 PyTorch [57] 和 TIMM [82

4.2 Comparison with the state-of-the-art

我们在表 2 中将我们的 ViTAE 与具有相似模型大小的 CNN 模型和视觉转换器进行了比较。报告了 ImageNet 验证集上的 Top-1/5 准确度和实际 Top-1 准确度。我们将这些方法分为 CNN 模型、具有学习 IB 的视觉转换器和具有引入的固有 IB 的视觉转换器。与 CNN 模型相比,我们的 ViTAE-T 达到了 75.3% 的 Top-1 准确率,优于参数更多的 ResNet-18。 ViTAE 模型的真实 Top-1 精度为 82.9%,与参数比我们多四倍的 ResNet-50 相当。同样,我们的 ViTAE-S 使用 ResNet-101 和 ResNet-152 一半的参数实现了 82.0% 的 Top-1 精度,显示了通过设计从具有相应内在 IB 的特定结构学习局部和远程特征的优越性。
将 ViTAE-T 与 MobileNetV1 [31] 和 MobileNetV2 [65] 进行比较时也可以观察到类似的现象,其中 ViTAE 使用更少的参数获得更好的性能。与根据 NAS [73] 搜索的较大模型相比,我们的 ViTAE-S 在使用 384 × 384 图像作为输入时实现了相似的性能,这进一步显示了具有固有 IB 的视觉转换器的潜力。此外,在转换器中通过学习 IB,ViT 是第一个用于视觉识别的纯 transformer 模型。 DeiT 与 ViT 具有相同的结构,但使用不同的数据增强和训练策略来促进 transformer 的学习。 DeiT⚗ 表示使用现成的 CNN 模型作为教师模型来训练 DeiT,它以知识蒸馏的方式隐式地将 CNN 的固有 IB 引入到 transformer,在 ImageNet 数据集上表现出比 vanilla ViT 更好的性能。令人兴奋的是,我们的 ViTAE-T 参数更少,甚至优于蒸馏模型 DeiT⚗,证明了通过设计在变压器中引入本征 IB 的功效。此外,与其他具有显式固有 IB 的变压器相比,我们的参数较少的 ViTAE 也实现了相当或更好的性能。例如,ViTAE-T 实现了与 LocalVit-T 相当的性能,但参数减少了 1M,证明了所提出的 RC 和 NC 在引入内在 IB 方面的优越性。

5 局限性与讨论

在本文中,我们探索了两种类型的 IB,并通过建议的还原和正常单元将它们合并到变压器中。通过这两个单元的协作,我们的 ViTAE 模型在 ImageNet 上以快速收敛和高数据效率实现了令人印象深刻的性能。然而,由于计算资源的限制,我们没有缩放 ViTAE 模型并在大型数据集上训练它,例如 ImageNet-21K [38] 和 JFT-300M [30]。虽然目前还不清楚,但从以下初步证据来看,我们对其规模属性持乐观态度。如图 2 所示,由于跳跃连接和并行结构,我们的 ViTAE 模型可以看作是互补变换层和卷积层的单元内集成。根据图 3 所示的注意力距离分析,集成特性使 transformer 层和卷积层能够专注于它们擅长的领域,即建模远程依赖性和局部性。因此,ViTAE 很有可能从大规模数据中学习到更好的特征表示。此外,我们在本文中只研究了两个典型的 IB。在未来的研究中可以探索更多种类的 IB,例如构成视点不变性 [64]。

6 总结

在本文中,我们重新设计了变压器模块,
提出了两个基本单元(还原单元和普通单元),
将两种类型的固有电感偏置(IB)集成到变压器中,即局部性和尺度不变性,
从而产生了一种简单而有效的视觉变压器架构ViTAE。

大量实验表明,ViTAE在分类精度、数据效率、训练效率和下游任务的泛化能力等多方面都优于代表性视觉变压器。

我们计划将ViTAE扩展到大型或巨大的模型大小,并在未来的研究中在大型数据集上进行训练。
此外,还将调查其他类型的IB。我们希望这项研究将为以下将内在IB引入视觉转换器以及了解内在和习得IB的影响的研究提供有价值的见解。

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

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

相关文章

选择洗地机需要注意什么?六大选购技巧,亲测有效

这些年,洗地机行业的「卷」,就从来没停过!特别是最近一两年,随随便便升级点啥,都能出个新款!那么,面对种类繁多的洗地机,我们应该怎么去选购呢?今天笔者来给大家讲讲选择…

怎么通过PHP语言实现远程控制棋牌室

怎么通过PHP语言实现远程控制棋牌室呢? 本文描述了使用PHP语言调用HTTP接口,实现控制棋牌室,通过专用的包间控制器,来实现包间内所有电器以及门锁的独立控制。 可选用产品:可根据实际场景需求,选择对应的规…

穷人想要改命,是选择打工还是创业? 2024创业项目小成本!2024轻资产创业!2024风口行业!2024普通人做什么行业赚钱?

今日话题穷人想要改命,是选择打工还是创业? 改命的方式就是跳进水里,忍受呛水,学会游泳,这个过程越年轻实现越好,就像小鹰往山崖下跳,要么学会飞,要么就狠狠的被摔死。打工思维和创…

请编写函数fun,该函数的功能是:实现B=A+A‘,即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main函数中输出。

本文收录于专栏:算法之翼 https://blog.csdn.net/weixin_52908342/category_10943144.html 订阅后本专栏全部文章可见。 本文含有题目的题干、解题思路、解题思路、解题代码、代码解析。本文分别包含C语言、C++、Java、Python四种语言的解法完整代码和详细的解析。 题干 请编…

回归预测 | MATLAB实现BO-BP贝叶斯优化BP神经网络多输入单输出回归预测

回归预测 | MATLAB实现BO-BP贝叶斯优化BP神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现BO-BP贝叶斯优化BP神经网络多输入单输出回归预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 回归预测 | MATLAB实现BO-BP贝叶斯优化BP神经网络多输入单输出回归预测 B…

【论文阅读】互连网络的负载平衡路由算法 (GAL, Globally Adaptive Load-balancing 全局自适应负载平衡)

Globally Adaptive Load-balancing 全局自适应负载平衡 GAL: Globally Adaptive Load-balanced routing 全局自适应负载平衡路由 1. GAL on a ring2. GAL on higher dimensional torus3. 实验性能4. 算法稳定性 Stability总结 References Globally Adaptive Load-balancing 全…

node.js + @elastic/elasticsearch 操作elasticsearch数据库

我这边node.js 使用的是 koa2,elasticsearch是8.11.1版本 官网:https://www.elastic.co/guide/en/elasticsearch/client/javascript-api/current/getting-started-js.html 一、elastic/elasticsearch 连接 elasticsearch数据库 如果elasticsearch没有设…

开发模型???

开发模型??? 一:什么是需求??二:开发模型2.1:软件的生命周期2.1.1:软件生命周期 2.2:常见开发模型2.2.1:瀑布模型2.2.2:螺旋模型2.2.3:增量模型 && 迭代模型 二级目录 一级目录二级目录二级目录二级目录三级目录 一:什么是需求?? 用户需求:通常就是一句话,没有…

网络原理(qq消息发送原理)

1.网络初识 IP地址 概念: IP地址主要⽤于标识⽹络主机、其他⽹络设备(如路由器)的⽹络地址。简单说,IP地址⽤于定位主机的⽹络地址。 就像我们发送快递⼀样,需要知道对⽅的收货地址,快递员才能将包裹送到…

时间序列生成数据,TransformerGAN

简介:这个代码可以用于时间序列修复和生成。使用transformer提取单变量或者多变时间窗口的趋势分布情况。然后使用GAN生成分布类似的时间序列。 此外,还实现了基于prompt的数据生成,比如指定生成某个月份的数据、某半个月的数据、某一个星期的…

Git变更账户、查看账户

1、变更账户 (1)修改当前文件夹用户 git config user.name “新用户名” git config user.email “新邮箱” (2)修改全局git用户 git config - -global user.name “新用户名” git config - -global user.email “新邮箱”…

TensorRT模型压缩

参考链接: https://www.jianshu.com/p/805b76c9d229 https://blog.csdn.net/chenhaogu/article/details/132677778 基本理论 TensorRT是一个高性能的深度学习推理优化器,可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可用于对超大规模数…

(六)几何平均数计算 补充案例 #统计学 #CDA学习打卡

一. 两个案例 1)几何平均数计算:基金年平均增长率计算 在财务、投资和银行业的问题中,几何平均数的应用尤为常见,当你任何时候想确定过去几个连续时期的平均变化率时,都能应用几何平均数。其他通常的应用包括物种总体…

《HCIP-openEuler实验指导手册》1.2Apache主页面配置

知识点 一、配置服务器监听IP及端口 注释主配置文件“监听IP及端口”部分 cd /etc/httpd/conf cp httpd.conf httpd.conf.bak vim httpd.conf可以在普通模式下搜索Listen关键字 :/Listen按n键继续向后搜索 在/etc/httpd/conf.d中新建子配置文件port.conf: tou…

FPGA秋招-笔记整理(3)无符号数、有符号数

参考:Verilog学习笔记——有符号数的乘法和加法 一、无符号数、有符号数 将输入输出全部定义为有符号数 (1)无符号数的读取按照原码进行,有符号数的读取应该按照补码读取,计算规则为去掉符号位后取反、加1在计算数值…

84.柱形图中最大的矩阵

二刷终于能过了. 思路解析: 不愧是hard,第一步就很难想, 对于每一个矩阵,我们要想清楚怎么拿到最大矩阵, 对于每个height[i],我们需要找到left和right,left是i左边第一个小于height[i]的,right是右边第一个小于height[i]的,那么他的最大矩阵就是height[i] * (right-left-…

暗区突围无限测试资格获取教程 暗区突围怎么参加测试教程推荐

《暗区突围:无限》是一款强调极致真实与沉浸感的军事策略游戏,它邀请玩家踏入危机四伏的战场,通过射击、智取与突袭,铺就一条满载财富的道路。在这片未知与挑战并存的土地上,游戏赋予玩家极高的行动自由,旨…

苍穹外卖绕过微信支付

经过以下改动可实现: 1、不用微信支付端口 2、弹出支付成功的界面 3、数据库修改支付成功后的数据 #在OrderServiceImpl.java里加入Autowiredprivate OrderService orderService; #在OrderServiceImpl.java里的payment函数做以下改动 #图片里有,红色为原…

如何从requirements.txt文件中安装pytorch

平时使用requirements.txt文件来安装python的依赖,如下所示: Flask3.0.0 Flask-Cors4.0.0 elastic-transport8.11.0 elasticsearch8.11.1但是如果我们的依赖中包含pytorch依赖,显然是不能简单的通过这个方式来进行的,例如&#x…