Symbol as Points: Panoptic Symbol Spotting via Point-based Representation


文章目录

  • Abstract
  • Introduction
  • Related Work
    • Vector Graphics Recognition
    • Panoptic Symbol Spotting
    • Point Cloud Segmentation
  • Method
    • From Symbol to Points
      • Primitive position
      • Primitive feature
    • Panoptic Symbol Spotting via Point-based Representation
      • Backbone
      • Symbol Spotting Head
    • Attention with Connection Module
    • Contrastive Connection Learning
    • KNN Interpolation
    • Training and Inference
  • Experiments
    • Experimental Setting
      • Dataset and Metrics
      • Implementation Details
    • Benchmark Results
      • Semantic symbol spotting
      • Instance Symbol Spotting
      • Panoptic Symbol Spotting
    • Ablation Studies
      • Effects of Techniques
      • KNN Interpolation
      • Architecture Design
  • Conclusion and Future Work

paper
code

Abstract

本文研究的是全光学符号识别问题,即从计算机辅助设计(CAD)图纸中识别和解析可计数物体实例(窗户、门、桌子等)和不可计数物体(墙壁、栏杆等)。现有的方法通常包括将矢量图形光栅化成图像并使用基于图像的方法进行符号识别,或者直接构建图形并使用图形神经网络进行符号识别。在本文中,我们采用了一种不同的方法,将图形原语视为一组局部连接的2D点,并使用点云分割方法来处理它。具体来说,我们利用一个点转换器来提取原始特征,并附加一个类似于mask2former的点阵头来预测最终输出为了更好地利用原语的局部连接信息,增强原语的可分辨性,我们进一步提出了连接模块关注(ACM)和对比连接学习方案(CCL)。最后,我们提出了一种KNN插值机制,用于点状头的mask注意模块,以更好地处理原始mask下采样,这与图像的像素级相比是原始级的。我们的方法名为SymPoint,简单而有效,在FloorPlanCAD数据集上,其PQ和RQ的绝对增幅分别为9.6%和10.4%,优于最近最先进的GAT-CADNet方法。

Introduction

矢量图形(VG)以其任意缩放的能力而闻名,而不会屈服于诸如模糊或细节混叠之类的问题,已成为工业设计中的主要内容。这包括它们在平面设计(Reddy et al., 2021)、2D界面(Carlier et al., 2020)和计算机辅助设计(CAD)(Fan et al., 2021)中的普遍使用。具体地说,CAD绘图,由几何原语(例如:(如弧、圆、折线等),已成为室内设计、室内建筑和房地产开发领域的首选数据表示方法,推动了这些领域更高的精度和创新标准。

符号识别(Rezvanifar et al., 2019;2020年;Fan等,2021;2022年;Zheng et al., 2022)是指从CAD图纸中发现和识别符号,这是检查设计图纸和3D建筑信息建模(BIM)错误的基础任务。由于存在诸如遮挡、聚类、外观变化以及不同类别分布的显着不平衡等障碍,在CAD绘图中发现每个符号(一组图形原语)是一项重大挑战。传统的符号识别通常处理代表可数事物的实例符号(Rezvanifar等人,2019),如桌子、沙发和床。Fan等人(2021)进一步将其扩展到全视符号识别,既可以识别可数实例(例如,一扇门、一扇窗、一张桌子等),也可以识别不可数物体(例如,墙、栏杆等)。

典型方法(Fan et al., 2021;2022)解决全光符号识别任务涉及首先将CAD图纸转换为光栅图形(RG),然后使用强大的基于图像的检测或分割方法对其进行处理(Ren et al., 2015;Sun等人,2019)。另一行先前的作品(Jiang et al., 2021;郑等,2022;Yang等人,2023)放弃栅格过程,直接处理矢量图形,使用图卷积网络进行识别。代替将CAD绘图光栅化到图像或用GCN/GAT对图形原语建模,这在计算上可能是昂贵的,特别是对于大型CAD图形,我们提出了一个新的范例,它有可能产生新的见解,而不仅仅是在性能上提供增量进步。

通过对CAD图纸数据特征的分析,我们可以发现CAD图纸有三个主要特性:1)不规则性和无序性。与光栅图形/图像中的常规像素数组不同,CAD绘图由几何原语(例如:(圆弧、圆、折线等),没有特定的顺序。2).图形基元之间的局部交互。每个图形原语不是孤立的,而是与邻近的原语局部相连,形成一个符号。3)变换下的不变性。每个符号对于某些变换都是不变的。例如,旋转和翻译符号不会改变符号的类别。这些属性几乎与点云相同。因此,我们将CAD绘图视为点集(图形原语),并利用点云分析的方法(Qi等人,2017a;b;Zhao et al., 2021)用于符号识别。

在这项工作中,我们首先将每个图形原语视为具有位置和原语属性(类型,长度等)信息的8维数据点。然后,我们利用点云分析的方法进行图形原语表示学习。与点云不同,这些图形原语是局部连接的。因此,我们提出了对比连接学习机制来利用这些局部连接。最后,我们借用了Mask2Former(Cheng et al., 2021;2022),并构建一个mask注意转换器解码器来执行全光符号识别任务。此外,不像(Cheng et al., 2022)那样使用双线性插值进行mask注意力降采样,由于图形基元的稀疏性可能导致信息丢失,我们提出了KNN插值,它融合了最近的相邻基元,用于mask注意力降采样。我们在FloorPlanCAD数据集上进行了广泛的实验,我们的SymPoint在全光符号识别设置下实现了83.3%的PQ和91.1%的RQ,大大优于最近最先进的GAT-CADNet方法(Zheng et al., 2022)。

Related Work

Vector Graphics Recognition

矢量图形广泛应用于二维CAD设计、城市设计、平面设计、电路设计等领域,便于实现无分辨率的高精度几何建模。考虑到矢量图的广泛应用和重要性,许多工作致力于矢量图的识别任务。Jiang等人(2021)探索了矢量化目标检测,并取得了优于检测方法的精度(Bochkovskiy等人,2020;Lin等人,2017)在栅格图形上工作,同时享受更快的推理时间和更少的训练参数。Shi等人(2022)提出了一个统一的矢量图形识别框架,该框架利用了矢量图形和光栅图形的优点。

Panoptic Symbol Spotting

传统的符号识别通常处理代表可数事物的实例符号(Rezvanifar等人,2019),如桌子、沙发和床。遵循(Kirillov et al., 2019)的思想,Fan et al.(2021)通过识别不可数事物的语义扩展了定义,并将其命名为panoptic symbol spotting。因此,CAD绘图中的所有组件都包含在一个任务中。例如,由一组平行线表示的墙被(Fan et al., 2021)处理得很好,但被(Jiang et al., 2021)作为背景处理;Shi et al., 2022;Nguyen et al., 2009)中的矢量图形识别。同时,(Fan et al., 2021)以矢量图形的形式发布了第一个大规模的真实世界floorplanad数据集。Fan等人(2022)提出了CADTransformer,它修改了现有的视觉transformer(ViT)主干,用于全光符号识别任务。Zheng等人(2022)提出了GAT-CADNet,它将实例符号识别任务表述为子图检测问题,并通过预测邻接矩阵来解决。

Point Cloud Segmentation

点云分割的目的是将点映射到多个同质组中。点云与二维图像不同,二维图像的特征是有序排列的密集像素,而点云是由无序和不规则的点集组成的。这使得直接将图像处理方法应用于点云分割成为一种不切实际的方法。然而,近年来,神经网络的集成显著增强了点云分割在一系列应用中的有效性,包括语义分割(Qi等人,2017a;a;Zhao et al., 2021),实例分割(Ngo et al., 2023;Schult et al., 2023)和全视分割(Zhou et al., 2021;Li et al., 2022;Hong et al., 2021;Xiao et al., 2023)等。

Method

我们的方法放弃了光栅图像或GCN,而支持图形原语的基于点的表示。与基于图像的表示相比,由于原始CAD图纸的稀疏性,它降低了模型的复杂性。在本节中,我们首先描述如何使用CAD图纸的图形原语形成基于点的表示。然后,我们说明了一个基线框架的全光符号定位。最后,我们详细解释了三种关键技术,即关注局部连接、对比连接学习和KNN插值,以使该基线框架更好地处理CAD数据。

From Symbol to Points

给定由一组图形基元{pk}表示的矢量图形,我们将其视为点{pk | (xk , fk)}的集合,每个点都包含基元位置{xk}和基元特征{fk}信息;因此,点集可能是无序和无组织的。

Primitive position

给定一个图形原语,起点和终点的坐标分别为(x1, y1)和(x1, y2)。原始位置xk∈R2定义为:

我们把它的中心作为封闭图形原语(圆、椭圆)的原语位置。如图1a所示。

Primitive feature

我们定义基元特征fk∈R6为:

其中αk为x正轴到xk的顺时针角度,lk为v1到v2的长度,如图1b所示。我们将原语类型tk(直线、圆弧、圆或椭圆)编码为一个单热向量,以弥补段近似的缺失信息。

Panoptic Symbol Spotting via Point-based Representation

基线框架主要由两个部分组成:主干和符号定位头。主干将原始点转换为点特征,而符号识别头通过可学习查询预测符号掩码(Cheng et al., 2021;2022)。图2展示了整个框架。

在将CAD图形转换为原始点后,我们使用主干提取多分辨率特征Fr,并附加符号识别头来识别和识别符号。在此过程中,我们提出了连接模块(ACM)的注意,该模块在backone的第一阶段进行自我注意时利用原始连接信息。随后,我们提出了对比连接学习(CCL)来增强连接原语特征之间的区分能力。最后,我们提出了KNN插值的注意遮罩下采样(AMD),以有效地下采样高分辨率的注意遮罩。

Backbone

我们选择具有对称编码器和解码器的点transformer(Zhao et al., 2021)作为特征提取的骨干,因为它在全光符号识别方面具有良好的泛化能力。主干以原始点为输入,在每个点与相邻点之间进行向量关注,探索局部关系。给定一个点pi和它的邻点M(pi),我们将它们投影到查询特征qi、关键特征kj和值特征vj中,得到向量关注如下:

其中γ作为关系函数,例如减法。ω是一种可学习的权重编码,用于计算注意力向量。⊙是Hadamard积。

Symbol Spotting Head

我们遵循Mask2Former (Cheng et al., 2022),使用来自骨干解码器的分层多分辨率原语特征Fr∈RNr×D作为符号定位预测头部的输入,其中Nr为分辨率r中的特征令牌数,D为特征维数。该头部由L层被屏蔽的注意力模块组成,这些模块逐步从主干中提升低分辨率特征,以产生用于掩码预测的高分辨率逐像素嵌入。掩码关注模块有两个关键组成部分:查询更新和掩码预测。对于每一层1,查询更新涉及到与不同分辨率原语特征Fr交互以更新查询特征。这个过程可以表示为:

其中Xl∈RO×D为查询特征。O是查询特征的数量。Ql = fQ(Xl−1),Kl = fK(Fr)和Vl = fV(Fr)是MLP层投影的查询、键和值特征。Al−1为注意掩码,计算公式为:

式中,v为特征点位置,Ml−1为掩码预测部分预测的掩码。

注意,我们需要对高分辨率的注意力掩码进行下采样,以采用对低分辨率特征的查询更新。在实际应用中,我们利用了主干网解码器的四个粗级原语特征,并进行了从粗到精的查询更新。
在掩码预测过程中,我们使用两个MLP层fY和fM对查询特征进行投影,得到对象掩码Ml∈RO×N0及其对应的类别Yl∈RO×C;其中C为类别编号,N0为点数。流程如下:

最后一层的输出YL和ML是预测结果。

Attention with Connection Module

简单而统一的框架通过提供CAD绘图的新视角(一组点)来奖励出色的泛化能力。与以往的方法相比,可以获得较好的结果。然而,它忽略了CAD图纸中普遍存在的原始连接。正是由于这些联系,分散的、不相关的图形元素才聚集在一起,形成具有特殊语义的符号。为了利用每个原语之间的这些连接,我们提出了注意连接模块(ACM),详细信息如下所示。

如果两个图基元(pi, pj)的端点(vi, vj)之间的最小距离dij低于某一阈值λ,则认为这两个图基元(pi, pj)是相互连接的,其中:

为了保持较低的复杂性,通过随机删除,每个图形原语最多允许K个连接。图3a展示了围绕墙符号的连接构造,灰线是两个原语之间的连接。在实践中,我们设置为1.0px。(Zhao et al., 2021)中的注意机制直接在每个点与其相邻点之间进行局部注意,以探索两者之间的关系。原始注意机制仅与球面区域内相邻点相互作用,如图3b所示。我们的ACM还在注意力期间引入了与局部连接的原始点(粉色点)的相互作用,从本质上扩大了球面区域的半径。请注意,我们通过实验发现,在不考虑原始点的局部连接的情况下,粗略地增加球面区域的半径并不能提高性能。这可能是由于感受野的扩大同时也引入了额外的噪音。具体地说,我们将Eq.(3)中的邻点集M(pi)扩展为A(pi) = M(pi)∪C(pi),其中C(pi) = {pj |dij < λ},得到:

在实际应用中,由于我们无法直接获得主干网中间层各点的连接关系,所以我们将该模块集成到主干网的第一阶段,以取代原有的局部关注,如图2所示。

Contrastive Connection Learning

虽然在计算编码器transformer的注意力时考虑了原语连接的信息,但局部连接的原语可能不属于同一实例,即在考虑原语连接的同时可能引入噪声连接,如图3c所示因此,为了更有效地利用具有类别一致性的连接信息,我们遵循了广泛使用的InfoNCE损失(Oord等人,2018)及其泛化(frost等人,2019;Gutmann & Hyvärinen, 2010)定义对主干最终输出特征的对比学习目标。我们鼓励学习表征与来自同一类别的连接点更相似,与来自不同类别的其他连接点更不同。此外,我们还考虑了相邻点M(pi),得到:

其中fi为pi的主干特征,d(·,·)为距离测量值,τ为对比学习中的温度。我们默认设置τ = 1。

KNN Interpolation

在符号识别头Eq.(4)和Eq.(5)的查询更新过程中,我们需要将高分辨率掩码预测转换为低分辨率,进行注意掩码计算,如图2所示(右图为AMD)。Mask2Former (Cheng et al., 2022)在像素级mask上采用双线性插值进行下采样。然而,CAD图纸的mask是原始级的,直接对其进行双线性插值是不可行的。为此,我们提出了KNN插值,通过融合最近邻点对注意力mask进行降采样。一个简单的操作是最大池化或平均池化。我们使用基于距离的插值。为了简单起见,我们省略了A中的层索引1,

式中,A0和Ar分别为全分辨率注意掩码和r分辨率注意掩码。D(·,·)是距离度量。K(pi)是K个最近邻的集合,在实践中,我们在实验中设置K= 4r。

Training and Inference

在整个训练阶段,我们采用二部匹配和设置预测损失的方法,以最小的匹配代价为预测分配基础真值。全损失函数L可表示为L = λBCELBCE + λdiceLdice + λclsLcls + λCCLLCCL,其中LBCE为二值交叉熵损失(在该掩码的前景和背景上),lice为Dice损失(Deng et al., 2018), Lcls为默认的多类交叉熵损失来监督查询分类,LCCL为对比连接损失。在我们的实验中,我们经验地设置λBCE: λdice: λcls: λCCL = 5:5:2: 8。对于推断,我们简单地使用argmax来确定最终的全景结果。

Experiments

在本节中,我们介绍了在公共CAD绘图数据集FloorPlanCAD上的实验设置和基准测试结果(Fan et al., 2021)。继之前的作品(Fan et al., 2021;郑等,2022;Fan et al., 2022),我们还将我们的方法与典型的基于图像的实例检测进行了比较(Ren et al., 2015;Redmon & Farhadi, 2018;田等人,2019;Zhang等人,2022)。此外,我们还与点云语义分割方法进行了比较(Zhao et al., 2021),进行了广泛的消融研究以验证所提出技术的有效性。此外,我们还验证了我们的方法在floorplanCAD以外的其他数据集上的通用性,详细结果可在附录A中获得。

Experimental Setting

Dataset and Metrics

FloorPlanCAD数据集包含11,602张各种平面图的CAD图纸,带有分段粒度的全景注释,涵盖30个物体和5个物体类。以下(Fan et al., 2021;郑等,2022;Fan等人,2022),我们使用在矢量图形上定义的全光质量(PQ)作为评估全光符号识别性能的主要指标。通过用语义标签l和实例索引z表示图形实体e = (l, z),将PQ定义为分割质量(SQ)和识别质量(RQ)的乘积,表示为

式中,sp = (lp, zp)为预测符号,sg = (lg, zg)为基础真值符号。|T P|、|F P|、|F N|分别为真阳性、假阳性、假阴性。如果某个预测符号找到了一个基础真值符号,则认为它匹配,其中lp = lg, IoU(sp, sg) > 0.5,其中IoU的计算方法为:

Implementation Details

我们用Pytorch实现SymPoint。我们使用双通道的PointT (Zhao et al., 2021)作为主干,并将L = 3层堆栈用于符号定位头。对于数据增强,我们采用旋转、翻转、缩放、移动和混合增强。我们选择AdamW (Loshchilov & Hutter, 2017)作为优化器,默认权重衰减为0.001,初始学习率为0.0001,我们在8个NVIDIA A100 GPU上训练模型1000次,批处理大小为每个GPU 2个。

Benchmark Results

Semantic symbol spotting

我们将我们的方法与点云分割方法(Zhao et al., 2021)和符号识别方法(Fan et al., 2021;2022年;郑等人,2022)。主要测试结果如表1所示,我们的算法在语义符号识别任务上优于以往的所有方法。更重要的是,与GAT-CADNet相比(Zheng et al., 2022),我们实现了1.8% F1的绝对改进。和3.2% wF1。对于点,我们使用3.1节中提出的基于点的表示法将CAD绘图转换为作为输入的点集合。值得注意的是,PointT‡已经取得了与GAT-CADNet相当的结果(Zheng et al., 2022),这证明了所提出的基于点的表示用于CAD符号识别的有效性。

Instance Symbol Spotting

我们将我们的方法与各种图像检测方法进行了比较,包括fastrcnn (Ren et al., 2015)、YOLOv3 (Redmon & Farhadi, 2018)、FCOS和DINO。为了公平的比较,我们对预测的掩码进行后处理,以产生一个用于度量计算的边界框。主要对比结果如表2所示。虽然我们的框架没有被训练输出一个边界框,但它仍然达到了最好的结果。

Panoptic Symbol Spotting

为了验证符号定位头的有效性,我们还设计了一种没有这个头的变体方法,名为PointT‡Cluster,它预测每个图形实体的偏移向量,以收集公共实例质心周围的实例实体,并执行类智能聚类(例如meanshift (Cheng, 1995)),以获得CADTransformer (Fan et al., 2022)中的实例标签。最终结果如表3所示。我们使用300epoch训练的SymPoint的性能大大优于point‡Cluster和最近的SOTA方法GAT-CADNet(Zheng et al., 2022),证明了所提出方法的有效性。我们的方法也受益于更长的训练时间,并实现进一步的性能提高。此外,我们的方法在推理阶段的运行速度比以前的方法快得多。对于基于图像的方法,将矢量图形渲染为图像大约需要1.2s,而我们的方法不需要这个过程。定性结果如图4所示。

Ablation Studies

所有的消融都是在300次训练下进行的

Effects of Techniques

我们在表4a中进行了各种对照实验,以验证提高SymPoint性能的不同技术。这里的基线是指第3.2节中描述的方法。当我们只引入ACM (Attention with Connection Module)时,由于嘈杂的连接,性能会下降一点。但当我们将其与CCL(对比连接学习)相结合时,性能提高到PQ的74.3。注意,单独应用CCL只能略微提高性能。此外,KNN插值显著提高了性能,达到了PQ的77.3。

KNN Interpolation

在表4b中,我们列出了不同的下采样注意掩码方法:1)线性插值,2)KNN平均池化,3)KNN最大池化,4)KNN插值。KNN平均池化和KNN最大池化是指使用最近的K个相邻点的平均值或最大值作为输出,而不是使用Eq.(10)中定义的输出。我们可以看到,所提出的KNN插值达到了最好的性能。

Architecture Design

我们分析了不同的模型架构设计,如主干网通道数和符号识别头的L层是否共享权重的影响。从表4c可以看出,增大符号点头的主干、查询数和特征通道可以进一步提高性能。定位头权值共享不仅节省了模型参数,而且比不权值共享获得了更好的性能。

Conclusion and Future Work

本研究为全光学符号识别提供了一个新的视角。我们将CAD图纸视为点的集合,并利用点云分析的方法来识别符号。我们的方法SymPoint简单而有效,优于以往的工作。一个限制是我们的方法需要很长的训练时间来获得有希望的性能。因此,加速模型收敛是今后工作的重要方向。

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

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

相关文章

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…

[闭源saas选项]Pinecone:为向量数据库而生的实时语义搜索引擎

目录 Pinecone&#xff1a;为向量数据库而生的实时语义搜索引擎 一、什么是 Pinecone&#xff1f; 二、Pinecone 是开源的吗&#xff1f;支持私有化部署吗&#xff1f; 三、为什么需要向量搜索&#xff1f; 四、Pinecone 的核心优势 五、使用 Pinecone 的典型流程 六、在…

【Maniskill】使用Ppo的官方基线训练时出现指标突然“塌陷”的现象

1. 问题描述 1.1 在使用官方代码进行训练的时候“success_once突然掉落到0” 简要说明你在使用官方 examples/baselines/ppo/baselines.sh 脚本训练 PickCube-v1 时&#xff0c;在 early stage&#xff08;如前 50 k 步&#xff09;指标正常、success_once 接近 1&#xff0c;…

本地部署大模型实战:使用AIStarter一键安装Ollama+OpenWeb教程(含最新版本更新指南)

大家好&#xff01;今天给大家带来一个本地部署大模型的详细教程 &#xff0c;主要介绍如何通过 AIStarter 4.0 一键部署 Ollama OpenWeb 的完整流程。如果你还在为在线大模型不稳定、隐私泄露等问题烦恼&#xff0c;那么本地部署 将是一个非常不错的选择&#xff01; 首先&am…

Redis大量key集中过期怎么办

当 Redis 中存在大量 key 在同一时间点集中过期时&#xff0c;可能会导致以下问题&#xff1a; 请求延迟增加&#xff1a;Redis 在处理过期 key 时需要消耗 CPU 资源&#xff0c;如果过期 key 数量庞大&#xff0c;会导致 Redis 实例的 CPU 占用率升高&#xff0c;进而影响其他…

【Linux 学习计划】-- 系统中进程是如何调度的(内核进程调度队列)

目录 回顾进程优先级与进程调度的引入 内核runqueue图例 关于queue[140]前100个位置 | 实时进程与分时进程 遍历需要调度的进程与bitmap的引入 active、expired指针 结语 回顾进程优先级与进程调度的引入 在我们之前的学习中&#xff0c;我们是有学习过进程优先级这个概…

【Spring AI 1.0.0】Spring AI 1.0.0框架快速入门(1)——Chat Client API

Spring AI框架快速入门 一、前言二、前期准备2.1 运行环境2.2 maven配置2.3 api-key申请 三、Chat Client API3.1 导入pom依赖3.2 配置application.properties文件3.3 创建 ChatClient3.3.1 使用自动配置的 ChatClient.Builder3.3.2 使用多个聊天模型 3.4 ChatClient请求3.5 Ch…

微信小程序开发一个自定义组件的详细教程

以下是一个微信小程序自定义组件的详细教程&#xff0c;覆盖开发文档中的核心知识点。我们将以一个包含属性、事件、插槽、生命周期等功能的按钮组件为例进行说明&#xff1a; 一、创建组件 在 components 目录下新建 custom-button 文件夹&#xff0c;包含以下文件&#xff…

模电——第四讲场效应管

定义&#xff1a;具有正向受控作用的半导体器件 分类&#xff1a;MOS&#xff08;绝缘栅&#xff09;场效应管和结性场效应管 区别&#xff1a;场效应管相比于晶体管&#xff0c;输入电阻很大&#xff0c;是单极型器件 MOS场效应管&#xff1a; 特性曲线 利用半导体表面的电…

[蓝桥杯]堆的计数

堆的计数 题目描述 我们知道包含 NN 个元素的堆可以看成是一棵包含 NN 个节点的完全二叉树。 每个节点有一个权值。对于小根堆来说&#xff0c;父节点的权值一定小于其子节点的权值。 假设 NN 个节点的权值分别是 1~NN&#xff0c;你能求出一共有多少种不同的小根堆吗&…

论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving

地址&#xff1a;LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂&#xff0c;正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…

WebRTC中的几个Rtp*Sender

一、问题&#xff1a; webrtc当中有几个比较相似的类&#xff0c;看着都是发送RTP数据包的&#xff0c;分别是&#xff1a;RtpPacketToSend 和RtpSenderVideo还有RtpVideoSender以及RTPSender&#xff0c;这说明什么呢&#xff1f;首先&#xff0c;说明我会很多连词&#xff0…

EFI(x64)简易开发环境

文章目录 1 必须文件2 运行环境3 构建应用 (Visual Studio)4 引用 EDK2 头文件 1 必须文件 EDK2: 可以只拉取仓库本身, 不拉取其子仓库(完整构建才需要) qemu: qemu 以源码发布, QEMU for Windows – Installers (64 bit) 这里有民间构建的安装包 2 运行环境 创建一个 root …

八皇后问题深度解析

八皇后问题深度解析 一、八皇后问题的起源与背景1.1 问题起源1.2 历史发展 二、问题描述与约束条件2.1 问题描述2.2 约束条件 三、算法原理&#xff1a;回溯算法3.1 回溯算法概述3.2 八皇后问题的回溯算法实现思路 四、八皇后问题的多语言实现4.1 Python实现4.2 C实现4.3 Java实…

Cursor 工具项目构建指南: Python 3.8 环境下的 Prompt Rules 约束

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 Cursor 工具项目构建指南: Python 3.8 环境下的 Prompt Rules 约束前言项目简介技术栈…

Java中的阻塞队列

阻塞队列是什么&#xff1f; 一、阻塞队列的核心概念与特性 1.1 阻塞队列是什么&#xff1f; 简单来说&#xff0c;阻塞队列是一种特殊的队列&#xff0c;它具备普通队列先进先出&#xff08;FIFO&#xff09;的特性&#xff0c;同时还支持两个额外的重要操作&#xff1a; 当…

v1.0.1版本更新·2025年5月22日发布-优雅草星云物联网AI智控系统

v1.0.1版本更新2025年5月22日发布-优雅草星云物联网AI智控系统 开源地址 星云智控官网&#xff1a; 优雅草星云物联网AI智控软件-移动端vue: 优雅草星云物联网AI智控软件-移动端vue 星云智控PC端开源&#xff1a; 优雅草星云物联网AI智控软件-PC端vue: 优雅草星云物联网AI…

Java-IO流之转换流详解

Java-IO流之转换流详解 一、转换流概述1.1 什么是转换流1.2 转换流的作用1.3 转换流的位置 二、InputStreamReader详解2.1 基本概念2.2 构造函数2.3 核心方法2.4 使用示例&#xff1a;读取不同编码的文件 三、OutputStreamWriter详解3.1 基本概念3.2 构造函数3.3 核心方法3.4 使…

android lifeCycleOwner生命周期

一 Fragment中 viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) 什么时候执行&#xff1f; 让我分析一下相关问题&#xff1a; 关于 onPause 时的数据更新: viewLifecycleOwner.lifecycleScope.launch {viewLifecycleOwner.repeatOnLifecycle(Lifecycle.Sta…

Liunx进程替换

文章目录 1.进程替换2.替换过程3.替换函数exec3.1命名解释 4.细说6个exe函数execl函数execvexeclp、execvpexecle、execve 1.进程替换 fork&#xff08;&#xff09;函数在创建子进程后&#xff0c;子进程如果想要执行一个新的程序&#xff0c;就可以使用进程的程序替换来完成…