【论文解读】CP-SLAM: Collaborative Neural Point-based SLAM System_神经点云协同SLAM系统(上)

目录

1 Abstract

 2 Related Work

2.1 单一智能体视觉SLAM(Single-agent Visual SLAM)

2.2 协同视觉SLAM(Collaborative Visual SLAM)

2.3 神经隐式表示(Neural Implicit Representation)

3 Method

3.1 神经点云里程计(Neural Point based Odometry )

3.2 循环检测和子图对齐 (Loop Detection and Sub-Map Alignment)

 3.3 分布式到集中式学习(Distributed-to-Centralized Learning)

3.4 位姿图优化和全局地图细化(Pose Graph Optimization and Global Map Refinement) 

4 实验

5 结论


论文:CP-SLAM: Collaborative Neural Point-based SLAM System | OpenReview

Thirty-seventh Conference on Neural Information Processing Systems

代码: 尚未公布

aaa0559fff0b404cbfc8f307ec3aa905.png

1 Abstract

        这篇论文介绍了一种基于协同隐式神经网络同步定位与地图构建(SLAM)系统,输为入RGB-D图像序列,系统包括完整的前端和后端模块,包括里程计、循环检测、子地图融合和全局优化。

        为了在一个统一的框架中实现所有这些模块,文章提出了一种新颖的基于神经网络的三维场景表示方法,其中每个点维护一个可学习的神经特征用于场景编码,并与特定的关键帧相关联。

        此外,我们提出了一种分布式到集中式的学习策略,用于协同隐式SLAM,以提高一致性和合作。 还提出了一种新颖的全局优化框架,类似于传统的捆绑调整,以提高系统的准确性。

        在各种数据集上的实验证明了所提方法在相机跟踪和地图构建方面的优越性。

 2 Related Work

2.1 单一智能体视觉SLAM(Single-agent Visual SLAM

        随着无人智能的发展,视觉SLAM在过去几十年中成为一个活跃的领域。Klein等人提出了一个视觉SLAM框架[15],将跟踪和地图制作分为不同的线程。这个框架被大多数当前方法所采用。      

       传统的单一智能体视觉SLAM使用过滤或非线性优化来估计摄像机的姿态。

       基于过滤的方法[27, 3, 23]更具实时性,但全局一致性较差。相比之下,基于优化的方法[28, 29, 31, 4, 8, 19]可以充分利用过去的信息。同时,多源信息被广泛整合到SLAM系统中,以改善特定模块,例如轻量级深度估计[48, 42]。

2.2 协同视觉SLAM(Collaborative Visual SLAM

        协同SLAM可以分为两类:集中式和分布式。

        CVI-SLAM[14]是一个集中式视觉惯性框架,可以在中央服务器上共享所有信息,每个代理外包计算密集型任务。

        在集中式SLAM中,服务器管理所有子地图,执行地图融合和全局捆绑调整,并将处理后的信息反馈给每个代理。这个流程在CCM-SLAM[33]中得以重现,其中每个代理配备一个简单的视觉测距,并将定位和三维点云发送到中央服务器。

        在分布式系统方面,Lajoie等人开发了一个完全分布式的SLAM[18],它基于点对点通信,可以拒绝异常值以提高鲁棒性。NetVLAD[1]在[18]中用于检测环路闭合。此外,[10]提出了专门用于多智能体系统的紧凑二进制描述符。

        与传统的协同系统相比,我们的系统可以使用更少的神经点执行密集映射。

2.3 神经隐式表示(Neural Implicit Representation

        神经隐式场在许多计算机视觉任务中表现出色,如新视角合成[24, 25, 38, 2]、场景完成[5, 11, 30]和对象建模[6, 22, 40, 45, 46]。

        在最近的研究中,一些工作[47, 41]试图从建立的神经隐式场中反向推断相机外部参数。受到神经场不同表示方式的启发,包括体素网格[21]和点云[43],NICE-SLAM[50]和Vox-Fusion[44]选择使用体素网格进行跟踪和制图,而不是使用受表达能力和遗忘问题限制的单一神经网络。它们都是与我们最相关的工作。

        此外,vMAP[16]可以在缺乏3D先验条件下有效地建模密封的对象模型。ESLAM[13]通过三面和截断有符号距离场(TSDF)来解决RGB-D SLAM。除了纯神经网络方法外,一些混合系统,如NeRF-SLAM[32]和Orbeez-SLAM[7],构建了神经地图,但使用传统方法来估计姿态。

3 Method

        我们的协同SLAM系统概述下图所示。给定一组RGB-D序列,系统基于每个代理的神经点云表示,逐步进行跟踪和地图制作。

        我们整合了一个基于学习的循环检测模块,该模块提取2D帧的唯一描述符,并通过高质量的循环约束拼接子地图。

        我们设计了一个两阶段(分布式到集中式)的MLP训练策略,以提高一致性并加强协作。

        为了减少制图和跟踪中的累积误差,我们利用子地图之间的共可见性进行全局位姿图优化作为后端处理,然后进行基于帧的地图精炼。

aaa0559fff0b404cbfc8f307ec3aa905.png

        图1:系统概览。我们的系统以单个或多个RGB-D流作为输入,执行如下的跟踪和地图制作。

        从左到右,我们在神经点场中进行可微分的射线体积渲染,以预测深度和颜色。为了获取沿射线的样本点的特征嵌入,我们在半径为r的球内插值邻居特征。

        MLPs将这些特征嵌入解码为用于体素渲染的有意义的密度和辐射度。通过计算渲染差异损失,可以优化相机运动和神经场。

        在跟踪和地图制作过程中,单一代理不断地将由NetVLAD编码的关键帧描述符发送到描述符池。中央服务器将融合子地图,并根据匹配对执行全局位姿图优化(PGO)以加深协作。

        最后,我们的系统以关键帧为中心进行地图精炼,结束整个工作流程。

3.1 神经点云里程计(Neural Point based Odometry )

        我们的系统从一个前端视觉测距模块开始,其中我们结合了位姿反传递更新和基于点的神经场,以执行顺序跟踪和制图。

        基于点的神经场。我们将图像分为4 × 4的块,并逐步投影每个块的中心像素到其对应的3D位置eq?p%20%5Cin%20%5Cmathbb%7BR%7D%5E3。为了获取锚定在 eq?p 上的特征嵌入eq?f%20%5Cin%20%5Cmathbb%7BR%7D%5E%7B32%7D ,将2D图像输入到一个未经训练的单层卷积神经网络。我们定义我们的神经点云为: 

eq?P%20%3D%20%5C%7Bp_j%2C%20f_j%20%5Cmid%20j%20%3D%201%2C%20%5Cldots%5C%7D%20%5Cquad%20%281%29

        体素渲染。我们模拟 NeRF [26] 中的可微分体素渲染策略,其中辐射度和占用度沿着射线积分,以渲染颜色和深度图。给定一个 6DoF 姿势 eq?%5C%7BR_c%2C%20O_c%5C%7D和一帧的内参,我们可以从随机选择的像素发射射线并采样eq?N_%7Btotal%7D 点。任意采样点被定义为:

eq?x_i%20%3D%20O_c%20+%20t_i%20%5Ccdot%20d%20%5Cquad%20i%20%5Cin%201%20%5Cldots%20N_%7B%5Ctext%7Btotal%7D%7D%20%5Cquad%20%282%29

其中eq?t_i%20%5Cin%20%5Cmathbb%7BR%7D 是点的深度,eq?d%20%5Cin%20%5Cmathbb%7BR%7D%5E3是单位射线方向。

        在深度信息的指导下,我们可以在真实表面附近分布我们的样本。具体而言,我们在每条射线上采样eq?N_%7B%5Ctext%7Btotal%7D%7D%20%3D%20N_%7B%5Ctext%7Bnear%7D%7D%20+%20N_%7B%5Ctext%7Buni%7D%7D个点。

        对于具有有效深度 D的任何像素,eq?t_i在间隔eq?%5B0.95D%2C%201.05D%5Deq?%5B0.95D_%7B%5Ctext%7Bmin%7D%7D%2C%201.05D_%7B%5Ctext%7Bmax%7D%7D%5D内均匀采样,分别生成eq?N_%7B%5Ctext%7Bnear%7D%7Deq?N_%7B%5Ctext%7Buni%7D%7D个样本点,其中eq?D_%7B%5Ctext%7Bmin%7D%7D 和 eq?D_%7B%5Ctext%7Bmax%7D%7D是当前深度图的最小和最大深度值。对于没有有效深度值的任何像素,eq?t_i在间隔 eq?%5BD_l%2C%201.05D_%7B%5Ctext%7Bmax%7D%7D%5D内均匀采样,生成 eq?N_%7B%5Ctext%7Btotal%7D%7D​ 个点。对于每个点eq?x_i​,我们首先在查询半径 r内查询 K 个邻居eq?%5C%7Bp_k%20%5Cmid%20k%20%3D%201%2C%20%5Cldots%2C%20K%5C%7D,然后使用一个 MLP eq?C将原始邻居特征eq?f_k转换为eq?f_%7Bk%2C%20x_i%7D,其中包含相对距离信息,即

eq?f_%7Bk%2Cxi%7D%20%3D%20C%28f_k%2C%20x_i%20-%20p_k%29%20%5Cquad%20%283%29

然后,一个辐射度 MLP eq?U使用插值特征eq?f_%7Bxi%7D​ 解码位置 eq?x_i​ 处的 RGB 辐射度 eq?c,该特征是根据反向距离权重和邻域特征进行加权插值得到的:

eq?f_%7Bx_i%7D%20%3D%20%5Csum%5Climits_%7Bk%7D%5Cfrac%7Bw_k%7D%7B%5Csum%20w_k%7D%7Bf_%7Bk%2Cx_i%7D%7Deq?w_k%20%3D%20%5Cfrac%7B1%7D%7B%5C%7Cp_k%20-%20x_i%5C%7C%7D%20%5Cquad%20%284%29

eq?c%20%3D%20U%28f_%7Bxi%7D%29%20%5Cquad%20%285%29

        如果在 eq?x_i处找不到邻居,那么eq?x_i处的占用度eq?%5Csigma 被设为零。否则,我们使用位于eq?x_i处的占用度 MLP eq?G 进行回归。我们采用类似于辐射度的基于反向距离的加权插值,但这里是在占用度水平进行插值。我们解码每个邻居的 eq?%5Csigma_i并最终进行插值:

eq?%5Csigma_k%20%3D%20G%28f_%7Bk%2Cxi%7D%29%20%5Cquad%20%286%29

eq?%5Csigma%20%3D%20%5Csum%5Climits_%7Bk%7D%20%5Cfrac%20%7Bw_k%7D%20%7B%5Csum_k%20w_k%7D%20%7B%5Csigma_k%7D%20%5Cquad%20%287%29

接下来,我们使用从 MLP 中回归得到的eq?c_%7Bx_i%7D​、eq?%5Csigma_%7Bx_i%7D​ 来估计每个点的权重eq?%5Calpha_%7Bx_i%7D​。eq?%5Calpha_%7Bx_i%7D 被视为eq?x_i处的不透明度,或者说射线在该点终止的概率,eq?z_%7Bx_i%7D是点eq?x_i 的深度。

通过沿着射线计算深度和辐射度期望值,可以渲染深度图和颜色图,如下所示:

eq?%5Chat%7BD%7D%20%3D%20%5Csum%5Climits_%7Bi%3D1%7D%5E%7BN_%7B%5Ctext%7Btotal%7D%7D%7D%20%5Calpha_%7Bxi%7D%20z_%7Bxi%7D%20%5Cquad%2C%20%5Chat%7BI%7D%20%3D%20%5Csum%5Climits_%7Bi%3D1%7D%5E%7BN_%7B%5Ctext%7Btotal%7D%7D%7D%20%5Calpha_%7Bxi%7D%20c_%7Bxi%7D%20%5Cquad%20%288%29

        映射和跟踪。我们在映射过程中使用如下所述的渲染差异损失(Eq. 9),其中包含了几何损失和在映射过程中的光度损失。对于新来的帧,我们采样 M1 个像素来优化点锚定特征eq?f_i​ 以及 MLP eq?C%2C%20U%2C%20G的参数。对于第一帧,我们需要以较高的代价对 M3 个像素进行良好的初始化,并进行约 3000∼5000 步的优化以确保后续处理的平滑进行。对于后续的映射,我们从当前帧和 5 个共视的关键帧中均匀选择像素。我们发现联合映射可以有效稳定跟踪过程。

映射损失(Lmapping)如下:

eq?%5Cmathcal%7BL%7D_%7B%5Ctext%7Bmapping%7D%7D%20%3D%20%5Cfrac%7B1%7D%7BM1%7D%20%5Csum%5Climits_%7Bm%3D1%7D%5E%7BM1%7D%20%5Cleft%7CD_m%20-%20%5Chat%7BD%7D_m%5Cright%7C%20+%20%5Clambda_1%20%5Cleft%7CI_m%20-%20%5Chat%7BI%7D_m%5Cright%7C%20%5Cquad%20%289%29

其中,eq?D_meq?I_m 表示地面真实深度和颜色图,eq?%5Chat%7BD%7D_m​、eq?%5Chat%7BI%7D_m 分别是对应的渲染结果,eq?%5Clambda_1是损失平衡权重。在跟踪过程中,我们通过反向传播进一步优化相机外参eq?%5C%7Bq%2C%20t%5C%7D,同时保持特征和 MLP 不变,其中 eq?q是四元数旋转,eq?t是平移向量。我们在新来的帧上采样 M2 个像素,并假设零运动模型,其中新帧的初始姿势与上一帧相同。考虑到颜色图的强烈非凸性,跟踪损失仅包含几何部分:

eq?%5Cmathcal%7BL%7D_%7B%5Ctext%7Btracking%7D%7D%20%3D%20%5Cfrac%7B1%7D%7BM2%7D%20%5Csum%5Climits_%7Bm%3D1%7D%5E%7BM2%7D%20%5Cleft%7CD_m%20-%20%5Chat%7BD%7D_m%5Cright%7C%20%5Cquad%20%2810%29

3.2 循环检测和子图对齐 (Loop Detection and Sub-Map Alignment)

        为了对齐子图并减小累积的位姿漂移,我们执行循环检测并计算不同子图之间的相对位姿。对于子图中的每个关键帧,我们将其与由预训练的NetVLAD [1]模型生成的描述符相关联。

        我们使用描述符之间的余弦相似度作为循环检测的判断标准。

        当摄像机在帧之间移动太多时,位姿优化容易陷入局部最优解,因此我们使用两个相似性阈值 eq?%5Clambda_%7B%5Ctext%7Bfine%7D%7Deq?%5Clambda_%7B%5Ctext%7Bcoarse%7D%7D来找到具有足够重叠并确保正确的循环相对位姿的匹配对。给定两个子图 M1 和 M2,我们找到具有最大重叠的循环帧集合eq?%5C%7BI%5E%7Bl1%7D%2C%20I%5E%7Bl2%7D%5C%7D,其相似度大于eq?%5Clambda_%7B%5Ctext%7Bfine%7D%7D,并且找到小重叠的循环帧集合eq?%7B%28I_1%5E%7Bs1%7D%2CI_2%5E%7Bs2%7D%29%2C%20...%2C%28I_n%5E%7Bs1%7D%2CI_n%5E%7Bs2%7D%29%7D,其相似度大于 eq?%5Clambda_%7B%5Ctext%7Bcoarse%7D%7D 但小于 eq?%5Clambda_%7B%5Ctext%7Bfine%7D%7D。对于eq?%5C%7BI%5E%7Bl1%7D%2C%20I%5E%7Bl2%7D%5C%7D 这样的匹配对,我们将eq?I%5E%7Bl1%7D的位姿视为初始位姿,将eq?I%5E%7Bl2%7D视为参考帧。可以使用第3.1节描述的跟踪方法获取 {M1, M2} 之间的相对位姿测量。我们可以使用这个相对位姿对子图执行三维刚体变换,使得所有子图都设置在相同的全局坐标系中,实现子图对齐的目的,如下面图2所示:

738e25a781394f2abcb297750dd3d371.png

图2:体素网格限制

(a) 如果初始坐标系统不是均匀的,那么现有的神经SLAM(例如体素网格)在子图融合期间可能会因为不对齐而受到影响。

(b) 神经点云不受3D几何形状的限制,可以自由融合。在子图融合后,我们可以从Agent1(绿色点云)和Agent2(紫色点云)的观测中查询点eq?x_i的邻居。

循环损失eq?%5Cmathcal%7BL%7D_%7B%5Ctext%7Bloop%7D%7D%28T_r%29如下:

eq?%5Cmathcal%7BL%7D_%7B%5Ctext%7Bloop%7D%7D%28T_r%29%20%3D%20%5Cfrac%7B1%7D%7BM_2%7D%20%5Csum%5Climits_%7B%5C%7BI_%7B%5Ctext%7Bl1%7D%7D%2C%20I_%7B%5Ctext%7Bl2%7D%7D%5C%7D%7D%20%5E%7BM_2%7D%20%7CD_m%28T_r%29%20-%20%5Chat%7BD%7D_m%7C%20%5Cquad%20%2811%29

        其中,eq?T_req?M_1​ 和eq?M_2之间的相对位姿,eq?Deq?%5Chat%7BD%7D分别是渲染的深度和地面真实深度。对于小重叠的循环帧集合eq?%5C%7BI_i%5E%7Bs1%7D%2C%20I_i%5E%7Bs2%7D%5C%7D,我们仅使用它们执行位姿图优化(参见3.4)。

        子图融合会导致特定区域的神经点冗余,给计算和内存带来负担。由于神经点云的稀疏性,我们采用基于网格的过滤策略,即根据神经点到 ρ³ 立方体中心的距离执行非极大值抑制。

 3.3 分布式到集中式学习(Distributed-to-Centralized Learning)

       为了增强一致性和协作性能,在协作SLAM中,我们采用了一个两阶段的MLP训练策略。在第一阶段(分布式阶段),每个图像序列被视为一个独立的个体,具有用于顺序跟踪制图的唯一组MLPs  eq?%7BC_j%2C%20U_j%2C%20G_j%7D。在循环检测和子图融合之后,我们希望在所有序列之间共享通用的MLPs(集中式阶段)。

        为此,我们引入了联邦学习机制,该机制以协作共享的方式训练单个网络。同时进行子图融合时,我们对每组MLPs进行平均,并在所有关键帧上微调平均的MLPs以统一离散的领域。随后,我们迭代地将共享的MLPs传递给每个代理进行本地训练,并将本地权重平均作为共享MLPs的最终优化结果,如下面图3所示。

441cec3355a74657b0da4863da53468c.png

  

联邦学习(Federated Learning)是一种机器学习的分布式学习方法,其中模型的训练在本地设备上进行,而不是在集中式服务器上。这种方法允许设备在本地训练模型,然后将更新的权重参数传输回中央服务器,从而使全局模型在所有设备上得以改进。 

联邦学习被用于协作性SLAM系统的两个阶段的训练过程中。在分布式阶段,每个图像序列被视为一个独立的个体,具有本地的MLPs(C,U,G)。在集中式阶段,为了提高一致性和合作,通过联邦学习机制,每个代理将其本地模型参数传输到中央服务器,中央服务器根据所有代理的权重更新来进行全局模型的训练。

这种方法的优势在于它允许在不共享原始数据的情况下进行模型训练,从而保护了用户的隐私。同时,它也有助于全局模型更好地适应整个系统的特性,提高一致性和协作水平。

3.4 位姿图优化和全局地图细化(Pose Graph Optimization and Global Map Refinement) 

        在所有序列的前端处理中,包括跟踪、制图、循环检测和子图融合,我们建立了一个全局位姿图模型,其中每帧的位姿作为节点,顺序相对位姿循环相对位姿(sequential relative pose, and loop relative pose are edges作为边。

        位姿图模型如图4所示。我们在整个位姿图上进行全局位姿图优化,参考传统视觉SLAM,将估计的轨迹强制拉近到地面真实轨迹。

d13bf4a2e7fa4622ba8fc450dc05bb7e.png

        全局位姿图优化有效地减轻了累积误差,并提高了跟踪精度。我们使用Levenberg-Marquardt算法来解决由方程12描述的这个非线性全局位姿图优化问题,其中eq?v是节点的集合,eq?E_s是顺序边的集合,eq?E_l是循环边的集合,eq?%5CLambda_i表示相应边的不确定性。

eq?v%5E*%20%3D%20%5Ctext%7Bargmin%7D_v%20%5Cfrac%7B1%7D%7B2%7D%20%5Csum%5Climits_%7Be_i%20%5Cin%20E_s%2C%20E_l%7D%20e_i%5ET%20%5CLambda_i%5E%7B-1%7D%20e_i%20%5Cquad%20%2812%29

        显然,预期神经点云的布局应该在全局位姿图优化后重新排列。然而,一个以世界为中心的点云显然不能允许这样的调整。

        为了解决这个限制,我们提出了一个以关键帧为中心的神经点场,其中每个3D点与一个关键帧关联(上图4)。

        由于这个设计,我们可以根据优化后的姿势来优化我们的点云3D位置。在全局地图细化之后,我们使用基于网格的过滤来处理出现在局部区域的神经点云冗余。

        考虑到全局地图细化后神经场和解码器之间轻微的不匹配,我们最终通过较少的优化迭代执行低成本的全局神经场微调。

4 实验

下一篇【论文解读】CP-SLAM: Collaborative Neural Point-based SLAM System_神经点云协同SLAM系统(下)-CSDN博客

5 结论

下一篇

【论文解读】CP-SLAM: Collaborative Neural Point-based SLAM System_神经点云协同SLAM系统(下)-CSDN博客

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

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

相关文章

pipeline agent分布式构建

开启 agent rootjenkins:~/learning-jenkins-cicd/07-jenkins-agents# docker-compose -f docker-compose-inbound-agent.yml up -d Jenkins配置添加 pipeline { agent { label docker-jnlp-agent }parameters {booleanParam(name:pushImage, defaultValue: true, descript…

Redis对象的数据结构及其原理汇总

本文首发于公众号:Hunter后端 原文链接:Redis对象的数据结构及其底层实现原理汇总 当我们被问到 Redis 中有什么数据结构,或者说数据类型,我们可能会说有字符串、列表、哈希、集合、有序集合。 其实这几种数据类型在 Redis 中都由…

kafka个人笔记

大部分内容源于https://segmentfault.com/a/1190000038173886, 本人手敲一边加强印象方便复习 消息系统的作用 解耦 冗余 扩展性 灵活性(峰值处理 可恢复 顺序保证 缓冲 异步 解耦:扩展两边处理过程,只需要让他们遵守约束即可冗余&#xf…

Java 等后端应用如何获取客户端真实IP —— 筑梦之路

需求说明 现有一套Java开发的应用,需要能获取到用户访问的真实IP地址,以此来过滤到一些不安全的因素。而实际部署的场景中Java服务提供给用户访问需要经过多次代理,默认情况下是无法获取到客户端真实IP地址的,因此要实现该需求&a…

JavaWeb[总结]

文章目录 一、Tomcat1. BS 与 CS 开发介绍1.1 BS 开发1.2 CS 开发 2. 浏览器访问 web 服务过程详解(面试题)2.1 回到前面的 JavaWeb 开发技术栈图2.2 浏览器访问 web 服务器文件的 UML时序图(过程) ! 二、动态 WEB 开发核心-Servlet1. 为什么会出现 Servlet2. 什么是…

FPGA电平标准的介绍

对FPGA的管脚进行约束的时候,常常看到这样的电平标准,例如LVCOM18,LVCOS25,LVDS,LVDS25等等,其实这些都是一系列的电平标准。 针对数字电路而言,数字电路表示电平的只有1和0两个状态&#xff0c…

云汇优想:抖音矩阵系统有哪些类型?

抖音作为中国最热门的短视频分享平台之一,不断推陈出新,在内容管理和展示方面也进行了创新。其中,抖音矩阵系统是一项重要的功能,它提供了多种类型的矩阵,帮助用户更好地管理和展示自己的内容。那么,抖音矩…

叮!您收到了一封来自达坦科技的Hackthon邀请函

DatenLord Hackathon 2023正式启动!达坦科技基于其跨云分布式文件系统DatenLord项目,结合AI大模型时代背景,搭建了擂台,在此正式向您发出邀约! 本次大赛赛题深刻有趣,奖品丰厚多样,借此机会您不…

AVL树的底层实现

文章目录 什么是AVL树?平衡因子Node节点插入新节点插入较高左子树的左侧新节点插入较高左子树的右侧新节点插入较高右子树的左侧新节点插入较高右子树的右侧 验证是否为平衡树二叉树的高度AVL的性能 什么是AVL树? AVL树又称平衡二叉搜索树,相…

VSCode 运行java程序中文乱码

现象描述 java文件中包含中文,运行java程序后,乱码报错。 解决方法 原本运行指令为 cd "d:\programProjects\Java_proj\" ; if ($?) { javac Solution.java } ; if ($?) { java Solution } 需要添加 编码格式 -encoding utf8 cd &quo…

AI中文版怎么用,版本分享,GPT官网入口

网页版上线啦,在线助力大学生、上班族的高效生活! GPT4.0是OpenAI最新推出的聊天模型,它的语言理解和生成能力比以前的版本更强大。对于忙碌的上班族来说,GPT4.0能帮助你高效处理工作中的大部分写作任务,比如撰写报告…

ROS服务(Service)通信:通信模型、Hello World与拓展

服务通讯是基于请求响应模式的,是一种应答机制。 用于偶然的、对时时性有要求、有一定逻辑处理需求的数据传输场景。 一、服务通讯模型 服务是一种双向通讯方式,它通过请求和应答的方式传递消息,该模型涉及到三个角色: Master…

ubuntu云服务器配置SFTP服务

目录 一、安装并运行SSH服务 1,安装ssh服务 2,运行ssh 3,查看ssh运行状态 二、创建SFTP用户并进行用户相关的配置 1,创建SFTP用户 2,限制用户只能使用 SFTP,并禁止 SSH 登录。打开/ect/ssh/sshd_conf…

【源码系列】短剧系统开发国际版短剧系统软件平台介绍

系统介绍 短剧是一种快节奏、紧凑、有趣的戏剧形式,通过短时间的精彩表演,向观众传递故事的情感和思考。它以其独特的形式和魅力,吸引着观众的关注,成为了当代戏剧娱乐中不可或缺的一部分。短剧每一集都是一个小故事,…

ArcGIS创建格网

目录 1、创建网格 2、裁剪边界外的网格 3、只保留边界内完整的网格 1、创建网格 首先,我们在创建渔网前,需要指定渔网覆盖的范围。这里我们就以四子王为例 在ArcMap软件中,我们依次选择“Toolboxes”→“Data Management Tools&#xff0…

Centos上删除文件及目录的命令积累

01-如果我想删除Centos上当前目录下的文件 test06-2023-11-14-01.sql 该怎么操作? 答:如果你想删除CentOS上当前目录下的文件 test06-2023-11-14-01.sql,可以使用 rm 命令。以下是删除文件的基本语法: rm test06-2023-11-14-01.s…

结构体数组保存进二进制文件的简单做法

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 最近面临这样一个需求:以比较节省存储空间的存储一组坐标点到文件,要求程序能够跨平台读写这种文件。思考了一下,比较…

为开发GPT-5,OpenAI向微软寻求新融资

11月14日,金融时报消息,OpenAI正在向微软寻求新一轮融资,用于开发超级智能向AGI(通用人工智能)迈进,包括最新模型GPT-5。 最近,OpenAI召开了首届开发者大会,推出了GPT-4 Turbo、自定…

视频一键转码:批量转换MP4视频的技巧

随着数字媒体设备的普及,视频文件在生活中扮演着越来越重要的角色。而在处理视频文件时,有时需要将其转换为不同的格式以适应不同的需求。其中,MP4格式因其通用性和高质量而备受青睐。本文详解云炫AI智剪如何一键转码的技巧,帮助批…

基于SpringBoot的SSMP整合案例(在Linux中发布项目的注意事项与具体步骤步骤)

前言与注意 这几天在Linux中上线之前的小项目时,遇到了很多的问题,Linux镜像的选择,jdk, mysql在linux中的下载,使用finallshell连接linux,使用tomcat连接linux中的数据库........ 在下面的注意事项中我会将…