PeLK: 大卷积核强势回归,高达101 × 101,提出了外围卷积

paper:https://arxiv.org/pdf/2403.07589

code:暂无

目录

0. 摘要

1. 引言

2. 相关工作

2.1. Large Kernel Convolutional Networks

2.2. Peripheral Vision for Machine Learning

3. 密集卷积优于条纹卷积

4. 参数高效的大核卷积神经网络

4.1. 外围卷积

4.2. 核位置嵌入

4.3. 局部外围卷积

4.4.架构规范

5. 实验


0. 摘要

        近期,一些大卷积核卷积网络以其高效且高性能强势杀回。然而,因为其卷积的平方复杂度,增大卷积核会带来巨大的参数量增长,而急剧增长的的参数量又会带来很多优化问题。由于这个问题,导致最近的CNN 以条纹卷积(即 51 × 5 + 5 × 51)的形式扩展到 51 × 51,而且随着内核大小的持续增长已经开始趋于饱和。在本文中,我们深入研究了这些关键问题,并探索我们是否可以继续扩大内核以获得更高的性能增益。受人类视觉的启发,我们提出了一种类似人类的外围卷积,它通过参数共享有效地减少了超过 90% 的密集网格卷积的参数计数,并设法将内核大小扩大到非常大。我们的外围卷积的行为与人类高度相似,在不损失性能的情况下,将卷积的复杂度从 O(K2) 降低到 O(log K)。在此基础上,我们提出了参数高效的大核网络(PELK)。我们的 PELK 在 ImageNet 分类、ADE20K 上的语义分割和 MS COCO 上的对象检测等各种视觉任务中都优于 Swin、ConvNeXt、RepLKNet 和 SLaK 等现代视觉转换器和 ConvNet 架构。我们首次成功地将 CNN 的内核大小扩展到前所未有的 101 × 101,并展示了一致的改进。

1. 引言

        卷积神经网络 (CNN) 几十年来在机器学习中发挥着关键作用 [17, 20, 21, 39]。然而,近年来,视觉Transformer (ViTs) [6, 13, 25, 46, 51] 极大地挑战了它们的优势。一些工作[36,48]将VITS的强大性能归因于它们的大感受野:受益于自注意力机制,ViT 可以从大空间范围内捕获上下文信息并建模远程依赖关系。受此启发,CNN [12, 24, 26] 的最新进展表明,当配备大内核大小(例如 31 × 31)时,纯 CNN 架构可以在各种视觉任务上的表现与最先进的 ViT 相当甚至更好。

        尽管大核卷积网络表现出强大的性能和吸引人的效率,但存在一个致命的问题:核大小为 K时,其复杂度就是 O(K2)。由于这个问题,直接扩大内核会带来大量的参数。例如,31 × 31 内核的参数比 ResNet [17] 中典型的 3 × 3 对应物的参数大 100 倍,比 ConvNeXt [26] 中使用的 7 × 7 内核的参数大约 20 倍。增殖的参数随后会导致严重的优化问题,使其无用甚至不利于直接扩大内核大小[12,24,26]。为了解决这个问题,RepLKNet[12]重新参数化一个平行于大内核的5×5内核,以弥补优化问题,SLaK[24]妥协使用条纹卷积将复杂度降低到线性,并缩放到51 × 51(即51 × 5 + 5 × 51)。然而,对于下游任务的分辨率(例如,ADE20K 上的 2048 × 512),这仍然是一个有限的交互范围,更重要的是,条纹卷积缺乏密集卷积的范围感知,因此我们推测它可能会破坏模型的空间感知能力。

        在本文中,我们首先在统一的现代框架(即 SLaK [24])下对卷积形式进行了全面剖析。我们凭经验验证了我们的猜想,即密集网格卷积优于条带卷积,在多个内核大小上有一致的改进。这种现象不仅适用于分类任务,而且对下游任务更为明显,表明密集卷积相对于条纹形式的基本优势。然而,如上所述,大密集卷积的平方复杂度导致参数激增,导致模型尺寸迅速增加,优化难度更大,从而阻止了它进一步增大。这就自然引出了一个问题:是否有一种方法可以在减少所需参数的同时保留密集网格卷积的形式。如果是这样,我们是否就可以进一步扩大密集网格卷积以获得更高的性能收益?

        与卷积或自注意力的密集计算不同,人类视觉具有更有效的视觉处理机制,称为外围视觉 [22]。具体来说,人类视觉将整个视野划分为中心区域和外围区域,条件是注视中心的距离,中心区域的光感受器细胞(锥和杆)的数量超过外围区域[40]的100倍。这种生理结构为人类提供了模糊感知的特征:我们有强烈的感知,在中心区域清晰地看到,识别形状和颜色;而在外围区域,视野模糊,分辨率降低,因此我们只能识别抽象的视觉特征,如运动和高级上下文。这种机制使我们能够在视野的一小部分(< 5%)内感知重要的细节,同时最小化剩余部分(> 95%)中不必要的信息,从而促进人脑的高效视觉处理[2,10,11,28,37,38,52,54]。

        受人类视觉和回答上述问题的启发,我们提出了一种新颖的外围卷积,在保持密集计算形式的同时,将卷积的参数复杂度从 O(K2) 降低到 O(log K)。我们的外围卷积由三个设计组成:i) 焦点和模糊机制。我们在卷积核的中心区域保持细粒度参数,并在外围区域使用广泛的参数共享; ii) 增加共享粒度。我们的共享网格以指数级增长的方式增长,这比固定粒度更有效; iii) 内核位置嵌入。我们引入了核位置嵌入来解决由宽范围外围共享以优雅且廉价的方式引起的细节模糊问题。由于我们的外围卷积显着减少了大内核的参数(超过 90%),我们能够设计出性能强的大型密集内核卷积网络。

        基于上述外围卷积,我们提出了参数高效的大核网络(PELK),这是一种新的纯CNN架构,具有有效感受野(ERF)随参数呈指数增长。由精心设计的参数共享机制促进,PELK以非常小的参数成本扩大内核大小,实现了非常大的密集内核(例如,51 × 51, 101 × 101),并有一致的改进。我们的 PELK 在各种视觉任务中实现了最先进的性能,在配备非常大的内核大小时表现出纯 CNN 架构的潜力。

        PELK被证明能够覆盖比以前的大内核范式更大的ERF区域,更有趣的是,我们的分析和消融表明,外围卷积的最佳设计原则与人类视觉有着惊人的相似之处,这表明生物启发的机制可能是设计强大现代网络有希望的候选者。

2. 相关工作

2.1. Large Kernel Convolutional Networks

        从深度学习的早期开始,大核卷积网络可以追溯到一些早期模型[20,42,43]。在 VGG-Net [39] 之后,使用一堆小内核(例如 1 × 1 或 3 × 3)来获得的大感受野已成为过去十年间常见的做法。全局卷积网络 (GCN) [34] 通过使用条纹卷积 (1×M + M×1) 的组合来改进语义分割任务,将内核大小扩大到 15。然而,据报道所提出的方法会损害 ImageNet 的性能。最近,大型内核卷积网络以吸引人的性能返回[12,24,26,47]。ConvMixer [47] 使用 9 × 9 深度卷积来替换 ViT [13] 和 MLP-Mixer [44] 的空间混合器(即自注意力块和全连接块)。ConvNeXt[26]与Swin[25]的设计理念相一致,以探索一个强大的现代CNN架构,配备了7 × 7深度卷积。RepLKNet [12] 通过重新参数化与其平行的小内核(例如 5 × 5)并的性能与 Swin Transformer [25] 相当,令人印象深刻的将内核大小扩展到 31 × 31。我们的工作也受到LargeKernel3D[5]的启发,它将大内核设计引入到3D网络中,并扩展到17 × 17 × 17。相比之下,我们探索了2D通用卷积的极端,在类人模式下扩展到更大的101 × 101。SLaK[24]将分解后的卷积与动态稀疏性相结合,以条纹卷积的形式将核扩展到51×51(例如,51×5+5×51)。然而,随着内核大小的持续增长,它开始饱和。与现有技术不同,我们研究了哪种卷积形式在大型内核设计中更有效。更重要的是,我们探索了非常大的密集内核的设计,并测试了它是否可以带来进一步的收益。

2.2. Peripheral Vision for Machine Learning

        人类视觉具有特殊的视觉处理系统,称为外围视觉[22]。它根据到中央凹的距离将整个视野划分为多个轮廓区域,每个区域都有不同的分辨率粒度进行识别。Rosenholtz[37]的工作讨论了深度重要发现和现有的关于周边视觉的神话,表明了外围视觉对人类在不同任务上的感知比以前认为的更为关键。在此之后,许多研究 [2, 10, 11, 28, 38, 54] 致力于揭示周边视觉机制的基本原理和深度影响。由于周边视觉在人类视觉中起着至关重要的作用,许多开创性的工作[11,14 -16,29,50]挖掘周边视觉与机器视觉(如cnn)之间的联系。[49]引入了一种受生物学启发的机制,以提高神经网络对小扰动的鲁棒性。FoveaTer [19] 使用径向极坐标池化区域将更多的固定/计算资源动态分配给更具挑战性的图像。PerViT [33] 建议将外围位置编码合并到多头自注意力层中,以将视觉场划分为不同的外围区域,表明网络学习感知视觉数据,类似于人类视觉的方式。继续之前的研究,本文探讨了将人类周边视觉与大核卷积网络混合,并引入了一种新的外围卷积来有效地减少密集卷积的参数。

3. 密集卷积优于条纹卷积

        我们首先研究密集网格卷积是否优于条纹卷积。我们采用统一的现代框架 SLaK [24] 进行研究。根据RepLKNet[12],大核卷积比ImageNet分类更能促进下游任务。因此,我们不仅在 ImageNet-1K 上进行评估,还在 ADE20K 上进行评估作为我们的基准。本文采用MegEngine[1]开发的高效大卷积核实现。

        仿照 SLaK [24] ,我们在 ImageNet 上训练所有模型 120 个 epoch 。数据增强、正则化和超参数都采用相同设置。然后我们使用预训练模型作为 ADE20K 上的主干。具体来说,我们使用MMSegmentation[7]实现的UperNet[56]和80K迭代训练计划。我们不使用任何高级技术或自定义算法,因为我们只寻求评估主干。

        SLaK 引入了一个两步方法,用于将内核扩展到51 × 51: 1)将一个大核分解为两个矩形并行核; 2)利用动态稀疏性和扩展更多的宽度。为了彻底分析卷积形式的效果,我们对 w/ 和 w/o 稀疏性进行了实验。默认情况下,我们重新参数化 5 × 5 卷积以简化 SLaK 和 RepLKNet 所采取的优化问题。表 1 的结果表明,无论动态稀疏性如何,密集网格卷积都超过条纹卷积。

        我们进一步在不同的内核大小下探索了卷积形式(即 K×K vs.K×N) 。具体来说,我们将 SLaK 的条形 conv 的较短边固定为 5 作为默认设置 (N=5),然后逐渐将 K 从 51 减少到 7。我们不使用动态稀疏性来完全消融卷积形式。如图 2 所示,密集网格卷积在多个内核大小之间始终优于条带卷积,增益随着内核大小的增加而增加,证明了密集网格大内核卷积的基本优势。

        然而,如第 1 节所述,密集网格卷积的平方复杂度可以带来激增的参数。例如,如图 2 所示,将内核从 7 缩放到 51 只会为条纹 conv 带来大约 7.3 倍的参数,而对于密集 conv 则为 53.1 倍。鉴于人类的周边视觉在外围区域只有少量的光感受器细胞,我们认为密集参数对于外围相互作用不是必需的。受此启发,我们试图通过引入外围视觉机制来降低参数复杂度,同时保留密集计算以保持密集卷积的强大性能。

4. 参数高效的大核卷积神经网络

4.1. 外围卷积

        形式上,标准的 2D 卷积核由一个 4D 向量组成:w \in \mathbb R^{c_{in} \times c_{out} \times k \times k},其中 c_in 代表输入通道,c_out 是输出通道,k 表示空间核维度。我们试图通过空间参数共享用更小的核w_\theta \in \mathbb R^{c_{in} \times c_{out} \times k' \times k'}参数化w,其中0 < k '≤k。首先,我们定义共享网格 S = [s0, s1,..., sk′ -1],其中 Pk′ -1i=0 si = k。根据 S,我们将 k×kposition 划分为 k′ × k′ 区域:对于 a, b = 0, 1,。.., k′ − 1,

通过这种方式,我们可以利用一个小内核来参数化更大的内核,实现空间参数共享。图 1a 描述了这种设计的说明。

        接下来,我们详细阐述了外围卷积的关键设计。我们将 w_θ 的内核半径表示为 r。为了便于理解,这里我们将共享网格重新表述为轴对称形式:S=[\bar{s}_{-r}, \bar {s}_-r+1,...,\bar s_0, \bar s_1,...,\bar s_{r-1}, \bar s_{r}],其中r = (k' -1 ) / 2。

类似于人类的外围视觉,我们的外围卷积的共享网格主要由两个核心设计组成:

        i) 焦点和模糊机制。如图1b所示,我们在卷积核中心区域保持细粒度参数,其中共享网格设置为 1(即不共享)。对于外围区域,我们利用远程参数共享来利用外围视觉的空间冗余。我们在第 5.4 节中证明,中心区域的细粒度至关重要,而外围区域可以在不损失性能的情况下承受广泛的参数共享;

        ii) 指数增加的共享粒度。人类视觉以准指数模式[35]下降。受此启发,我们设计了我们的共享网格以指数级增长的方式增长。这种设计可以优雅地将卷积的参数复杂度从 O(K2) 降低到 O(log K),从而可以进一步扩大密集卷积的内核大小。具体来说,共享网格 S 由下面构成:

其中rc是中心细粒度区域的半径,mis是指数增长的基础,m默认设置为2。

4.2. 核位置嵌入

        尽管所提出的外围卷积有效地减少了密集卷积的参数,但大量的参数共享可能会带来另一个问题:外围区域的局部细节模糊。特别是当内核大小以外围卷积的形式扩展到超过 50 甚至 100 时,当单个参数需要处理 8 × 8 甚至 16 × 16 外围区域时,这种现象会进一步放大。

        为了解决这个问题,我们提出了内核位置嵌入。形式上,给定一组输入特征 X,我们通过核权重的卷积来处理这些特征。我们用trunc normal[53]初始化位置嵌入h \in \mathbb R^{c_{in} \times k \times k}。输出位置 (x, y) 处的卷积过程可以表示为:

其中 Y 是输出。rw 是内核 w 的半径, r_w = (k - 1) / 2.

        如图 3 所示,通过引入内核的位置嵌入,我们可以区分共享区域中的特定位置,从而弥补共享引起的模糊局部细节问题。实际上,这可以看作是向输入特征添加相对位置信息的偏差。值得注意的是,阶段中的所有内核共享相同的位置嵌入 h,因此 h 带来的附加参数可以忽略不计。这种设计以廉价和优雅的方式共享权重来解决位置不敏感问题,特别是对于非常大的内核,例如 51 × 51 和 101 × 101。

4.3. 局部外围卷积

        大内核卷积网络已被证明具有高通道冗余[57],并且非常适合稀疏性[24]。由于我们的外围卷积使我们能够设计更大的密集卷积,具有更强的空间感知能力,我们希望进一步利用大卷积的通道冗余。我们引入了 Inception 风格的设计,其中只有特征图的部分通道将通过卷积处理。我们遵循一个简单的理念:更多的身份映射来利用通道冗余。具体来说,对于输入 X,我们将其沿通道维度分为两组,

其中 g 是卷积分支的通道数,默认情况下设置为 \frac{3}{8} C_{in}。然后将拆分的输入分别输入到外围卷积和恒等映射中,

最后,将两个分支的输出连接起来以恢复原始形状, 

        这种设计可以看作是 Inceptionstyle 结构的一个特例,例如 Inception [41]、Shufflenet [30, 61] 和 InceptionNeXt [57]。他们在并行分支中使用不同的运算符,而我们采用了更简单的理念:只有外围卷积和身份映射。我们凭经验发现,这种设计非常适合具有非常大内核的外围卷积,显着减少了 FLOPs,而不会损失性能。

4.4.架构规范

        基于上述设计和观察,我们现在详细阐述了我们的参数高效大内核网络 (PELK) 的架构。我们主要遵循 ConvNeXt 和 SLaK 来构建具有多个大小的模型。具体来说,PelK 也采用了 4 阶段的框架。我们使用具有 4 × 4 内核和 4 个步幅的卷积层构建词干。小尺寸的块数为 [3, 3, 9, 3],小/基尺寸的块数为 [3, 3, 3, 27, 3]。PELK不同阶段的内核大小默认为[51,49,47,13]。对于 PELK101,内核大小扩大到 [101、69、67、13]。

        默认情况下,我们将中心 5 × 5 区域保持细粒度。对于 PELK-101,我们将中心区域扩大到 7 × 7 以调整增加的内核。在 SLaK 之后,我们还使用动态稀疏性来增强模型容量。所有超参数都设置相同(1.3×宽度,40% 稀疏度)。我们在第 5.4 节中对内核配置进行了彻底的消融。

5. 实验

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

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

相关文章

粒子群算法与优化储能策略python实践

粒子群优化算法&#xff08;Particle Swarm Optimization&#xff0c;简称PSO&#xff09;, 是1995年J. Kennedy博士和R. C. Eberhart博士一起提出的&#xff0c;它是源于对鸟群捕食行为的研究。粒子群优化算法的基本核心是利用群体中的个体对信息的共享从而使得整个群体的运动…

基于 Redis 发布订阅实现服务注册与发现

写在前面 其实很少有公司会使用 Redis 来实现服务注册与发现&#xff0c;通常是ETCD、NACOS、ZOOKEEPER等等&#xff0c;但是也不妨碍我们了解。本文会先介绍 Redis 的发布/订阅模式&#xff0c;接着基于这个模式实现服务注册与发现。 Redis发布订阅流程图&#xff1a; Red…

云备份项目->配置环境

升级gcc到7.3版本 sudo yum install centos-release-scl-rh centos-release-scl sudo yum install devtoolset-7-gcc devtoolset-7-gcc-c source /opt/rh/devtoolset-7/enable echo "source /opt/rh/devtoolset-7/enable" >> ~/.bashrc 安装Jsoncpp库 sud…

MyBatis面试题总结,详细(2024最新)

面试必须要看看 1、MyBatis 中的一级缓存和二级缓存是什么&#xff1f;它们的区别是什么&#xff1f; MyBatis 中的一级缓存是指 SqlSession 对象内部的缓存&#xff0c;它是默认开启的。一级缓存的生命周期是与 SqlSession 对象绑定的&#xff0c;当 SqlSession 关闭时&#…

Linux--进程控制(2)--进程的程序替换(夺舍)

目录 进程的程序替换 0.相关函数 1.先看现象 2.解释原理 3.将代码改成多进程版 4.使用其它的替换函数&#xff0c;并且认识函数参数的含义 5.其它 进程的程序替换 0.相关函数 关于进程替换我们需要了解的6个函数&#xff1a; 函数解释&#xff1a; 这些函数如果调用成功则…

通过filebeat实现对docker服务的通用日志收集

平台 依赖 linux docker docker-compose 或者 docker compose 镜像 docker.elastic.co/beats/filebeat:8.12.2 docker.elastic.co/beats/kibana:8.12.2 docker.elastic.co/beats/elasticsearch:8.12.2 正文 背景 对于有自建机房的公司来说&#xff0c;如果公司的运维技术…

Stable Diffusion使用ControlNet:IP-Adapter实现图片风格迁移

IP-Adapter 全称是 Text Compatible Image Prompt Adapter for Text-to-Image Diffusion Models&#xff08;文本到图像扩散模型的文本兼容图像提示适配器&#xff09;&#xff0c;是腾讯研究院出品的一个新的ControlNet模型&#xff0c;旨在使预训练的文本到图像扩散模型能够生…

【06】JAVASE-数组讲解【从零开始学JAVA】

Java零基础系列课程-JavaSE基础篇 Lecture&#xff1a;波哥 Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。…

最全GPTs使用教程+Prompt预设词教程

使用指南 直接复制使用 可以前往已经添加好Prompt预设的AI系统测试使用&#xff08;可自定义添加使用&#xff09; https://ai.sparkaigf.com 现已支持GPTs 雅思写作考官 我希望你假定自己是雅思写作考官&#xff0c;根据雅思评判标准&#xff0c;按我给你的雅思考题和对应…

从零入门区块链和比特币(第三期)

欢迎来到我的区块链与比特币入门指南&#xff01;如果你对区块链和比特币感兴趣&#xff0c;但不知道从何开始&#xff0c;那么你来对地方了。本博客将为你提供一个简明扼要的介绍&#xff0c;帮助你了解这个领域的基础知识&#xff0c;并引导你进一步探索这个激动人心的领域。…

一些基础知识FK

1. 群体稳定性指数PSI 通过 PSI(Population Stability Index) 指标&#xff0c;可以得到不同样本下&#xff0c;模型在各分数段分布的稳定性。用于衡量两个群体(比如两个时间点、两个子群体等)之间稳定性的指标。通常PSI被用于评估信用风险模型、预测模型等在不同时间点或不同群…

安装配置Maven(idea里面配置)

放在这个路径下&#xff08;如果需要可以免费发给你&#xff0c;dd我就好了&#xff09; D:\IearnSoftware\maven\apache-maven-3.6.1-bin.zip&#xff08;我自己的路径下面&#xff0c;防止忘记&#xff09; 1.首先测试maven在不在&#xff0c;配置对不对 mvn -v 这样就是成…

STM32HAL库++ESP8266+cJSON连接阿里云物联网平台

实验使用资源&#xff1a;正点原子F1 USART1&#xff1a;PA9P、A10&#xff08;串口打印调试&#xff09; USART3&#xff1a;PB10、PB11&#xff08;WiFi模块&#xff09; DHT11&#xff1a;PG11&#xff08;采集数据、上报&#xff09; LED0、1&#xff1a;PB5、PE5&#xff…

【微信小程序调用百度API实现图像识别实战】-前后端加强版

前言&#xff1a;基于前面两篇图像识别项目实战文章进行了改造升级。 第一篇 入门【微信小程序调用百度API实现图像识别功能】----项目实战 第二篇 前后端结合 【微信小程序调用百度API实现图像识别实战】----前后端分离 这一篇主要讲述的是在第二篇的基础上新增意见反馈功能&a…

第72天:漏洞发现-Web框架中间件联动GobyAfrogXrayAwvsVulmap

案例一&#xff1a;某 APP-Web 扫描-常规&联动-Burp&Awvs&Xray Acunetix 一款商业的 Web 漏洞扫描程序&#xff0c;它可以检查 Web 应用程序中的漏洞&#xff0c;如 SQL 注入、跨站脚本攻击、身份验证页上的弱口令长度等。它拥有一个操作方便的图形用户界 面&#…

实验8 NAT配置

实验8 NAT配置 一、 原理描述二、 实验目的三、 实验内容1.实验场景2.实验要求 四、 实验配置五、 实验步骤2.静态NAT配置3.NAT Outbound配置4.NAT Easy-IP配置 一、 原理描述 2019年11月26日&#xff0c;全球43亿个IPv4地址正式耗尽&#xff0c;这意味着没有更多的IPv4地址可…

Taro引入echarts【兼容多端小程序(飞书/微信/支付宝小程序)】

近期接到公司新需求&#xff0c;开发飞书小程序&#xff0c;并且原型中含有大量的图表&#xff0c;本想使用飞书内置图表组件 —— chart-space&#xff0c;但官方表示已经停止维护了&#xff0c;无奈之下&#xff0c;只能另寻他路&#xff0c;于是乎&#xff0c;图表之王&…

【Godot4.2】自定义Todo清单类 - myTodoList

概述 在写myList类的时候&#xff0c;就想到可以写一个类似的Todo清单类。 基础思路 本质还是在内部维护一个数组&#xff0c;在其基础上进行增删改查操作的封装为了方便存储数据&#xff0c;编写一个自定义内置类TodoItem&#xff0c;内部数组就变成了Array[TodoItem]类型的…

【Flutter】GetX

前言 状态管理 / 路由管理 / 依赖管理 这三部分之间存在联系 参考文章 建议看官网文章&#xff0c;很详细 &#xff0c;pub.dev搜索get pub.dev的文档 状态管理文章相关链接 状态管理 案例 实现一个计算器&#xff0c;运用GetX去管理它 构建界面 构建一个计算器界面 …

GateWay具体的使用之全链路跟踪TraceId日志

1.创建全局过滤器&#xff0c;在请求头上带入traceId参数&#xff0c;穿透到下游服务. package com.by.filter;import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.jwt.JWTValidator;…