MPViT : Multi-Path Vision Transformer for Dense Prediction

news2024/11/14 10:26:50

MPViT : Multi-Path Vision Transformer for Dense Prediction

  • 一、引言
    • (一)、Vision Transformers for dense predictions
    • (二)、Comparison to Concurrent work
  • 二、实现细节
    • (一)、Multi-Path Vision Transformer
    • (二)、Multi-Scale Patch Embedding
    • (三)、Global-to-Local Feature Interaction
    • (四)、Model Configuration
  • 三、实验
    • (一)、ImageNet Classification
    • (二)、Object Detection and Instance Segmentation
    • (三)、消融实验
  • 四、附录

论文地址: https://arxiv.org/pdf/2112.11010.pdf
code: https://git.io/MPViT

一、引言

密集的计算机视觉任务,如目标检测和分割需要有效的多尺度特征表示来检测或分类不同大小的目标或区域。虽然卷积神经网络(cnn)一直是这类任务的主要架构,但最近引入的Vision Transformer(ViTs)旨在取代它们成为骨干。与cnn类似,vit构建了一个简单的多阶段结构(即,从细到粗),用单尺度的补丁进行多尺度表示。在本研究中,从不同于现有Vision Transformer的视角,探索了多尺度patch嵌入和多路径结构,构建了多路径Vision Transformer(MPViT)。MPViT采用重叠卷积块嵌入的方法,将相同大小(即序列长度)的特征与不同尺度的块同时嵌入。然后,通过多条路径将不同尺度的标记独立地送入Transformer编码器,并聚合生成的特征,从而在同一特征级别上实现细特征和粗特征表示。得益于多样化、多尺度的特征表示,MPViTs从微小(5M)到基本(73M)的缩放,在ImageNet分类、对象检测、实例分割和语义分割方面,始终比最先进的Vision Transformer取得更好的性能。这些广泛的结果表明,MPViT可以作为多种视觉任务的多功能骨干网。
在目标检测和分割等密集预测任务中,在多个尺度上表示特征以区分不同大小的对象或区域是至关重要的。现代CNN骨干在密集预测方面表现出更好的性能,它利用了卷积核级别或特征级别的多个尺度。Inception Network或VoVNet利用同一特征级别的多粒度卷积核,产生不同的感受野进而提高检测性能。HRNet通过在整个卷积层中同时聚合细和粗特征来表示多尺度特征。
尽管CNN模型被广泛用作密度预测的特征提取器,但目前最先进的(SOTA)视觉变形器[17,37,57,58,60,65,67,71]的性能已经超过了CNN。vit变体[17,37,58,60,67,71]关注的是在应用于高分辨率密集预测时如何解决自我注意的二次复杂度,而不太关注构建有效的多尺度表示。例如,继传统的cnn[23,44]之后,最近的Vision Transformer主干[37,58,67,71]使用单一尺度的补丁(即令牌)构建了一个简单的多级结构(如从细到粗结构)。CoaT[65]通过使用协同尺度机制同时表示细和粗特征,允许跨层注意并行进行,从而提高检测性能。然而,协同尺度机制需要大量的计算和内存开销,因为它为基本模型(例如,CoaT-Lite)增加了额外的跨层注意。因此,ViT体系结构的多尺度特征表示仍有改进的空间。
尽管CNN模型被广泛用作密集预测的特征提取器,但目前最先进的(SOTA)Vision Transformer的性能已经超过了CNN。vit变体关注的是在应用于高分辨率密集预测时如何解决自注意的二次复杂度,而不太关注构建有效的多尺度表示。例如,继传统的CNN之后,最近的Vision Transformer主干使用单一尺度的补丁(即令牌)构建了一个简单的多级结构(如从细到粗结构)。CoaT通过使用协同尺度机制同时表示细和粗特征,允许跨层注意并行进行,从而提高检测性能。然而,协同尺度机制需要大量的计算和内存开销,因为它为基本模型(例如,CoaT-Lite)增加了额外的跨层注意。因此,ViT体系结构的多尺度特征表示仍有改进的空间。
这项工作重点是如何有效地表示多尺度的特征与Vision Transformer的密集预测任务。受CNN模型的启发,利用多粒度卷积核用于多个感受野,本文提出了一种Vision Transformer的多尺度贴片嵌入和多路径结构方案,称为多路径Vision Transformer(MPViT)。如下图所示,多尺度贴片嵌入通过重叠卷积操作将不同大小的视觉贴片同时令牌化,适当调整卷积的填充/步幅,得到具有相同序列长度(即特征分辨率)的特征。然后,来自不同尺度的令牌被独立地并行地送入Transformer编码器。每个具有不同大小补丁的Transformer编码器执行全局自注意。然后,生成的特征被聚合,在同一特征级别上实现精细和粗糙特征表示。在特征聚合步骤中,引入了一个全局到局部特征交互(GLI)过程,该过程利用卷积的局部连通性和Transformer的全局上下文,将卷积的局部特征与Transformer的全局特征连接起来。
在这里插入图片描述
综上所述,本文的主要贡献如下:
1、提出了一种多径结构的多尺度嵌入算法,用于同时表示密集预测任务的细、粗特征。
2、引入全局到局部特征交互(GLI)来利用卷积的局部连通性和转换器的全局上下文。
3、提供消融研究和定性分析,分析不同路径尺寸和块规模的影响,发现高效和有效的配置。

(一)、Vision Transformers for dense predictions

目前SOTA Vision Transformer的重点是在应用于高分辨率密集预测时,降低自注意的二次复杂度。有些工作用局部区域的细粒度斑块来限制注意范围,并将其与滑动窗口或稀疏的全局注意相结合。也可以通过减少序列长度利用粗粒度的全局自我注意,通过空间缩减(例如,池化)。通过跨特征通道而不是符号操作自注意来实现线性复杂性。具有从细到粗的简单金字塔结构,XCiT具有与ViT一样的单级结构。当应用于密集的预测任务时,XCiT添加向下/向上采样层,在ImageNet上进行预训练后提取多尺度特征。Xu等人介绍了具有简单金字塔结构的CoaT- lite和在CoaT- lite之上具有跨层注意的CoaT。跨层注意使CoaT的性能优于CoaT- lite,但需要大量的内存和计算开销,这限制了模型的扩展性。

(二)、Comparison to Concurrent work

CrossViT也使用不同的补丁大小(例如,小和大)和单级结构中的双路径,如ViT和XCiT。然而,CrossViT的分支之间的交互只通过令牌进行,而MPViT允许不同规模的所有补丁进行交互。此外,与CrossViT(仅分类)不同,MPViT更广泛地探索更大的路径维度(例如,超过两个),并采用多级结构进行密集预测。

二、实现细节

(一)、Multi-Path Vision Transformer

在这里插入图片描述

如上图显示了多路径Vision Transformer(MPViT)架构。构建了一个四阶段特征层次结构,用于生成不同尺度的特征映射。由于多级体系结构具有更高分辨率的特性,因此必然需要更多的计算。因此,由于整个模型的线性复杂性,使用了包括CoaT中所做的因式自我注意的Transformer编码器。在LeViT中,卷积的stem比非重叠的块嵌入表现出更好的底层表示(即,不丢失显著信息)。受到LeViT的启发,给定一个大小为H × W × 3的输入图像,也采用一个由两个3 × 3卷积层组成的stem块,其中通道为 C 2 / 2 C_2/2 C2/2, C2为步幅为2,生成大小为 H / 4 × W / 4 × C 2 H/4 × W/4 × C_2 H/4×W/4×C2的特征,其中C_2为第2阶段的通道大小。每个卷积之后是Batch Normalization和Hardswish激活函数。从阶段2到阶段5,在每个阶段中堆叠拟议的多尺度补丁嵌入(MS-PatchEmbed)和多路径Transformer(MP-Transformer)块。

(二)、Multi-Scale Patch Embedding

本文设计了一个多尺度的补丁嵌入(MS Patch Embed)层,该层利用了同一特征级别上的细粒度和粗粒度可视标记。为此,使用带有重叠补丁的卷积操作,类似于CNN和CvT。给定来自前一阶段的2d重塑输出特征映射(即令牌映射)作为阶段i的输入:
在这里插入图片描述
我们学习一个函数 F k × k ( ⋅ ) F_{k×k}(·) Fk×k()的map x i x_i xi变成一个新的带有通道尺度 C i C_i Ci的token F k × k 。 ( x i ) F_{k×k}。(x_i) Fk×k(xi)其中F(·)是核大小为k × k, stride为s padding为p的二维卷积运算。输出的2D令牌映射 F k × k ( x i ) ∈ R H i × W i × C i F_{k×k}(x_i)∈ R^{Hi×Wi×Ci} Fk×k(xi)RHi×Wi×Ci有高度和宽度如下:
在这里插入图片描述
卷积补丁嵌入层使我们能够通过改变步幅和填充来调整令牌的序列长度。也就是说,可以用不同的补丁大小输出相同大小(即分辨率)的特征。因此,我们并行地形成了几个具有不同内核大小的卷积补丁嵌入层。例如,如图1所示,可以用3 × 3,5 × 5,7 × 7的patch大小生成序列长度相同的各种大小的视觉标记。
由于在通道和滤波器尺寸相同的情况下叠加连续卷积运算会增大感受野(例如,两个3 × 3等价于5 × 5),所需的参数更少(例如, 2 × 3 2 < 5 2 2 × 3^2 < 5^2 2×32<52),因此在实践中我们选择连续的3 × 3卷积层。对于三路径结构,当降低空间分辨率时,我们使用三个连续的3 × 3卷积,通道大小为 C ′ C^{'} C,填充为1,步幅为s,其中s为2,否则为1。由于MPViT的多路径结构具有更多的嵌入层,我们通过采用3 × 3深度可分离卷积来减少模型参数和计算开销,该卷积由3 × 3深度卷积和嵌入层中的1 × 1点卷积组成。所有卷积层后面都是批处理规范化和Hardswish激活函数。最后,将不同大小的令牌嵌入特征分别送入每个Transformer编码器。

(三)、Global-to-Local Feature Interaction

虽然Transformer中的自注意可以捕捉到长期依赖关系(即全局上下文),但它很可能会忽略每个补丁中的结构信息和局部关系。此外,Transformer受益于形状偏置,允许他们聚焦在图像的重要部分。相反,CNN可以从尺度不变性中利用局部连通性——图像中的每个补丁都用相同的权值处理。这种归纳偏差促使CNN在对视觉对象进行分类时更依赖于纹理而不是形状。因此,MPViT以一种互补的方式将CNN的局部连通性与全局上下文Transformer结合起来。为此,我们引入了一个全局到局部特征交互模块,该模块学习了局部和全局特征之间的交互,以丰富特征表示。具体来说,在第i阶段,代表局部特征的 L i ∈ R H i × W i × C i L_i∈R^{H_i×W_i×C_i} LiRHi×Wi×Ci,我们采用一个深度残差瓶颈块,由1 × 1卷积、3 × 3深度卷积和1 × 1卷积组成,通道大小 C i C_i Ci相同。利用每个Transformer 的 G i , j ∈ R H i × W i × C i G_{i,j}∈R^{H_i×W_i×C_i} Gi,jRHi×Wi×Ci的二维重塑全局特征。局部和全局特征的聚合是通过串联来实现的:
在这里插入图片描述
j是路径的索引, A i ∈ R H i × W i × ( j + 1 ) C i A_i∈R^{H_i×W_i×(j+1)C_i} AiRHi×Wi×(j+1)Ci为聚合特征,H(·)是一个学习与特征交互的函数。产生最后的特征 X i + 1 ∈ R H i × W i × ( j + 1 ) C i + 1 X_{i+1}∈R^{H_i×W_i×(j+1)C_{i+1}} Xi+1RHi×Wi×(j+1)Ci+1带有下一级的维度特征 C i C_i Ci。对于H(·),我们使用通道为 C i + 1 C_{i+1} Ci+1的1 × 1卷积。最后的特征 X i + 1 X_{i+1} Xi+1作为下一阶段多尺度嵌入层的输入。

(四)、Model Configuration

为了减轻多路径结构的计算负担,使用CoaT中提出的高效因子化自注意:
在这里插入图片描述
其中 Q , K , V ∈ R N × C Q, K, V∈R^{N×C} Q,K,VRN×C为线性投影查询,键,值,N, C分别为令牌个数和嵌入维数。为了保持相似的参数和flop,增加路径的数量需要减少通道C或层数L(即Transformer编码器的数量)。L个因子化自注意层,N个令牌和h个Transformer编码器头,总时间复杂度为 O ( L h N C 2 ) O(LhN C^2) O(LhNC2),显存复杂度为 O ( L h C 2 + L h N C ) O(LhC^2 + LhNC) O(LhC2+LhNC)。其复杂度为通道C的二次方,而层数L是线性。因此,从单路径(即,在消融研究中证实,降低C比降低L能获得更好的性能。由于具有较高的特征分辨率,对于三路径模型,阶段2的计算成本相对较高。在第2阶段也将路径数设置为2。因此,从阶段3开始,三路径模型有3条路径。
虽然三路径和双路径在ImageNet分类上的准确率相似,但三路径模型在密集预测任务中表现出更好的性能。这表明扩展路径维的多样化特征对于密集预测任务是有用的。因此,建立了基于三路径结构的MPViT模型。将MPViT模型从对应CoaT-Lite Tiny(5M)或DeiT-Tiny(5.7M)的小尺度MPViT-Tiny (5M)放大到对应SwinBase (88M)的大尺度MPViT- base (74M)。所有MPViT模型使用8个Transformer编码器头,mlp的膨胀为Tiny和其他模型分别设置为2和4。表1描述了MPViTs的详细信息。
在这里插入图片描述

三、实验

(一)、ImageNet Classification

遵循DeiT中和其他基线transformer的训练方式。使用AdamW优化器训练300个周期,批大小为1024,权重衰减为0.05,5个热身周期,初始学习率为0.001,该学习率由余弦衰减学习率调度程序缩放。将每张图像裁剪为224 × 224。随机深度下降只在Small和Base大小模型中使用,我们分别将其速率设置为0.05和0.3。更多详情见附录。在这里插入图片描述

(二)、Object Detection and Instance Segmentation

分别用RetinaNet和Mask R-CNN验证MPViT作为对象检测和实例分割的有效特征提取器。我们在COCO数据集上对模型进行基准测试。我们在ImageNet-1K上预训练主干,并将预训练的主干插入到RetinaNet和Mask R-CNN中。按照常用设置和swing - transformer的训练配方,我们使用多尺度训练策略训练3×(36轮次)的模型。使用AdamW优化器,初始学习率为0.0001,权值衰减为0.05。
在这里插入图片描述

(三)、消融实验

Exploring path dimension
在这里插入图片描述
为了与基线进行公平的比较,不使用stem、随机深度下降路径和第3.3节中介绍的卷积局部特征。对于双路径,在第2阶段,更高的特征分辨率需要更多的计算,因此我们减少层数L(即编码器的数量)。在第5阶段,更高的嵌入维数导致更大的模型尺寸,因此我们也降低了L和嵌入维数C,在第4阶段增加了L。由于多路径导致更高的计算成本,在第3和第4阶段减少C来补偿。因此,表5中的双路径(a)在具有相似的模型大小和略高的FLOPs的情况下,优于单路径。
将双路径扩展为三路径时,我们分别消融了嵌入维数C和层数L。对于表5中(b)的嵌入维数,我们保持C,但降低L,以保持模型尺寸和FLOPs相似,这导致精度低于双路径。反之,当我们降低C并保持L时,©的分类精度与双路算法相似,但检测性能高于双路算法。最后,我们进一步将路径扩展为四路径(d),保留L,减少c。四路径的分类精度接近,但检测性能并不优于©的三路径。这些结果告诉我们三个教训:
(1)层数(即更深)比嵌入维度(即更宽)更重要,这意味着更深更薄的结构在性能上更好。
(2)多粒度标记嵌入和多路径结构可以为目标检测器提供更丰富的特征表示。
(3)在模型尺寸和FLOPs相同的约束下,三路径是最佳选择。
我们注意到,扩展路径维度的策略不会增加内存负担,如表5所示。双路径(a)和三路径(b,c)比单路径占用更少的内存。此外,(a)和(b)比©消耗更多的内存,因为(a)和(b)在阶段3和4有更大的c。这是因为C(二次型)在内存使用中比L(线性)更重要。因此,我们降低嵌入维数和扩展路径维数和层(更深)的策略导致了一个内存高效模型。但是,由于多路径结构导致的总层数的增加降低了推理速度。
Multi-Scale Embedding:
在这里插入图片描述
在上表中,我们研究了patch大小和结构在多尺度嵌入中的影响。使用三个卷积层并行地使用相同的步幅2和分别为3、5和7的补丁大小。即,每个路径嵌入层使用前面的输入特征独立运行。为了提高参数效率,我们还使用三个卷积层串联,其核大小分别为3,步长分别为2,1,1。我们注意到后者具有等效的感受野(例如,3、5、7)。串联版本在减少模型尺寸和flop的同时,比并行版本改进了。直观地说,这种性能提升可能来自于这样一个事实,即系列版本实际上包含具有非线性的小3层CNN,这允许更复杂的表示。
Global-to-Local feature Interaction:
GLI模块中实验了不同的聚合方案,聚合了卷积局部特征和全局变压器特征,测试了两种类型的操作:相加和拼接。如表6所示,求和运算没有显示性能提升,而拼接则显示分类和检测任务都有改进。直观地说,在1×1卷积之前对特征求和会很天真地混合这些特征,而拼接则保留了它们,允许1×1卷积学习特征之间更复杂的相互作用。这一结果表明,GLI模块有效地学习了本地和全局特征之间的交互,以丰富表示。

四、附录

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

C#【必备技能篇】使用GDI绘制进度条的代码实现

文章目录一、使用“用户控件”生成圆环进度条的dll1、使用VS2019新建项目&#xff08;类库&#xff09;2、添加用户控件3 、用户控件PercentStar.cs源码编写二、引用dll&#xff0c;在Winform中代码实现1、新建Windows窗体应用&#xff08;.NET Framework&#xff09;2、添加引…

Java项目:ssm房屋租赁管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为管理员与租户2种角色&#xff1a; 管理员主要功能包括&#xff1a; 登录、查看房源信息、添加房源、查看租赁情况、合同查看、看房申…

皓量科技入选《中国数字营销生态图2022版》4大赛道!

11月28日&#xff0c;由中国商务广告协会数字营销专业委员会、虎啸奖组委会及秒针营销科学院三方合作出版的《中国数字营销生态图2022版》正式发布&#xff08;以下简称生态图&#xff09;。皓量科技凭借多年深耕程序化广告领域的实力与经验&#xff0c;在全行业服务商的征集调…

Codeforces Round #752 (Div. 1) B. Moderate Modular Mode

翻译&#xff1a; 谁有两个偶数&#x1d465;和&#x1d466;。帮助他找到一个整数&#x1d45b;&#xff0c;使1≤&#x1d45b;≤2⋅1018&#xff0c;且&#x1d45b;mod&#x1d465;&#x1d466;mod&#x1d45b;。这里&#xff0c;&#x1d44e;mod&#x1d44f;表示&am…

夯实算法-整数转罗马数字

题目&#xff1a;LeetCodeLeetCode 罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D …

Linux操作系统~匿名管道和命名管道的使用及其原理分析

目录 1.匿名管道 &#xff08;1&#xff09;.匿名管道的原理 &#xff08;2&#xff09;.pipe接口的使用 如果只写不读&#xff08;求管道的大小&#xff09; &#xff08;3&#xff09;.匿名管道五个特点 &#xff08;4&#xff09;.匿名管道的四种情况 3.命名管道 &a…

世界杯之用Java实现随机胜平负

一、本章猜测随机数首先需要用到Scanner语句&#xff0c;对用户需要几组胜平负数量进行猜测&#xff0c;说动用到几组肯定要用到for循环了&#xff0c;还有要实现随机&#xff0c;就需要用到Math方法&#xff0c;进行随机抽取。 1.Scanner 首先使用Scanner语句抓取用户…

MATLAB算法实战应用案例精讲-【工具篇】运筹优化工具OR-TOOLS(补充篇)(附实战案例及代码实现)

前言 本文为【工具篇】运筹优化工具OR-TOOLS(附实战案例及代码实现)的补充篇。 OR-Tools是一个用于优化的开源软件套件,用于解决车辆路径、流程、整数和线性规划以及约束编程等世界上最棘手的问题。同时OR-Tools提供了C++,Python,Java,.NET的接口,同时提供统一接口封装来…

为你揭秘拼购为什么是破产老板手中的最后一根稻草?

拼购&#xff0c;已经成为了电商平台自主传播的一种营销活动&#xff0c;通过拼团可以促成更多的成交量&#xff0c;但拼团也不是这样简单的放在那里就能有客户进来参与&#xff0c;其中还有很多细节上面的地方需要我们好好探究。这个拼购模式和我们之前见过的拼多多拼团、拼购…

什么蓝牙耳机适合realme手机?适合realme手机的高端蓝牙耳机推荐

根据网络调查数据显示&#xff0c;市面上的耳机需求量在不断增加&#xff0c;随着智能手机的普及&#xff0c;耳机作为炙手可热的产品&#xff0c;尤其是网易云、全民K歌&#xff0c;直播的流行&#xff0c;消费者对于耳机的需求不仅仅是听歌了&#xff0c;有线耳机也逐渐被无线…

【Matplotlib绘制图像大全】(五):饼图

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

风靡互联网关键词 Web3.0 | 区块链 | 比特币 | 元宇宙……

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; Web web是互联网的总称&#xff0c;全称为World Wide Web&#xff0c;缩写WWW &#xff0c;即全球广域网&#xff0c;也称为万维网&#xff0c;它是一种基于超文本和H…

007.复原 IP 地址

1.题目链接&#xff1a; 93. 复原 IP 地址 2.解题思路&#xff1a; 2.1.题目要求&#xff1a; 给定一串只包含数字的字符串s&#xff0c;返回所有让 s 构成 有效IP地址 的数字组合。 有IP地址&#xff1a; 4个 [0,255] 范围内的数字 组成&#xff0c;并且整数之间用 " …

绿源:“老大哥”冲刺IPO,新的故事如何讲?

又一家老牌电动两轮车企业“开”向了资本市场。 11月22日&#xff0c;绿源集团控股&#xff08;开曼&#xff09;有限公司&#xff08;以下简称“绿源集团”&#xff09;正式向港交所递交招股说明书&#xff0c;拟主板挂牌上市&#xff0c;中信建设国际担任独家保荐人&#xf…

ctfshow node.js专题

文章目录web334web335web336web337web338web339web340web341web342、web343web334 给了附件&#xff0c;然后进入后发现是一个登录框。 在附件中知道了账号密码&#xff0c;但是却无法登录。 先看user从哪里获取&#xff1a; var user findUser(req.body.username, req.bod…

虹科案例 | 订单自动分拣效率居然这么高?

Background 背景 过去&#xff0c;一家自动仓储和检索系统&#xff08;AS/RS&#xff09;梭子解决方案的制造商依靠车轮编码器来指示梭子沿轨道的位置。虽然这种解决方案已经使用了多年&#xff0c;也将继续使用&#xff0c;但它可能容易出现定位错误&#xff0c;这通常是由车…

[附源码]Python计算机毕业设计SSM考勤管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Kotlin高仿微信-第35篇-支付-二维码收款(二维码)

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点&#xff0c;包括&#xff1a;注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…

【python可视化】python编码规范、标准库与扩展库对象的导入与使用

&#x1f64b;‍ 哈喽大家好&#xff0c;本次是python数据分析、挖掘与可视化专栏第一期 ⭐本期内容&#xff1a;python编码规范、标准库与扩展库对象的导入与使用 &#x1f3c6;系列专栏&#xff1a;Python数据分析、挖掘与可视化 &#x1f44d;欢迎大佬指正&#xff0c;一起学…

嵌入式分享合集115

一、数字万用表电压、电流、电阻、电容、频率、电池、二极管等测量方法 数字万用表可用来测量直流和交流电压、直流和交流电流、电阻、电容、频率、电池、二极管等等。整机电路设计以大规模集成电路双积分A/D转换器为核心&#xff0c;并配以全过程过载保护电路&#xff0c;使之…