【三维重建】【SLAM】SplaTAM:基于3D高斯的密集RGB-D SLAM(CVPR 2024)

题目:SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM
地址:spla-tam.github.io
机构:CMU(卡内基梅隆大学)、MIT(美国麻省理工)

在这里插入图片描述


总结:SplaTAM,一个新的SLAM系统,利用3D Gaussian Splatting作为底层map表示,渲染和优化更快,明确的地图空间范围,和流线型的地图稠密化。可以同时优化pose估计、场景重建和新视图合成。

文章目录

  • 摘要
  • 一、引言
  • 二、相关工作
    • 2.1 密集SLAM的传统方法
    • 2.2 预训练的神经网络表示
    • 2.3 隐式场景表示
    • 2.4 3D Gaussian Splatting(简称GS)
  • 三、方法
    • 3.1 高斯地图表示
    • 3.2 通过 Splatting的可微渲染
    • 3.3 SLAM 系统
    • 3.4 初始化
    • 3.5 像机跟踪
    • 3.6 高斯稠密化
    • 3.7 高斯地图更新
  • 四、实验
    • 4.1 数据集和验证设置
    • 4.2 相机pose估计实验
    • 4.3 高斯图重建与摄像机pose的可视化
    • 4.4 渲染质量
    • 4.5 颜色和深度损失消融
    • 4.6 局限性
  • 总结


摘要

提示:这里可以添加本文要记录的大概内容:

  密集的同步定位和建图(SLAM)是具体化场景理解的关键。最近的工作表明,三维高斯使用多个姿态相机,高质量重建和实时渲染场景。我们首次表明,用三维高斯表示一个场景,可以使用无pose的单目RGB-D像机实现密集的SLAMSplaTAM,解决了辐射场的表示的局限性,包括 快速渲染和优化,确定区域是否已经被map的能力,以及通过添加高斯的结构化地图扩展 。我们 采用了一个在线跟踪和建图框架,同时裁剪它,以专门使用底层的高斯表示和通过可微渲染的silhouette(轮廓)引导的优化 。实验表明,SplaTAM在相机pose估计、地图构建和新视图合成方面达到了高达2×的最先进的性能,同时允许实时渲染高分辨率的密集3D地图。

一、引言

   视觉同时定位和建图(SLAM)——估计视觉传感器pose和环境地图的任务——是视觉或机器人系统在以前看不见的3D环境中操作的基本能力。在过去的30年里,SLAM的研究广泛地集中在地图表示的问题上——导致了各种稀疏的[2,3,7,23]、密集的[4,6,8,13,15,25,26,34,41,42]和神经场景表示[21,29,30,37,45,54]。映射表示(Map representation)是一个基本的选择,它会极大地影响到SLAM系统中的每个处理块的设计,以及依赖于SLAM的输出的下游任务。

  就密集的视觉SLAM而言,最成功的手工表示是点、surfels/flats 和符号距离场 虽然基于这种地图表示的系统在过去几年中已经成熟到生产水平,但仍有重大的缺陷需要解决。跟踪显式表示的关键是依赖于丰富的三维几何特征和高帧率捕获的可用性。此外,这些方法只能可靠地解释场景中观察到的部分;许多应用程序,如混合现实和高保真度3D捕获,需要的技术也能够解释/合成未观察到的/新的相机视点

  手工表示的缺点,加上辐射场表示的高质量图像的出现,推动了将场景编码到神经网络的权重空间的方法。基于辐射场的SLAM算法[30,53]受益于高保真的全局地图和图像重建损失,这些损失通过可微渲染捕获密集的光度信息。然而,目前的方法使用隐式神经表示来模拟体辐射场,在SLAM中导致许多问题——计算效率低,不容易编辑,不明确地建模空间几何,以及灾难性遗忘。

  “ 如何使用显式的体积表示来设计一个SLAM解决方案 ?”我们使用一个基于三维高斯的辐射场,来Splat(渲染),跟踪,和建图SLAM。有以下好处:

  1. 快速渲染,实现丰富的优化

Gaussian Splatting高达400 FPS的渲染速度,是隐式的替代方案,关键因素是3Dprimitives 的栅格化。SplaTAM做了简单修改,,包括去除与视图相关的外观使用各向同性高斯分布。此外,这允许我们实时使用密集光度损失的SLAM,而传统的和隐式映射表示分别依赖于稀疏的三维几何特征或像素采样来保持效率。

  1. 可以显式延申空间的地图

通过只在观察到的部分场景中添加高斯分布,可以很容易地控制现有地图的空间边界。给定一个新的图像帧,这允许人们通过渲染一个silhouette(轮廓)来有效地识别场景的哪些部分是新的内容(在地图的空间边界之外)。这对于相机跟踪至关重要,因为我们只想将场景的映射区域与新图像进行比较。这对于隐式映射表示来说是困难的,因为网络在对未映射空间的基于梯度的优化过程中会受到全局变化的影响

  1. 显式地图

通过简单地添加更多的高斯分布,增加map的容量。显式的体积表示能够编辑场景的部分,同时仍然允许逼真的渲染。隐式方法不能轻易地增加它们的能力或编辑它们所表示的场景

  1. 参数的直接梯度流

场景是用物理三维位置、颜色和大小的高斯表示的,在参数和渲染之间有一个直接的、几乎线性的(投影的)梯度流。因为相机的运动可以被认为是保持相机的静止和移动的场景,我们也有一个直接的梯度到相机的参数,从而实现快速优化。基于神经的表示没有这一点,因为梯度需要流过(可能有很多)非线性神经网络层

  图1在模拟和真实数据的实验结果:

在这里插入图片描述

二、相关工作

  简要回顾使用密集SLAM的各种方法,特别是最近利用过拟合神经网络中编码的隐式表示进行跟踪和映射的方法。

2.1 密集SLAM的传统方法

  传统的密集SLAM方法探索了各种显式表示,包括2.5D图像、(截断)符号距离函数、高斯混合模型[9,10]和圆形曲面(平面)。与这项工作特别相关的是Keller等人[13]提出的基于点的融合,它在其映射表示中使用了一个flat作为原子单元。flat,或surfels,是通过RGB-D图像输入进行实时优化的彩色圆形表面元素每个surfel 都能够编码一个表面上的多个点,允许更紧凑的映射表示。Surfels很容易被栅格化,就像[33,42]中通过可微栅格化跟踪相机的pose。虽然上述的SLAM方法不假定可见性函数是可微的,但存在现代可微栅格器,使梯度流可以通过depth discontinuities[49]。本文使用三维高斯形式的volumetric(相对于仅表面)场景表示,这可以实现快速和准确的跟踪和映射

2.2 预训练的神经网络表示

  该方法已经与传统的SLAM技术集成,主要集中于预测RGB图像的深度。这些方法从直接将神经网络的深度预测集成到SLAM [38]中,学习可解码的变分自动编码器,到同时学习预测深度成本量和跟踪的方法。

2.3 隐式场景表示

  iMAP [37]首先使用神经隐式表示进行跟踪和映射。为了提高可伸缩性,NICE-SLAM [53]提出了使用分层的多特征网格。在类似的线上,与[25,27]相比,iSDF [28]使用隐式表示来有效地计算有符号的距离。在此之后,[11,18,19,22,29,31,40,50,54]的一些工作最近通过多种方式推进了基于隐式的SLAM——通过持续学习(体验回放)减少灾难性遗忘,捕获语义,合并不确定性,使用高效分辨率hash-grid和编码,以及使用改进的损失。最近,Point-SLAM [30]提出了一种替代路线,类似于[44],通过使用神经点云,并使用特征插值进行体积渲染,提供了更好的三维重建,特别是对于机器人技术。然而,与其他隐式表示一样,体积射线采样极大地限制了其效率,因此求助于稀疏像素集的优化,而不是每像素密集的光度误差。相反,SplaTAM的显式体积辐射模型利用了快速的栅格化,使其能够完全使用每像素密集的光度误差

2.4 3D Gaussian Splatting(简称GS)

  最近,3D高斯算法已经成为一种很有前途的3D场景表示[14,16,17,39],特别是能够通过Splatting[14]极快地渲染。该方法也被扩展到具有密集6-DOF运动[20]的动态场景[20,43,46,47]模型。这种针对静态和动态场景的方法都要求每个输入帧都有一个精确的已知的6-DOF摄像机姿态,以成功地优化表示。SplaTAM首次消除了这个约束,同时估计相机的pose,同时也拟合潜在的高斯表示

三、方法

  SplaTAM是第一个使用三维GS的密集RGB-D SLAM解决方案。通过将世界建模为可以渲染成高保真彩色和深度图像的三维高斯图像的集合,能够直接使用可微渲染和基于梯度的优化,来优化每一帧的相机pose和一个 underlying volumetric discretized世界地图。

3.1 高斯地图表示

  splatam将场景的底层地图表示为一组三维高斯分布,基于原始GS进行了一些简化, 只使用与视图无关的颜色,并迫使高斯分布是各向同性的。这意味着每个高斯值只由8个值参数化:3个为其RGB颜色c,3个为其中心位置µ∈R3,一个为其半径r,一个为其不透明度o∈[0,1]。根据由高斯分布的不透明度加权的标准(非归一化)高斯方程,每个高斯分布会影响三维空间x∈r3中的一个点:
在这里插入图片描述

3.2 通过 Splatting的可微渲染

  方法的核心是能够将底层高斯地图中的高保真颜色、深度和轮廓图像渲染到任何可能的相机参考帧中。这种 可微渲染允许我们直接计算底层场景表示(高斯)和相机参数的梯度,利用渲染和真实的RGB-D帧之间的误差,并更新高斯和相机参数来减少误差。

  GS渲染RGB图像如下:给定一个三维高斯和相机pose的集合,首先从前到后对所有高斯进行排序。通过在像素空间中,依次α-合成每个高斯分布的二维投影,来渲染RGB图像
像素 p =(u, v) 渲染颜色公式:
在这里插入图片描述
其中,fi(p) 的计算方法如等式(1),但在像素空间中splat的二维高斯的 µr 为:

在这里插入图片描述
这里,K是相机内参,Et 是第 t 帧处的相机旋转和平移的外参,f 是焦距(已知),d 是相机坐标下的第 i 个高斯值的深度。

我们提出类似的深度渲染(可以与输入深度图比较,返回相对于3D地图的梯度):

在这里插入图片描述

  我们还渲染一个silhouette(轮廓)图像来确定可见性——例如,一个像素是否包含来自当前地图的信息:
在这里插入图片描述

3.3 SLAM 系统

在这里插入图片描述

  我们从高斯表示和可微渲染器建立了一个SLAM系统。先简要概述:假设我们有一个现有的地图(通过一组三维高斯分布表示),它已经拟合了第 1 帧到 t帧。给定一个新的RGB-D帧 t+1,SLAM系统执行以下步骤(见图2):

1.像机跟踪。我们利用t+1 帧的相机pose参数,最小化RGB-D序列的图像和深度重建误差,但只评估可见轮廓内的像素的误差
2. 高斯密度。根据渲染的轮廓和输入深度,向地图中添加新的高斯

3. 地图更新。给定从帧1到帧t+1的相机pose,通过最小化所有图像的RGB和深度误差来更新高斯分布参数。在实践中,为了保持批处理大小的可管理性,将对选好的,与最近帧重叠的关键帧子集进行优化

3.4 初始化

  初始化。第一帧跳过跟踪步骤,将相机pose设置为identity。在稠密化步骤中,由于渲染的轮廓为空,所有像素都用于初始化新的高斯。具体来说,对于每个像素,我们添加一个颜色为像素的新高斯,中心位置为投影的像素深度,不透明度0.5,半径等于一个像素半径投影到2d图像的深度除以焦距:在这里插入图片描述

3.5 像机跟踪

  相机跟踪:旨在估计当前输入的在线RGB-D图像的相机pose。通过对相机中心+四元数空间中姿态参数的恒定速度正向投影,为一个新的时间步初始化相机pose。例如,初始化(公式7)

在这里插入图片描述
然后,通过基于梯度的优化,通过可微分地渲染RGB,深度和轮廓图,并更新相机参数,同时保持高斯参数不变,以最小化损失(公式8):

  以上为深度和颜色渲染上的L1损失,颜色的权重减少了一半。只应用以上损失于通过轮廓图渲染的像素。轮廓图捕获了地图的不确定性。这对于跟踪新的相机姿势非常重要,因为新帧通常包含在我们的地图中尚未捕获或经过良好优化的新信息。如果一个像素没有Grountruth深度,那么L1损失为0。

  

3.6 高斯稠密化

  稠密化的目的是:为每个进入的在线,在地图中初始化新的高斯分布。在跟踪之后,我们对这一帧的相机pose有了一个准确的估计,对于深度图像,我们对高斯分布在场景中的位置有了好的估计。然而,当前的高斯已经准确地表示场景几何时,不需要添加高斯,因此,我们创建了一个密集化mask来确定哪些像素应该被密集化:

在这里插入图片描述
  此mask指示地图密度不足的地方(S < 0.5),或者在当前估计的几何图形前面应该有新的几何图形(地面真实深度在预测深度的前面,并且深度误差大于中值深度误差(MDE)的50倍)。对于每个像素,基于这个mask,添加一个新的高斯进行第一帧初始化。

  

3.7 高斯地图更新

  旨在基于估计的在线相机pose下,更新三维高斯地图的参数。这也是通过可微渲染和基于梯度的优化来实现的,然而与跟踪不同的是,相机pose是固定的,高斯分布的参数被更新

  这相当于对已知pose的图像拟合辐射场的“经典”问题。然而,我们做了两个重要的修改。1.不是从头开始,而是从最近构建的地图中预热,开始优化。2.不优化所有之前的(关键)帧,而是选择了可能影响新添加的高斯分布的帧。我们将每n帧保存为关键帧,并选择k帧进行优化,包括当前帧、最近的关键帧,以及k−2之前与当前帧重叠最高的关键帧。重叠是通过取当前帧深度图的点云,并确定每个关键帧的错误点数来确定的

  阶段优化与跟踪过程中类似的损失,不使用轮廓mask(因为要优化所有的像素)。此外,我们在RGB渲染中添加了一个SSIM损失,并剔除了不透明度接近0的无用高斯分布。

四、实验

4.1 数据集和验证设置

  在四个数据集上评估了我们的方法: ScanNet++ 、Replica、TUM-RGBD 和原始的ScanNet 。选择后三种方法是为了遵循以往基于辐射场的SLAM方法Point-SLAM [30]和NICE-SLAM [53]的评价程序。然而,我们也添加了ScanNet++ [48]评估,因为其他三个基准测试中都没有一个能够评估新视图上的渲染质量,并且只评估训练视图上的摄像机姿态估计和渲染。

  Replica是最简单的基准测试,因为它包含合成场景,高度精确和完整的(合成)深度地图,以及连续的相机姿态之间的小位移TUM-RGBD 和原始的ScanNet比较困难,特别是对于密集的方法,因为RGB和深度图像质量都很差,因为它们都使用旧的低质量的相机。深度图像非常稀疏,缺少大量的信息,并且彩色图像有非常多的运动模糊量。对于ScanNet++ [48],我们使用来自两个场景的DSLR捕获,在这些场景中存在完全密集的轨迹。与其他基准测试相比,ScanNet++的颜色和深度图像是非常高的质量,并为每个场景提供了第二个捕获循环来评估完全新颖的保留视图。然而,每个相机的姿势之间相距很远,这使得姿势估计非常困难。在ScanNet++上,连续帧之间的差异与复制品上的30帧间隙大致相同。对于除ScanNet++之外的所有基准测试,我们从Point-SLAM [30]中获取基线数字。类似于Point-SLAM,我们对每5帧的训练视图渲染基准进行评估。此外,对于所有与之前基线的比较,我们将结果表示为3个种子(0-2)的平均值,并使用种子0进行消融

  评价指标为了测量RGB渲染性能,我们使用了PSNR、SSIM和LPIPS。对于深度渲染性能,我们使用深度L1损失。对于摄像机姿态估计跟踪,我们使用平均绝对轨迹误差(ATE RMSE)

  Baselines我们比较的主要基线方法是Point-SLAM [30],因为它是以前的基于密集辐射场的SLAM的最先进的(SOTA)方法。我们还与较旧的密集SLAM方法进行了比较,如NICE-SLAM [53]、Vox-Fusion [45]和适当的ESLAM [12]。在TUM-RGBD上,我们还比较了三种传统的SLAM系统:Kintinuous[41]、ElasticFusion[42]和ORB-SLAM2 [23]。在困难的ScanNet++上,除了点-SLAM外,我们还评估了ORB-SLAM3 [3]作为一个具有代表性的基于特征的传统SLAM系统。

4.2 相机pose估计实验

在这里插入图片描述

  在ScanNet++ [48]上,SOTA SLAM接近点SLAM[30]和ORB-SLAM3 [3](RGB-D变体)由于相邻摄像机之间的位移,完全无法正确跟踪摄像机的姿态,因此给出非常大的姿态估计误差。特别是,对于ORB-SLAM3,我们观察到无纹理的ScanNet++扫描由于缺乏特性而导致跟踪多次重新初始化。相比之下,我们的方法成功地在两个序列上跟踪摄像机,平均轨迹误差仅为1.2厘米

  在相对简单的合成Replica数据集上,即之前事实上的评估基准,我们的方法将比之前的SOTA [30]的轨迹误差减少了30%以上,从0.52cm减少到0.36cm。

  在TUM-RGBD [36]上,由于深度传感器信息差(非常稀疏)和RGB图像质量差(极高的运动模糊),所有的体积方法都非常困难。然而,与这类[30,53]方法相比,我们的方法仍然明显优于这类[30]中先前SOTA的轨迹误差减少了近40%,从8.92cm减少到5.48cm。然而,在这个基准测试中,基于特征的稀疏跟踪方法,如ORB-SLAM2 [23],仍然优于密集的方法

  在ScanNet++上的结果表明,如果有高质量的干净输入图像,我们的方法可以成功地和准确地执行SLAM,即使在相机位置之间的巨大运动。

4.3 高斯图重建与摄像机pose的可视化

  图3展示了来自ScanNet++在两个序列上重建的高斯图的可视化结果。我们还展示了相机的轨迹和相机的pose frustums,由我们的方法估计的这两个序列叠加在地图上。人们可以很容易地看到经常发生在连续相机姿态之间的大位移,这是一个非常困难的SLAM基准,然而我们的方法却非常准确地解决了这个问题。

在这里插入图片描述

4.4 渲染质量

  表2在Replica的输入视图上评估了渲染质量。我们的方法获得了与PointSLAM 相似的PSNR、SSIM和LPIPS结果,尽管比较不公平,因为PointSLAM具有不公平的优势,因为它将这些图像的真实深度作为输入,以便进行渲染。

  个更好的评价是评价新视图渲染。然而,目前所有的SLAM基准测试并没有一组与SLAM算法估计的相机轨迹分开的保留图像,因此它们不能用于此目的。因此,我们使用新的高质量ScanNet++数据集建立了一个新的基准, 新视图和训练视图渲染的结果可以在表3中找到。我们的方法获得了一个良好的新视图合成结果,平均为24.41 PSNR,在27.98 PSNR的训练视图上略高。请注意,这是在估计未知的相机pose时,即,完全未曝光的新视图合成结果。由于Point-SLAM [30]不能成功地估计相机的姿态,因此它也完全不能完成新视图合成的任务

  

  新视图和训练视图渲染的结果可以在表3中找到。我们的方法获得了一个良好的新视图合成结果,平均为24.41 PSNR,在27.98 PSNR的训练视图上略高。请注意,这是在估计未知的相机姿态时,即,完全未曝光的新视图合成结果。由于Point-SLAM [30]不能成功地估计相机的pose,因此它也完全不能完成新视图合成的任务

4.5 颜色和深度损失消融

在这里插入图片描述

4.6 局限性

  虽然SplaTAM达到了最先进的性能,但我们发现我们的方法对运动模糊、大深度噪声和侵略性旋转显示出一定的敏感性。我们认为,一个可能的解决办法是暂时模拟这些影响,并希望在今后的工作中解决这一问题。此外,SplaTAM可以通过像OpenVDB [24]这样的高效表示来扩展到大规模场景。最后,我们的方法需要已知的相机内部信息和密集的深度作为执行SLAM的输入,而删除这些依赖关系是未来的一个有趣的途径。

  

  

总结

  SplaTAM,一个新的SLAM系统,利用三维GS辐射场作为其底层地图表示,使更快的渲染和优化,明确的地图空间范围,和流线型的地图稠密化。我们证明了它在实现相机pose估计、场景重建和新视图合成的最新结果方面的有效性。

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

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

相关文章

十个勤天生菜原价4.9元被炒到300元,2024新商机!新兴创业项目!

近日&#xff0c;一则关于生菜价格暴涨的新闻引起了广泛关注。原价4.9元的生菜&#xff0c;在短短时间内被炒至300元&#xff0c;令人咋舌。在这背后&#xff0c;除了市场供需失衡、炒作等因素外&#xff0c;我们不禁思考&#xff1a;这样的现象背后是否隐藏着更大的商机&#…

LaTeX插入图片占位符

关于插入图片更多说明&#xff08;多图并排、子标题设置等&#xff09;可参考链接 LaTeX插入图片 插入图片占位符 参考链接&#xff1a;https://blog.csdn.net/yq_forever/article/details/129431799 在论文草稿阶段有的时候想先插入图片占位符拟定大纲或写作思路&#xff0…

张宇30讲学习笔记

初等数学 x \sqrt{x} x ​是算数平方根&#xff0c;一定≥0&#xff1b; x 2 \sqrt{x^2} x2 ​|x| x2|x2||x|2 x3≠|x3||x|3 不等式 a>0&#xff0c;b>0&#xff0c;则ab≥2 a b \sqrt{ab} ab ​ 对数 ln a b \frac{a}{b} ba​lna-lnb 高等数学 单调性 线性代数

Linux CentOS使用Docker部署Apache Superset并实现远程分析数据

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透&#xff0c;实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

自动化构建平台(一)Linux下搭建私有代码仓库Gitblit的安装和使用详解

文章目录 前言一、Gitblit的安装和使用1、本地安装2、docker下安装3、Gitblit使用简介4、Gitblit仓库权限控制5、Gitblit邮件配置 总结 前言 代码版本管理&#xff0c;git模式应该是目前最流行的代码管理软件。目前支持git的管理软件有很多。 Gitblit是一个小型的代码仓库管理…

《GitHub新手入门指南:从零开始掌握基本用法》

在现代软件开发和技术社区中,GitHub已经成为了一个不可或缺的平台。它不仅是一个代码托管平台,更是一个技术交流、学习分享的社交平台。但对于初学者来说,GitHub可能会有些令人望而却步。本文将详细介绍GitHub的基本用法,帮助新手快速入门并融入这个充满活力的技术社区。 …

Qt/C++音视频开发67-保存裸流加入sps/pps信息/支持264/265裸流/转码保存/拉流推流

一、前言 音视频组件除了支持保存MP4文件外&#xff0c;同时还支持保存裸流即264/265文件&#xff0c;以及解码后最原始的yuv文件。在实际使用过程中&#xff0c;会发现部分视频文件保存的裸流文件&#xff0c;并不能直接用播放器播放&#xff0c;查阅资料得知原来是缺少sps/p…

GitHub登不上:修改hosts文件来解决(GitHub520,window)

参考链接&#xff1a;GitHub520: 本项目无需安装任何程序&#xff0c;通过修改本地 hosts 文件&#xff0c;试图解决&#xff1a; GitHub 访问速度慢的问题 GitHub 项目中的图片显示不出的问题 花 5 分钟时间&#xff0c;让你"爱"上 GitHub。 (gitee.com) GitHub网站…

【Redis】Redis 实现分布式Session

Cookie 保存在客户端浏览器中&#xff0c;而 Session 保存在服务器上。客户端浏览器访问服务器的时候&#xff0c;服务器把客户端信息以某种形式记录在服务器上&#xff0c;这就是 Session。客户端浏览器再次访问时只需要从该 Session 中查找该客户的状态就可以了。 在实际工作…

leetcode 移除链表元素

本题中&#xff0c;我们是要移除链表的某一个节点&#xff0c;为了确保统一操作&#xff0c;我们需要使用虚拟头节点&#xff0c;这样我们删除节点的时候&#xff0c;就是把这个要删除的节点&#xff08;当前节点cur&#xff09;的前一个节点pre&#xff0c;使得pre.next指向要…

RabbitMQ相关问题

Mybatis框架相关问题 RabbitMQ相关问题 一、RabbitMQ的核心组件和工作原理&#xff1f;二、如何保证消息可靠投递不丢失的&#xff1f;三、RabbitMQ如何保证消息的幂等性&#xff1f;四、什么是死信队列&#xff1f;死信队列是如何导致的&#xff1f;五、RabbitMQ死信队列是如…

回溯 Leetcode 332 重新安排行程

重新安排行程 Leetcode 332 学习记录自代码随想录 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&a…

【Datawhale组队学习:Sora原理与技术实战】Attention

Attention Attention 注意力&#xff0c;从两个不同的主体开始。 论文&#xff1a;https://arxiv.org/pdf/1703.03906.pdf seq2seq代码仓&#xff1a;https://github.com/google/seq2seq 计算方法&#xff1a; 加性Attention&#xff0c;如&#xff08;Bahdanau attention&…

【工商业储能如何选】Acrel工商业储能系统解决方案

市场前景 碳中和&#xff1a;全球应对气候危机重建人与自然和谐关系的共同目标 清洁替代&#xff1a;清洁能源替代化石能源是全球实现碳中和的唯一路径 能量存储&#xff1a;储能技术是解决大比例清洁能源时空分布不平衡的最佳方案 应用场景 随着“双碳”目标下的新型电力…

Python+Selenium使用Page Object实现页面自动化测试

Page Object模式是Selenium中的一种测试设计模式&#xff0c;主要是将每一个页面设计为一个Class&#xff0c;其中包含页面中需要测试的元素&#xff08;按钮&#xff0c;输入框&#xff0c;标题 等&#xff09;&#xff0c;这样在Selenium测试页面中可以通过调用页面类来获取页…

记一次:android学习笔记一(学习目录-不要看无内容)

学习目录如下 B站学习的名称--Android开发从入门到精通(项目案例版) 网址:https://www.bilibili.com/video/BV1jW411375J/ 第0章:安装 android stoid 参考地址https://blog.csdn.net/adminstate/article/details/130542368 第一章:第一个安卓应用 第二章:用户界面设…

OpenCV 4基础篇| OpenCV图像的拆分和合并

目录 1. 通道拆分1.1 cv2.split1.1.1 语法结构1.1.2 注意事项1.1.3 代码示例 1.2 NumPy切片1.2.1 代码示例 2. 通道合并2.1 cv2.merge2.1.1 语法结构2.1.2 注意事项2.1.3 代码示例 1. 通道拆分 1.1 cv2.split 1.1.1 语法结构 b,g,r cv2.split(img[, mv]) #图像拆分为 BGR 通…

【开发工具】GIF 录屏工具推荐 ( GIF123 - 推荐使用 | GifCam | LICEcap )

文章目录 一、GIF 录屏工具推荐1、GIF123 ( 推荐使用 )2、GifCam3、LICEcap 本博客中介绍的 3 款 GIF 录屏工具下载地址 : https://download.csdn.net/download/han1202012/88905642 也可以到对应的官网独立下载 : GIF123 : https://gif123.aardio.com/ ;GifCam : https://bl…

FAST-LIO系列-阅读笔记

近期&#xff0c;阅读了FAST-LIO、FAST-LIO2以及Faster_LIO论文&#xff0c;这三篇论文都属于滤波器的SLAM算法&#xff0c;下面记录一下三个工作的主要贡献和不同。 FAST-LIO 1.提出了一种计算效率高、鲁棒性强的激光雷达-惯性里程测量框架。使用紧密耦合的迭代扩展卡尔曼滤…

报错:/bin/sh: warning: setlocale: LC_ALL: cannot change locale (zh_CN.UTF-8)

解释&#xff1a;这是shell 警告你无法将当前的区域设置&#xff08;locale&#xff09;更改为 zh_CN.UTF-8&#xff0c;这个警告可能不会影响 fc-cache 命令的实际运行&#xff0c;但它确实表明系统在某些方面可能无法正确地处理与 zh_CN.UTF-8 相关的内容。 1.检查当前的区域…