PLA: 语言驱动的开放词汇3D场景理解

论文:https://arxiv.org/abs/2211.16312

GitHub - CVMI-Lab/PLA: (CVPR 2023) PLA: Language-Driven Open-Vocabulary 3D Scene Understanding代码:GitHub - CVMI-Lab/PLA: (CVPR 2023) PLA: Language-Driven Open-Vocabulary 3D Scene Understanding

摘要

开放词汇场景理解旨在定位和识别标注标签空间之外的未见类别。最近二维开放词汇感知的突破很大程度上是由具有丰富词汇概念的互联网级配对图像文本数据驱动的。然而,由于大规模3D文本对的不可访问性,这种成功不能直接转移到3D场景中。为此,我们建议通过为3D多视图图像添加字幕来提取预训练视觉语言(VL)基础模型中编码的知识,从而明确地将3D和语义丰富的字幕关联起来。此外,为了从字幕中促进从粗到精的视觉语义表示学习,我们设计了分层的3D字幕对,利用3D场景和多视图图像之间的几何约束。最后,通过采用对比学习,该模型学习连接3D和文本的语言感知嵌入,以完成开放词汇任务。我们的方法不仅在开放词汇语义和实例分割方面显著优于基准方法25.8% ~ 44.7%的hIoU和14.5% ~ 50.4%的hAP50,而且在具有挑战性的零采样域转移任务上表现出稳健的可转移性。

Q:怎么添加字幕以及联系3d图像和文本对,是否不通过对比学习就是正常的过程

背景

挑战

模型能理解人类标签但是无法理解开放世界。以往的视觉语言模型尽管极大地推进了开放词汇图像理解任务,但由于缺乏大规模的3D文本对,这种预训练范式在3D领域并不直接可行。为此,最初的努力[51,20]试图将3D数据投影到2D模式中,如RGB图像和深度图,使预训练的VL基础模型能够处理2D数据并实现对象级开放词汇识别。

主要问题:
1)需要多个RGB图像和深度图来表示一个3D样本,这在训练和推理过程中会产生大量的计算和内存成本。

2)其次,从3D到2D的投影会导致信息丢失,不利于从丰富的3D数据中直接学习,表现不佳

我们的初步研究表明,尖端的2D开放词汇语义分割方法MaskCLIP[52]在用于分析3D ScanNet数据集的投影2D图像时,仅获得了17.8%的mIoU,延迟增加了20倍。

3D图像和文本结合

我们利用预先训练的VL基础模型[1,40]用于描述与3D数据对齐的容易获得的图像数据(即在相应的截锥上产生图像的点集)

请注意,这些图像可以通过神经渲染(neural rendering)[9,47]或从3D数据收集管道(3D data collection pipeline)[7]获得。通过这样做,我们可以将富含语义的文本描述提取到3D领域,从而允许3D和富含词汇的文本之间的显式关联,以实现zero-shot3D场景的理解。

*3D数据收集管道(3D Data Collection Pipeline): 3D数据收集管道是一系列流程和技术,用于捕获和创建现实世界中的三维数据。这些数据可以包括三维模型、点云数据、纹理、深度图等,用于构建虚拟环境或进行计算机图形学研究。

该管道通常包括以下步骤:

1) 传感器采集: 使用不同类型的传感器,如RGB相机、深度传感器(例如Kinect)、激光扫描仪等,来捕获现实世界中的物体和场景。

2) 数据预处理: 对从传感器获得的数据进行清洗、校准和对齐,以确保数据的准确性和一致性。 重建与建模: 使用点云重建、三维建模等技术,将采集到的数据转换为数字化的三维模型。这可能涉及将点云转换为多边形网格、创建纹理映射等。

3)数据融合: 将不同传感器采集的数据融合在一起,以获得更完整和精确的三维表示。 优化和后处理: 对生成的数据进行进一步处理和优化,以提高质量并消除不完美之处。

*神经渲染(Neural Rendering): 神经渲染是一种利用神经网络技术来生成高质量的图像或视频序列的渲染方法。传统的渲染技术通常依赖于光线追踪和物理模型,而神经渲染则利用深度学习模型来预测像素的颜色值,从而在生成图像时具有更高的灵活性和效率。 神经渲染可以应用于许多领域,其中之一就是计算机图形学中的图像合成。例如,在3D数据收集管道中获得的三维模型和纹理数据可以输入到神经渲染模型中,以生成高质量的合成图像。神经渲染的一个重要应用是生成逼真的虚拟现实(VR)或增强现实(AR)场景,其中用户可以与虚拟对象进行交互,并感受到逼真的视觉效果。 因此,3D数据收集管道和神经渲染在数字化内容创作、虚拟现实等领域密切合作,前者用于捕获和创建三维数据,后者用于将这些数据转化为高质量的图像或视频序列。

使3D网络能够从(伪)字幕(caption)中学习语言感知嵌入

难点:很难将物体与标题中相应的单词联系起来

幸运的是,来自3D场景的字幕多视图图像是由3D几何图形关联的,可以利用它来构建分层的点标题对,包括场景级、视图级和实体级字幕。

这些多层次的点标题对提供了从粗到精的监督信号,有助于通过对比学习从丰富的词汇中学习足够的视觉语义表示。没有特定于任务的设计,我们的点语言关联范式(Point-Language Association paradigm,即PLA)适用于各种开放词汇的3D场景理解任务,如语义和实例分割。

ScanNet[7]和S3IDS[2]数据集的实验结果表明,我们的方法在只有类别转移的域内开放词汇任务中是有效的,即在同一数据集上进行训练和评估,在语义分割上超过了25.8% ~ 44.7%的hIoU,在实例分割上超过了14.5% ~ 50.4%的hAP50。此外,我们的模型在一个数据集(即Scan- Net)上训练,可以推广到另一个数据集(即S3IDS),同时具有数据分布和类别转移,表明其可转移性。最后,我们的模型可以从更高级的基础模型中受益,这些基础模型提供了更高质量的标题监督,显示了它的可扩展性

相关工作

3D scene understanding 3D场景理解

着重于从点云中理解物体和周围环境的语义。

任务:

三维语义分割

目的是获得点云的逐点语义预测。

代表性作品开发了基于点的解决方案[33,19],使用精心设计的点卷积操作[38,43]或变压器[24]或基于体素的方法[13,6],使用3D稀疏卷积[14]来产生逐点分割结果。

三维实例分割

进一步的目标是基于语义分割区分不同的对象实例。
现有的方法要么采用自顶向下的解决方案:
[46,45]通过预测3D边界框,然后进行掩码细化,或者通过分组点进行自下而上的方法[23,39]。

然而,现有的方法不能识别开集新类别

妈耶,以前完全没接触过感觉又要学一堆了

zero-shot和开放词汇理解

旨在识别训练数据中未标注的新类。

早期的方法主要遵循zero-shot设置,可以粗略地分为判别方法[41,3]和生成方法[4,16]。3DGenZ[28]将[4]扩展到3D场景,用于零镜头语义分割。
除了zero-shot学习之外,更普遍的开放词汇设置假设在训练期间可以访问大量词汇库[50]。

2D开放词汇学习

要么利用大量带注释的图像-文本对为扩大词汇量提供弱监督[50,54],要么利用来自大规模图像-标题对的预训练VL模型,如CLIP[34],来解决开放词汇识别问题,其中研究了知识蒸馏[36,15,49]和提示学习[12,11]。

3D开放词汇学习

还处于起步阶段,只有少量的探索集中在对象分类方面[51,20]。

原有工作试图将物体级3D点云投影到多视图2D图像和深度图上,采用预训练的VL模型生成开放词汇表预测,然而,如果应用于3D场景理解任务,计算量大,性能差。在这项工作中,我们提出了一个语言驱动的3D开放词汇表框架,该框架利用多视图图像和VL基础模型直接将3D与文本描述联系起来。它可以广泛应用于各种场景理解任务,并且在训练和推理中只使用3D网络是有效的。

注意:

1)3D点云数据(Point Cloud Data)和我们平时医疗MRI中3D体数据(Volumetric Data)是不同的!

三维体数据是基于体素(Voxel)的表示方法,类似于像素在二维图像中的作用。每个体素可以看作是三维空间中的一个小立方体单元,类似于一个像素点。三维体数据通常表示成一个三维的数组,每个数组元素存储了相应位置的属性或数值。在医学图像中,例如 CT 扫描或 MRI,体数据可以表示不同组织的密度或强度值。在计算机图形学和计算机视觉中,三维体数据常用于表示物体的形状、结构和属性。

点云数据是一组离散的三维点,每个点都包含了其在三维空间中的坐标以及可能的其他属性,如颜色、法向量等。点云可以看作是无数个离散的点在三维空间中的集合,它可以直接从传感器(例如激光雷达、深度相机)中获取,也可以通过三维重建算法从多个视角的图像中生成。点云数据常用于三维重建、环境感知、机器人导航等领域。

方法

Preliminary 准备工作

输入:p

输出:Lsem,Lloc

3D开放词汇场景理解的目的是在没有相应的人工注释监督的情况下,对未见的类别进行定位和识别。在形式上,语义和实例级别Y = {ysem, yins}上的注释分为基本(basic)的CB和未见过(novel)的的CN类别。

在训练阶段,3D模型可以访问所有点云P = {P},但只能访问基类YB的注释,不知道新类CN的注释YN和类别名称。

在推理过程中,三维模型需要对对象进行定位,并对属于基本类别和新的类别CB∪CN的点进行分类。

对于典型的场景理解网络,它由3D编码器F3D、密集语义分类头Fsem和实例定位头Floc组成

详情)。它的推理过程如下所示↓   其中p为输入点云,f p为逐点视觉特征(point-wise visual
feature)
,s为语义评分(semantic score),z为实例建议输出(instance proposal output),σ为softmax函数。

 有了这些网络预测,我们就可以用语义标签system计算语义分类损失Lsem,用实例标签yins计算本地化损失Lloc,类似于↓。注意,system和yins只与基本类别CB相关

Text-Embedded Semantic Classifier 文本嵌入语义分类器

虽然我们可以在Eq.(2)↑中训练一个带有损失函数的场景理解模型,但它实际上是一个带有close-set分类器Fsem的close-set模型,无法识别看不见的类别。在这方面,我们引入文本嵌入语义分类器来获得开放词汇模型,并提出了一个二元校准模块来纠正开放词汇推理中对基本类别的偏差

Text-Embedded Semantic Classifier

首先,如图2所示,为了使模型成为开放词汇学习者,我们将其可学习的语义分类器Fsem替换为类别嵌入f l可学习的视觉语言适配器f θ,以匹配3D特征f p与f l之间的维度,如下图所示↓

其中,f v为使用VL适配器Fθ的投影特征,fl = [fl1, fl2,···,flk]为使用BERT[10]或CLIP[34]等Frozen文本编码器Ftext对类别名称C进行编码得到的一系列类别嵌入(见图2)。

 通过计算投影点特征f v与类别f l之间的余弦相似度来进行预测,然后选择最相似的类别。

注意,在训练过程中,f只包含属于基本类别CB的嵌入,但是在开放词汇推断过程中,同时使用与基本类和新类CB∪CN相关的嵌入使用类别嵌入作为分类器,该模型可以支持任何所需类别的开放词汇推理。上述设计一般遵循LSeg[26],命名为LSeg- 3d作为基准。

  

Semantic Calibration with Binary Head 

虽然该模型已经具备了开放词汇表的能力,但我们的经验发现,它几乎不能对新类做出任何正确的预测,而是将其误认为基类

由于模型只被训练来识别基本类别,因此不可避免地会产生对基本类别过于自信的预测,而不考虑其正确性,也称为校准问题(calibration problem)[17]。

为此,我们提出了一个二元校准模块,以一个点属于基本类或新类的概率来校正语义分数s。

具体来说,利用binary head Fb来区分标注(即base)和未标注(即novel)的点。在训练过程中,Fb被优化为 ↓ 式中,BCELoss(·,·)为二值交叉熵损失,yb为binary label;,sb为预测binary score,表示点属于新类别的概率

 在推理阶段,我们利用二值概率sb来纠正过度自信的语义分数s,如下所示↓  其中sB是仅在基类上计算的语义分数,新类分数设置为零。类似地,仅对新类计算sN,将基类分数设置为零

我们的经验表明,概率校准在很大程度上提高了基本类别和新类别的性能,表明我们的设计有效地纠正了过度自信的语义预测。

Image-Bridged Point-Language Association  图像桥接 点-语言关联

我们通过采用文本嵌入分类器和二元语义校正模块,得到具有开放词汇能力的深度模型。

然而,它在新类别上的表现非常接近于随机猜测,如表5所示。

 最近开放词汇工作在2D视觉community的成功[26,36,15]表明了引入语言监督来引导视觉主干的有效性。语言监督不仅可以使视觉主干获得丰富的语义概念和大词汇量,还可以帮助将视觉和语言特征映射到一个共同的空间中,以方便多模态的下游任务。然而,互联网规模的成对点文本数据并不像社交媒体上的图像文本数据那样容易获得,这在很大程度上阻碍了语言驱动的3D理解的发展。

为了解决这一挑战,我们提出了PLA,这是一个图像桥接的点语言关联模块,可以在没有人工注释的情况下为3D场景感知提供语言监督(见图2和图3)

我们的核心思想是使用3D场景的多视图图像作为访问VL基础模型中编码的知识的桥梁。如图3所示,文本描述首先由以3D场景图像为输入的强大image-captioning模型生成,然后利用图像与3D场景之间的投影矩阵与3D场景中的一组点关联。我们详细阐述了我们的标题过程以及设计的分层点标题关联,如下所示。

Caption Multi-View Images

由于图像字幕是VL研究领域的一项基础任务[18],因此可以使用大量样本训练的各种基础模型[40,1,30]来解决该任务。

具体来说,以第i个场景第j张图像vij为输入,预训练的image-captioning模型G可以生成其对应的语言描述tv ij,如下所示↓ 令人惊讶的是,虽然G没有在3D场景理解数据集上进行专门的训练,但生成的标题中的实体已经覆盖了流行的3D场景理解数据集ScanNet的整个语义标签空间[7]。此外,标题t对房间类型、具有颜色和纹理属性的语义类别,甚至空间关系都提供了相当准确和全面的描述(参见图3中的语言监督示例和supl中的更多示例)。

Associate Point Cloud with Language

给定图像标题对,下一步是将点集p连接到语言t,以图像v作为桥接,如下所示:

 本文提出了三种不同空间尺度点集的关联模式。

(这里再放一遍图)

Scene-Level Point-Caption Association

最简单和最粗略的关联方式是将语言监督与给定3D点云场景中的所有点连接起来(?),如图3所示,我们取给定场景pj的所有2D图像字幕t vij,通过文本摘要器[25]Gsum得到场景级字幕tsj,如下所示:

其中nj为场景pj的图像个数。通过强迫每个场景p从对应的场景描述中学习,引入丰富的词汇和视觉语义关系,提高三维网络的语言理解能力

尽管场景级标题很简单,但我们从经验上发现它可以大大提高模型的开放词汇能力(参见第5节)。

View-Level Point-Caption Association

场景级标题虽然有效,但仅为场景中的所有点提供单个标题,忽略了语言与局部3D点云的关系,使其不适合场景理解任务。

在这方面,我们进一步提出了一种视点级配图关联,它利用图像和点之间的几何关系,为每个图像配文tv分配给定图像v的三维视锥(frustum)ˆpv内的一个点集(见图3中的蓝框)。

具体来说,为了获得视点集,我们首先使用深度信息d将RGB图像v反投影到3D空间,得到其对应的点集¨p:

 式中[·|·]为分块矩阵(?),T∈R3×4为投影矩阵,由相机固有矩阵和由传感器配置或成熟SLAM方法获得的刚性变换组成[8](?)

由于后投影点¨p和3D场景p中的点可能只是部分重叠,因此我们计算它们的重叠区域,得到视图级点集¨pv如下:

其中V和V−1分别为体素化和反体素化过程,R为基于半径的最近邻搜索[53]。这种基于视图的关联使得模型能够使用区域级别的语言描述进行学习,这在很大程度上增强了模型对未知类别的识别和定位能力。

Entity-Level Point-Caption Association

尽管viewlevel title已经可以将每个图像标题tv与3D场景中的具体局部点集关联起来,但这种关联仍然构建在具有多个语义对象/类别的大型3D区域(即大约25K个点)上,这不利于3D网络从标题监督中学习细粒度的逐点语义属性和实例位置信息。

在这方面,我们进一步提出了一种细粒度的点语言关联,它具有构建实体级点标题对的潜力,即带有标题的对象实例。

具体而言,我们利用相邻视图级点集的差异和交集ˆpv,以及它们对应的视图标题tv,来获得实体级关联点。首先,我们计算实体级配文te如下↓  式中,E表示从标题tv中提取一组实体词w, \和∩分别表示集合差和交集,Concate表示将所有带空格的词串联起来,形成一个实体级标题te。(?)

同样,我们可以很容易地计算出实体级点集,并将其与之前获得的实体级标题关联起来,形成点-标题对,如下所示:

对于实体级〈^pe, te〉对,我们进一步过滤它们以确保每个实体级点集〈pe至少与一个实体相关,并集中在一个足够小的3D空间上,如下所示

 其中γ是定义最小点数的标量,δ是控制最大尺寸的比率,caption te不为空。这样的约束有助于专注于细粒度的3D空间,每个标题监督中的实体更少

Comparison Among Different Point-Caption Association Manners

上述三种由粗到精的点标题关联方式实际上各有优缺点。

如表1所示,

场景级关联实现最简单,但获得的标题和点之间的对应关系最粗略(即每个标题对应超过140K个点);

视图级关联在更精细的层面上提供点-语言映射关系,享受更大的语义标签空间(即超过20倍的标题)和更本地化的点集(即每个标题的对应点减少约6倍)。

实体级关联具有最细粒度的对应关系,每个标题平均只匹配4K个点,从而进一步有利于下游任务的密集预测和实例定位。(感觉医学图像只能视图级和实例级)

我们的经验表明,细粒度关联和语义丰富的标签空间是开放词汇感知任务的两个重要因素(见第5节)。

Contrastive Point-Language Training

使用所得的点标题对〈p, t〉,我们准备引导3D网络F3D从富含词汇的语言监督中学习。在这里,我们介绍了一种通用的点语言特征对比学习,它可以应用于各种粗到细的点-标题对。

具体来说,我们首先使用预训练的文本编码器Ftext获得caption嵌入。对于关联的部分点集^p,我们从自适应特征f v中选择其对应的逐点特征,利用全局平均池化得到其特征向量f ^p,如下所示:

 然后,我们采用对比损失[50]将对应的点说明特征嵌入拉得更近,并推离不相关的点说明特征,如下所示↓ 其中nt是任意给定关联方式下的点标题对的数量,τ是一个可学习的温度,用于将logits调节为CLIP[34]。同样值得注意的是,我们在批量中删除了重复的caption,以避免对比学习过程中的噪声优化。

通过Eq.(17)和Eq.(18),我们可以很容易地计算场景级Ls cap、视图级Lv cap和实体级Le cap上的caption损失。我们最终的标题损失是如下加权组合:

其中α1、α2、α3为权衡因子。如图2,整体训练目标可写成

感觉这个真的用的好多🤔

实验

数据集

ScanNet[7]在20个类中密集注释,S3DIS[2]在语义和实例分割任务上都有13个类。

评估指标

我们分别采用广泛采用的平均交联(mIoU)和50% IoU阈值下的平均精度(mAP50)作为语义分割和实例分割的评估指标。这些指标分别在基本类和新类上标为B和N(例如mIoUB)的基础上计算。此外,我们将谐波平均IoU (hIoU)和AP50 (hAP50)作为流行的zero-shot学习工作[41,44]的主要指标,以考虑基础类别和新类别之间的划分。

架构和Baseline

我们采用流行的高性能稀疏卷积UNet[13, 6]作为3D编码器F3D, CLIP的文本编码器Ftext,两个全连接的批处理归一化层[21]和ReLU[31]作为VL适配器Fθ,一个UNet解码器作为二进制头Fb。此外,我们还利用最先进的实例分割网络SoftGroup[39]作为实例head Fins。

对于基线方法,除了上文3.2.1节中的LSeg-3D之外,我们还重新制作了两种3Dzero-shot学习方法3DGenZ[28]和3DTZSL[5],并进行了任务化修改。实现细节在supply中提供。

实验结果

 

Zero-shot 域迁移

我们的方法在解决具有类别转换的领域内开放词汇场景理解任务方面已经显示出了很好的潜力。然而,跨不同领域/数据集的可转移开放词汇学习器也值得探索,因为它们面临类别和数据分布的变化。在这方面,我们进行了零射击域转移实验,在ScanNet的基类上训练模型,并在没有微调的情况下在所有S3DIS类上进行测试。值得注意的是,S3DIS有4个在ScanNet中不存在的类别。如表4所示,我们的PLA在语义分割方面持续优于LSeg- 3D [26] 7.7% ~ 18.3% mIoU,在实例分割方面优于5.0% ~ 9.5% mAP50。这种显著的改进证实了我们的模型在类别转移和数据分布转移方面的通用性。注意,我们在这里没有使用二进制头进行域传输,因为基本/新分区是特定于数据集的。我们将域外开放词汇场景下的校准基础和新语义预测留给未来的工作

消融实验

我们通过深入的消融研究来检查我们框架的关键组成部分。实验默认在ScanNet B15/N4分区上进行。默认设置用灰色标记。

组件分析

当我们组合不同类型的caption时,模型并不总是在所有场景中获得改进,这可能是由于在某些任务上难以同时优化不同粒度的多个标题损失。

 

Caption成分分析

由于标题可以组合实体(如沙发)、实体之间的关系(如空间关系)和属性(如颜色和纹理),我们研究了哪些类型的词主要有助于开放词汇能力。

文本编码器选择

 

定性分析

 

词汇外类识别的定性结果。(a)论证识别同义类的结果。(b)为抽象概念的分割结果。(c)为数据集中未标注类别的分割结果。↑ 

Synonymical Novel Classes.

在这里,我们用相关但新的单词替换类名来进行推理。如图S9 (a)所示,当我们将“sofa”替换为“couch”或将“refrigerator”替换为“freezer”时,模型仍然可以获得高质量的分割掩码。这表明我们的模型在识别同义概念方面具有鲁棒性。

Abstract Novel Classes.

除了对象实体,我们发现该模型能够理解更多抽象概念,如房间类型。如图S9 (b)所示,通过去掉输入类别中的“浴帘”、“马桶”、“水槽”、“浴缸”,加入“浴室”,预测的“浴室”大致覆盖了真实的浴室区域。正确的例子表明,该模型还可以理解“厨房”区域。这表明我们的模型能够识别超出具体语义对象的词汇外和抽象概念

Unannotated Novel Classes

由于标注成本过高,目前的3D数据集无法对所有的类进行注释,我们的模型拥有识别那些没有注释的类的高质量预测的潜力,促进开放世界的应用。如图S9 (c)所示,该模型使用准确的掩码成功识别了数据集注释中未包含的“monitor”和“blackboard”。

附录看不动了,下次一定.jpg

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

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

相关文章

【LeetCode-中等题】49. 字母异位词分组

题目 题解一:排序哈希表 思路:由于互为字母异位词的两个字符串包含的字母相同,因此对两个字符串分别进行排序之后得到的字符串一定是相同的,故可以将排序之后的字符串作为哈希表的键。 核心api: //将字符串转换为字符数组char[] ch str.toCharArray();…

「UG/NX」Block UI 指定点SpecifyPoint

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

攻防世界-simple_php

原题 解题思路 flag被分成了两个部分:flag2,flag2。获得flag1需要满足变量a0且变量a≠0,这看起来不能实现,但实际上当变量a的值是字符时,与数字比较会发生强制类型转换,所以a为字符型数据即可,变…

C语言小练习(一)

🌞 “人生是用来体验的,不是用来绎示完美的,接受迟钝和平庸,允许出错,允许自己偶尔断电,带着遗憾,拼命绽放,这是与自己达成和解的唯一办法。放下焦虑,和不完美的自己和解…

【k8s、云原生】基于metrics-server弹性伸缩

第四阶段 时 间:2023年8月18日 参加人:全班人员 内 容: 基于metrics-server弹性伸缩 目录 一、Kubernetes部署方式 (一)minikube (二)二进制包 (三)Kubeadm 二…

算法与数据结构-哈希算法

文章目录 什么是哈希算法哈希算法的应用安全加密唯一标识数据校验散列函数负载均衡数据分片分布式存储 一致性哈希算法 什么是哈希算法 哈希算法的定义和原理非常简单,基本上一句话就可以概括了。将任意长度的二进制值串映射为固定长度的二进制值串,这个…

QT使用QML实现地图绘制虚线

QML提供了MapPolyline用于在地图上绘制线段,该线段是实线,因此我使用Canvas自定义绘制的方式在地图上绘制线段,如图: 鼠标在地图上点击后,在点击位置添加图标 ,当有多个图标被添加到地图上后,计…

windows vscode使用opencv

1.windows vscode使用opencv 参考:https://blog.csdn.net/zhaiax672/article/details/88971248 https://zhuanlan.zhihu.com/p/402378383 https://blog.csdn.net/weixin_39488566/article/details/121297536 g -g .\hello_opencv.cpp -stdc14 -I E:\C-software\…

关于查看处理端口号和进程[linux]

查看端口号 lsof -i:端口号如果-bash: lsof: 未找到命令那我们可以执行yum install lsof 删除端口号进程 一般我们都会使用kill命令 kill -l#列出所有可用信号1 (HUP):重新加载进程。9 (KILL):杀死一个进程。15 (TERM):正常停止一个进程。 …

听GPT 讲Prometheus源代码--discovery

Prometheus是一个开源的系统监控和警报工具包,以下是Prometheus源代码中一些主要的文件夹及其作用: cmd/:这个目录包含了Prometheus主要的命令行工具,如prometheus/,promtool/等。每个子目录都代表一个可执行的命令行应…

ajax-axios-url-form-serialize 插件

AJAX AJAX 概念 1.什么是 AJAX ? mdn 使用浏览器的 XMLHttpRequest 对象 与服务器通信 浏览器网页中,使用 AJAX技术(XHR对象)发起获取省份列表数据的请求,服务器代码响应准备好的省份列表数据给前端,前端拿到数据数…

PCTA 认证考试高分通过经验分享

作者: msx-yzu 原文来源: https://tidb.net/blog/0b343c9f 序言 我在2023年8月10日,参加了 PingCAP 认证 TiDB 数据库专员 V6 考试 ,并以 90分 的成绩通过考试。 考试总分是100分,超过60分就算通过考试。试卷…

Dubbo 核心概念和架构

以上是 Dubbo 的工作原理图,从抽象架构上分为两层:服务治理抽象控制面 和 Dubbo 数据面 。 服务治理控制面。服务治理控制面不是特指如注册中心类的单个具体组件,而是对 Dubbo 治理体系的抽象表达。控制面包含协调服务发现的注册中心、流量管…

区块链碎碎念

现在的区块链早已过了跑马圈地的时代,现在还按照以前承接项目的方式做区块链只能是越来越艰难。经过几年的技术沉淀,做区块链项目的公司都已经没落的七七八八了。 区块链不是一个能够快速显现盈利能力的行业,相反这个行业目前的模式还是处于…

算法通关村第十关 | 快速排序

1.快速排序的基本过程 快速排序是分治法运用到排序问题的典型例子,基本思想是:通过一个标记pivot元素将n个元素的序列划分为左右两个子序列left和right,其中left中的元素都比pivot小,right的都比pivot的大,然后再次对l…

mybatis入门的环境搭建及快速完成CRUD(增删改查)

又是爱代码的一天 一、MyBatis的介绍 ( 1 ) 背景 MyBatis 的背景可以追溯到 2002 年,当时 Clinton Begin 开发了一个名为 iBATIS 的持久化框架。iBATIS 的目标是简化 JDBC 编程,提供一种更直观、易用的方式来处理数据库操作。 在传统的 JDBC 编程中&…

arm:day4

1. 实现三盏灯的点亮 .text .global _start_start: led1初始化函数LED_INIT: 1 通过RCC_AHB4_ENSETR寄存器&#xff0c;设置GPIOE F组控制器使能 0x50000A28[5:4]1ldr r0,0X50000A28ldr r1,[r0]orr r1,r1,#(0X3<<4)str r1,[r0] 2.1 通过GPIOE_MODER寄存器&#xff0c;…

Jmeter生成可视化的HTML测试报告

Jmeter也是可以生成测试报告的。 性能测试工具Jmeter由于其体积小、使用方便、学习成本低等原因&#xff0c;在现在的性能测试过程中&#xff0c;使用率越来越高&#xff0c;但其本身也有一定的缺点&#xff0c;比如提供的测试结果可视化做的很一般。 不过从3.0版本开始&…

微信小程序胶囊位置计算,避开胶囊位置

由于小程序在不同的手机上顶部布局会发生变化&#xff0c;不能正确避开胶囊位置&#xff0c;所以通过官方给出的胶囊信息&#xff0c;可以计算出胶囊位置&#xff0c;并避开 图示例&#xff1a; 此处思路是&#xff0c;获取胶囊底部位置&#xff0c;并拉开10个px 计算出来的…

vue实现穿梭框,ctrl多选,shift多选

效果图 代码 <template><div class"container"><!--左侧--><div><div class"title">{{ titles[0] }}</div><div class"layerContainer"><div v-for"item in leftLayerArray":key"…