动态SLAM论文(7) — DOT: Dynamic Object Tracking for Visual SLAM

news2024/11/14 2:20:14

目录

1 Introduction

2 Related work

3 DOT

A 系统概述

B. 实例分割

C. 相机和物体跟踪

D. 跟踪质量、异常值和遮挡

E. 目标是否在运动?

F. 掩码传播

4 Experimental results

5 Conclusions


摘要 - 本文我们介绍了DOT(Dynamic Object Tracking)——一种与现有SLAM系统结合使用,能够显著提高在高动态环境下鲁棒性和准确性的前端技术。DOT通过实例分割和多视图几何结合,生成动态物体的掩码,使基于刚体场景模型的SLAM系统可以避开这些图像区域进行优化。
为了确定哪些物体实际上在移动,DOT首先对潜在动态物体的实例进行分割,然后利用估计的相机运动通过最小化光度重投影误差来跟踪这些物体。这种短期跟踪方法提高了分割的准确性,相比其他方法,最终只会生成实际动态物体的掩码。我们在三个公共数据集上使用ORB-SLAM 2进行了DOT的评估。结果表明,我们的方法显著提高了ORB-SLAM 2的准确性和鲁棒性,尤其是在高动态场景下。

1 Introduction

        SLAM是机器人平台自主导航的基本能力之一[4]。其目标是通过嵌入式传感器的信息,联合估计机器人的运动和周围环境的地图。视觉SLAM是其中最具挑战性且最相关的配置之一,传感器主要或仅限于摄像头。
        尽管在过去的20年里SLAM取得了显著进展,但大多数最新技术系统仍然假设环境是静态的,即场景中的点之间的相对位置不会发生变化,唯一的运动是由相机完成的。在这种假设下,SLAM模型将视觉变化完全归因于相机的相对运动,将动态区域建模为异常值,在位姿跟踪和地图估计过程中忽略它们。然而,在这些动态区域被排除为异常值之前,它们的数据会在SLAM优化中被使用,从而引入误差和不一致性,影响地图和相机姿态的估计。此外,对于基于特征的SLAM方法,其跟踪少量显著图像点,动态区域中产生的错误是相关且可能导致系统失败的,因为这些错误匹配数据会引入系统中。实际应用中,机器人或增强现实系统必须在远非静态的环境中运行。例如,汽车或无人机的自主导航、拥挤场景中的增强现实或者行星探测任务,在这些任务中低纹理使得SLAM系统在存在阴影或其他机器人的情况下不可靠。因此,开发能够在高动态环境中运行的鲁棒SLAM系统对于许多应用是至关重要的。

        如图1所示,本文旨在开发一种图像处理策略,以提高动态环境下视觉SLAM系统的稳健性。我们的具体贡献是“动态物体跟踪”(DOT)的开发,这是一种将实例分割与多视角几何相结合的前端技术,使用直接方法[6]来跟踪相机运动以及动态物体的运动。预处理的结果是一个包含每个图像动态部分的掩码,SLAM系统可以使用该掩码来避免在这些区域进行对应关系的建立。

 图1. 顶部一行:ORB-SLAM2 [1] 在KITTI [2] 图片上进行跟踪。中间一行:ORB-SLAM2 使用DOT分割掩码进行跟踪,区分运动和静止的物体。底部一行:ORB-SLAM2 使用Detectron2 [3] 分割掩码进行跟踪,编码所有可能的动态物体。请注意,DOT分割出实际运动的物体(例如,移动的汽车),同时保留静止的物体(例如,停放的汽车)。

        我们在三个不同的公共数据集上的实验证明,我们的语义分割和几何引导跟踪的组合在动态场景中表现优于现有技术。我们还发现DOT作为一个独立的前端模块实现,因此可以很容易地集成到现有的SLAM系统中。由于DOT包括短期掩码跟踪,我们避免了在序列中对所有帧进行分割,从而节省了计算资源。最后,尽管我们针对汽车导航特定领域对DOT进行了调优和评估,但我们的策略也可以适用于其他应用场景。

2 Related work

        动态环境中的SLAM是一个开放的研究问题,有大量的科学文献可供参考。我们将不同的方法分为三个主要类别。

        第一类方法是将场景建模为一组非刚性部分,包括可变形和动态物体[7][8][9]。虽然这条研究线路最为通用,但也是最具挑战性的。本文假设物体内部是刚体的前提是后两种动态视觉SLAM类别的基础。

        第二类方法旨在通过仅重建场景的静态部分来提高视觉SLAM的准确性和稳健性。动态物体被分割并忽略以进行相机位姿跟踪和地图估计。在这一方向上,DynaSLAM[10]在ORB-SLAM2[1]的基础上构建,旨在估计场景的静态部分地图并在长期应用中重复使用。动态物体通过将语义分割与多视角几何相结合来去除,以检测刚体模型中的不一致性。语义分割使用Mask R-CNN[11],它可以检测和分类场景中的对象为不同的类别,其中一些类别被预定义为可能是动态的(例如汽车或人)。DynaSLAM被设计为遮蔽场景中所有可能的移动物体,但正如[10]所示,在包含可能移动但实际上不移动的物体(例如停放的汽车的场景)的场景中,其准确性低于原始的ORB-SLAM2。本文旨在解决这个问题,只有当对象确实在运动时,才将其标记为动态。具有类似方法的另一个工作是StaticFusion[12],这是一个利用场景背景的三维重建来进行分割的稠密RGB-D视觉SLAM系统,以传播关于场景静态部分的时间信息。

        最后,在动态视觉SLAM中的第三种工作方式,超越了动态物体的分割和抑制,包括MID-Fusion [13]、MaskFusion [14]、DynSLAM [15]和ClusterVO[16]等工作。它们的目标是同时估计相机的位姿和多个动态物体。为此,在MID-Fusion [13] 和 MaskFusion [14] 中,创建每个可能移动目标的子地图,并进行目标和相机位姿的联合估计。大部分提到的系统[13][14][15][16][10]都涉及深度学习方法,在某些情况下由于分割网络的频率限制,目前无法实时实现。本研究中的贡献消除了对所有帧进行分割的要求,使系统能够独立于网络的分割频率,从而实现实时实现。

3 DOT

A 系统概述

        图2展示了我们提案的概述。DOT的输入可以是以某一定视频速率拍摄的RGB-D或立体图像,输出是编码场景的静态和动态元素的掩码,可以直接供SLAM或里程计系统使用。

图2. DOT的概述。路径A(红色)显示从网络获得分割掩码的帧的处理过程。路径B(绿色)显示通过DOT几何传播获得分割掩码的帧的处理过程。         

        第一个块(实例分割)对所有可能的动态物体进行逐像素的分割的CNN。在我们的实验中,使用自动驾驶数据集,只对车辆进行了分割,认为它们是可能的运动物体。正如后面将详细阐述的那样,由于DOT从帧到帧跟踪掩码,这个操作不需要在每个帧上都进行。

        图像处理块提取和分离属于图像的静态区域和动态物体的点。相机的位姿仅使用场景的静态部分进行跟踪。根据此块以及考虑到相机位姿,估计每个分割对象的运动(目标跟踪)。

         下一个块(物体是否在运动中?)使用几何标准确定由网络标记为可能动态的物体是否确实在移动。该信息用于更新编码每帧的静态和动态区域的掩码,并提供给链接的里程计/SLAM视觉系统。

         最后,DOT从物体运动的估计中生成新的掩码(掩码传播),因此不需要对网络进行每帧分割(见图3)。鉴于实例分割的计算负载较大,这可能是DOT与其他最先进方法相比的一个重要优势。

图3. 样本结果。上排显示特征和物体轨迹。请注意,网络的分割(用黄色框起来)并不是所有帧都必要的。下排显示由DOT传播的掩码,编码运动分类:运动中(彩色)、静止(黑色)和尚未观察到(灰色)。

B. 实例分割

        我们使用COCO实例分割基线模型,搭配使用Detectron2 [3]训练的Mask R-CNN R50-FPN 3x[17], [18],用于对图像中所有可能可移动实例进行分割。网络的输出经过修改,以在单幅图像中获取所有分割掩码。未被分类为可能运动的类别的图像区域被赋予“背景”标签,并被认为是静态的,用于后续模块。分类仅限于被认为是刚性物体且可能可移动的类别,因此不包括人类在内。如果需要其他类别,可以使用这些权重作为起点进行微调,或使用自己的数据集

        为了在多个帧之间持续跟踪物体,我们在DOT计算的掩码和网络提供的掩码之间加入了匹配步骤。未与任何现有物体匹配的新检测结果将用于初始化新的实例。

C. 相机和物体跟踪

        从先前步骤的实例分割中,我们旨在估计相机和动态物体的运动。由于相机的运动和物体的运动在图像中是相互关联的,因此我们采用两步过程进行估计。首先,我们找到相机的姿态作为相对变换,然后减去它来估计物体的运动。我们的优化与最近的直接视觉测距和SLAM方法[6]相关,这些方法旨在找到最小化光度重投影误差的运动。

优化我们对相机姿态和后续物体运动估计进行高斯-牛顿优化,

其中包含残差函数的导数(方程(3)和(5)),是包含光度残差的协方差的对角矩阵。李代数姿态增量,其中是从向量到切空间矩阵表示的映射运算符[19],表示为向量。我们使用左矩阵乘法和指数映射运算符更新变换。两者都使用恒定速度模型和多尺度金字塔图像进行初始化,以帮助收敛。

相机跟踪:使用静态场景区域 上的高梯度像素的稀疏子集和多视点约束 [20] 来估计相机运动,假设相机标定和点的深度已知。静态点 从参考帧中的像素坐标投影到帧 中的对应坐标,如下所示:

其中, 分别对应透视投影和反投影模型,是参考帧中点的深度。 通过最小化光度重投影误差来优化相机姿态,

计算方法是对所有点在其参考帧和其在正在跟踪的帧中的投影之间的强度差的总和。我们使用 Huber 范数 γ。

物体跟踪:一旦估计了 Tc,每个潜在动态物体的姿态可以通过使用属于该物体的一部分图像高梯度像素进行类似估计。将潜在动态物体建模为具有姿态 To 的实体,则每个点 从帧投影到帧中的坐标为:

 与公式 3 类似,通过最小化以下光度重投影误差来估计 To。

D. 跟踪质量、异常值和遮挡

        遮挡、光照条件的改变和分割错误会对目标和相机位姿的准确性产生显著影响。正如算法1中所示,我们开发了几种策略,在目标跟踪步骤之后应用这些策略以减小它们的影响。

跟踪质量:动态目标的外观会发生明显变化,增加跟踪误差。我们使用皮尔逊相关系数来建模外观相似度。这个度量反映了参考强度和相应估计之间的线性相关程度,因此对增益和偏移变化不变。需要注意的是,这也可以应用于相机跟踪φc,尽管背景外观的变化通常没有那么明显。

异常值排除:常常使用绝对阈值来拒绝离群值,这个阈值是根据光度误差的中位数、运动模糊或者光照变化进行调整的。如图4所示,我们建议根据强度之间的线性关系设置一个相对阈值,这样错误就不会受到图像中光度变化的影响。

图4 左侧是一个物体的光度误差直方图,阴影区域表示通过一个固定阈值去除的点。右侧则是强度之间的线性关系图。注意由于光度变化的不同,绝对阈值(黄色)和相对阈值(红色)标记为离群值的点是不同的。

遮挡:动态目标可能相互遮挡。在我们的实验中,移除被遮挡部分作为异常值是不够的。我们采用了一种策略,即从最近到最远的距离对目标进行跟踪,按顺序更新它们各自的掩模。通过这种方式,在每次迭代中,我们更新被较近目标遮挡的较远目标的点。

E. 目标是否在运动?

        这个模块接收相机的变换矩阵 Tc 和目标的变换矩阵 To 作为输入,并估计目标是否正在移动。它的输出将被SLAM或里程计系统使用,用于存储图像中被动态目标占据的区域以及它们是否在运动的掩模。通过使用在上一步中估计的 Tc 和 To 将每个目标的像素投影到新帧上来获取这些掩模。

        直接观察 To 中的目标运动会由于传播的图像噪声而产生困难,难以确定目标是否在运动的绝对阈值。在这项工作中,我们选择使用2D图像测量来观察目标的运动。我们将我们的度量标记为动态视差,即静止点和实际投影点之间的像素距离。对于每个目标,我们计算其点集的动态视差的中位数

        一个点的三维运动会产生不同的图像运动,这取决于1)它的图像坐标,2)它的深度,以及3)物体方向和相机运动方向之间的相对角度。

        通过非线性位姿优化(见公式(1)),我们可以推导出对目标运动的估计的不确定性。假设一个k维高斯分布,它的微分熵为

        差分熵可以被视为光度残差最小化所导致的姿态不确定性。换句话说,具有高熵的运动观测将导致图像像素的大幅度变化(见图5)。相反,具有低熵的观测将产生小的图像差异。

 图5. 视差与熵的对比。比较了不同运动物体产生的动态视差。注意观察到熵值较高的观测结果(更亮的红色)会导致图像像素的较大偏移。

        基于此,用于分类物体运动的算法工作如下。我们将动态差异与随着熵的增加而平滑增长的变量阈值∆d进行比较。我们将超过此阈值()的所有物体标记为“运动中”。在熵阈值以下的每个值,我们假设无法观测到物体运动。因此,将物体标记为静止要求运动可观测(),并且动态差异的中位数小于变量阈值()。

         虽然选择最佳的函数形式需要进一步研究,但本表达式满足要求,并在本文中显示了良好的结果(见第四节)。图3是由DOT传播的掩码示例。被标记为“运动中”的物体用彩色表示,而被标记为“静止”的物体则以黑色消失。以灰色表示的汽车是那些不能确定为静止或动态的汽车。

F. 掩码传播

        为了将同一3D物体的不同帧之间的实例联系起来,DOT将由神经网络产生的掩码与通过多视图方程和计算的相机和物体姿态投影前一帧的像素而传播的掩码进行重叠。

状态传播:将新的语义实例与现有的物体联系起来,使我们能够预测它们的运动(对于快速移动的物体非常关键)。此外,在物体移动到无法观测到运动的位置的情况下,运动状态可以被维持(参见第III-C节)。

独立分割:我们的提议允许从初始种子开始在时间和空间上传播语义分割掩码,消除了对每帧进行分割的需求。在低端平台上以较低的频率运行神经网络可以实现实时物体跟踪。作为附加效益,DOT能够填补网络在连续图像之间暂时丧失对象实例化的空白。

  

4 Experimental results

基准设定:我们使用三种不同的配置来估计相机轨迹,这些配置使用ORB-SLAM2 [1]:

  • 无遮罩:在未修改的图像上使用ORB-SLAM2的作者实现来运行。图像特征可以在整个图像中初始化(包括属于移动物体的区域)。
  •  DOT遮罩:除了图像外,ORB-SLAM2还接收包含当前正在运动的潜在动态物体的遮罩作为输入。我们修改了ORB-SLAM2的实现,以便在这些移动物体中不提取特征点。
  • 所有遮罩:将分割网络获得的所有遮罩应用于ORB-SLAM2。因此,所有潜在动态物体都被移除,而不检查它们是否真的在移动。

序列子集:我们对KITTI视觉基准套件 [2] 中的三个子集进行了这些配置的评估。我们使用了Virtual KITTI [21], [22]中的数据,该数据集是由KITTI [2]的5个虚拟克隆序列组成的合成数据集,KITTI里程碑,一个专门设计用于开发和评估视觉里程计系统的预定义序列子集,以及KITTI原始部分中具有大量移动物体的序列的子集选择[23]。在Virtual KITTI中,我们使用RGB-D ORB-SLAM2,因为该数据集提供了合成深度图像。在其他设置中,我们使用了双目ORB-SLAM2。真实序列的地面实况由GPS定位系统提供。

评估指标:为了考虑到非确定性效应,我们对每个序列运行了每个配置10次,并报告中位数值。所有实验都在一台配备Intel Core i5处理器和8GB RAM内存的笔记本电脑上运行。绝对轨迹误差(ATE) [24] 是经过对齐两个轨迹后,估计位置相对于GPS地面实况的均方根误差(RMSE)。为了方便比较,误差的平均值通过每个序列上使用DOT获得的值进行归一化,即“”。表 I 中的右列显示了在三个配置中,ATE相对于每个序列中最佳ATE的归一化值。因此,1代表最佳结果,而值>1表示性能较差。颜色标度指示了相对位置在每个序列中最佳结果(绿色)和最差结果(红色)之间的归一化差异。

 跟踪精度。根据表 I 中的ATE,在V-KITTI序列中,DOT的性能分别比无遮罩和所有遮罩配置提高了135.4%和21.6%。此外,在经评估的5个序列中,DOT对于3个序列得分最好。

        在KITTI Odometry的11条轨迹中,DOT的精度分别比没有掩模和所有掩模分别提高了12.7%和30.3%。与V-KITTI相比,这组序列包含的动态元素较少,因此使用掩模甚至会有损害。根据数据集规格,由GPS收集到的地面真实相机姿态精度在10厘米以内。这被认为是移动物体数量较少以及图像纹理丰富的结果,这为估计相机运动提供了大量静态点。

        序列和方法之间的差异在表 I 的最后一节中更加明显,KITTI Raw以大量移动物体为特色。总体而言,DOT相比没有掩模提高了142.3%的ATE,并相比所有掩模提高了15.9%。注意,在序列1003-0047中丢弃动态物体显著减少了跟踪误差。序列0926-0009、0929-0004和1003-0047被克隆以生成V-KITTI合成序列(1、18和20)。如预期所料,由于场景内容相同,结果的定性分析也是相同的。

        表 I 中的色标证实,即使DOT不是最准确的(绿色),它仍然接近最佳解决方案。因此,虽然使用掩模可能很方便,但如果只移除实际上在运动的物体,则准确性会显著提高。这些结果表明DOT在静态和动态场景下始终具有良好的性能。

场景内容的自适应:图 6 描绘了可能影响SLAM准确性的两种情况。下排是低行动度的场景(V-KITTI 20),所有车辆都在运动,违反了ORB-SLAM2的刚性假设,导致系统失败。同样,VKITI 18中的移动物体导致ORB-SLAM2在10次试验中有6次跟踪失败(仅能估计轨迹的56%)。上排是一行停放了车辆的城市场景(V-KITTI 01)。与前一个案例相反,使用所有分割掩模的结果最差,因为删除了许多具有可靠信息的点以进行跟踪。此序列的ATE结果显示,从较大区域中提取点会得到更准确的估计轨迹。

 图6. 内容适应。左:无遮罩。中:DOT遮罩。右:所有遮罩。顶部一行显示了一个静态场景,其中所有遮罩丢弃了静态物体中的所有点。 在底部一行中,无遮罩在移动物体上跟踪特征,这可能会导致失败。DOT成功地将停放的汽车识别为静态物体,将移动的汽车识别为动态物体。

        此分析显示,虽然使用动态物体掩模是有益的,但如果不验证物体是否实际运动,将导致信息丢失,特别是在许多车辆的场景中。DOT通过估计物体的运动状态,在这两种对立情景之间取得了权衡,显著提高了鲁棒性和准确性。

环路闭合:ORB-SLAM2的环路闭合模块减少了由于动态物体或移除停放车辆而产生的漂移和不准确性。我们观察到,使用DOT掩模的ORB-SLAM2能在KITTI Odometry的第9个序列中的10次运行中有6个闭环,而所有掩模均未闭环。这解释了结果的一部分变异性,并显示出DOT的额外优势

分割错误:与其他方法相比,DOT减少了分割错误。神经网络有时会错误地将静态物体(例如交通标志或建筑物)标记为动态物体,但是DOT通过重新标记对象为静态物体来纠正这个错误(见图7)。 此外,当网络在序列帧中的某一帧中没有触发时,DOT能够通过传播对象遮罩来填补空白。

 图7. 分割错误。所有遮罩和DOT遮罩之间的比较。 请注意,Detectron2的错误分割(红色方框中的标志被分配为汽车标签)被DOT正确地分类为静态物体。

遮罩传播:正如第III-F节所解释的那样,我们的方法通过在中间帧中传播先前存在的掩码,可以减少网络分割的频率。图8显示了在V-KITTI的每一帧上正确标记的像素减去错误标记的像素数(黑色是真实值),当DOT使用100%的Detectron2分割(红色),50%(蓝色),33%(黄色)和25%(绿色)时。请注意,在传播过程中,除了在跟踪失败或分割之间引入移动物体之外,掩码保持准确(请参见表II中在V-KITTI上的交叉并集)。这可以用来减少计算时间,这在高频图像流中尤为实用。 

图8. 掩膜传播。在V-KITTI数据集中,基于分割网络的DOT在所有帧中的正确标记像素减去错误标记像素与参考标准 (黑色) 相比,以红色表示使用所有帧 (红色),50%的帧 (蓝色),33%的帧 (黄色) 和 25%的帧 (绿色)。

5 Conclusions

        DOT是一种新颖的SLAM系统前端算法,通过结合实例分割和多视角几何方程,可稳健地检测和跟踪移动物体。我们在三个公共数据集上使用ORB-SLAM2进行评估,用于自动驾驶研究[2],[21],[22],结果表明,DOT生成的对象运动信息使我们能够分割动态内容,显著提高了稳健性和准确性。DOT与SLAM的独立性使其成为一种可适应任何最新视觉里程计或SLAM系统的多用途前端,只需进行最小的集成工作。与其他系统不同,DOT遮罩跟踪减少了分割的频率,降低了计算需求,相对于现有技术水平而言。

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

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

相关文章

计算机网络实验报告——Wireshark 抓包分析

1. Wireshark软件下载 这里放一个蓝奏云下载链接: https://wwix.lanzoue.com/iEklv11klvje 密码:4g0n 2. Wireshark软件抓包使用 将该软件安装之后,双击打开,首先选择你的过滤器方式,我这里电脑连的是WiFi,就选择了这…

分布式搜索--elasticsearch

一、初识 elasticsearch 1. 了解 ES ① elasticsearch 是一款非常强大的开源 搜索引擎,可以帮助我们从海量数据中 快速找到需要的内容 ② elasticsearch 结合 kibana、Logstash、 Beats,也就是 elastic stack (ELK),被 广泛应用在日志数据分…

【CANoe示例分析】PythonCAPL_Call_Demo

该工程由Vector官方提供,目的是演示Python如何调用CAPL文件里的自定义函数。里面除了CANoe工程文件外,还有python文件和CAPL: 提供了两种CANoe版本的工程文件,选择其中一种打开即可。 首先我们要确定CAPL文件AnalyseFunctions.can在CANoe工程内的什么地方?首先想到的是Si…

Apache Doris 在金融壹账通指标中台的应用实践

本文导读: 金融壹账通作为中国平安集团的联营公司,依托平安集团 30 多年金融行业的丰富经验及自主科研能力,向客户提供“横向一体化、纵向全覆盖”的整合产品,以“技术业务”为独特竞争力,帮助客户提升效率、提升服务…

vuex中的四个map方法的使用

vuex中的四个map方法的使用 vuex里面有四个map方法,他们分别可以针对不同的元素进行不同的代码生成 这四个map方法都是异曲同工,明白了一个基本上都明白了 1 编写案例 现在想要展示一段文本,其中里面两个参数要存在store的state里面&…

怎样优雅地增删查改(二):扩展身份管理模块

文章目录 用户关系管理扩展组织管理功能创建可查询仓储 实现控制器测试接口 身份管理模块(Identity模块)为通用查询接口的按组织架构查询和按户关系查询提供查询依据。 身份管理模块的领域层依赖Volo.Abp.Identity.Domain Abp为我们实现了一套身份管理模…

CentOS 7镜像下载 以及 DVD ISO 和 Minimal ISO 等各版本的区别介绍

1.官网下载 官网下载地址:官网下载链接 点击进入下载页面,随便选择一个下载即可(不推荐,推荐阿里云下载,见下文) 阿里云下载站点(速度非常快推荐) 阿里云下载链接: http…

免费下载!10个3D素材网站推荐

在设计工作中,3D素材可以帮助设计师创建高质量的UI设计,提高设计效率和准确性。本文将为您推荐10个好用的3D素材网站,助力设计师实现高效创作。 1.即时设计资源广场 即时设计资源广场是一个致力于为设计师提供丰富多样的设计资产和灵感的社…

chatgpt 与传统3D建模对比分析

推荐:将NSDT场景编辑器加入你的3D工具链 随着人工智能技术的发展,越来越多的领域正逐渐被AI模型所取代。ChatGPT作为一种自然语言处理技术,越来越为人们所熟悉。最近,一些3D建模领域的专家想知道ChatGPT是否可以取代传统的手动3D建…

ClickHouse主键索引最佳实践

在本文中,我们将深入研究ClickHouse索引。我们将对此进行详细说明和讨论: ClickHouse的索引与传统的关系数据库有何不同ClickHouse是怎样构建和使用主键稀疏索引的ClickHouse索引的最佳实践 您可以选择在自己的机器上执行本文给出的所有Clickhouse SQL…

C++之Clang属性大全(一百五十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

NC65自由报表参数设置后,报表发布成节点后,点击查询,在查询框输入条件后,参数值没有拼接到sql中的解决方法

NC65自由报表参数设置后,报表发布成节点后,点击查询,在查询框输入条件后,参数值没有拼接到sql中的解决方法 在语义分析模型中把sql语句放进去,把字段和查询查询设置好 语义模型的sql使用了parameter把参数输入 sel…

eNSP-OSPF组播拓展复杂区域连接

OSPF动态路由 文章目录 OSPF动态路由一、题目要求二、题目分析三、拓扑结构四、基础配置五、测试验证 一、题目要求 1 、 使用172.16.0.0.0/16网段进行子网划分 2 、 用OSPF协议达到全网可达 3 、 保证所有设备均具备最少的 LSDB 以及路由表 二、题目分析 1.网段划分 5个O…

将OxyPlot封装成用户控件后在WPF中的应用

1、文件架构 2、加载依赖项 Newtonsoft.Json OxyPlot.Wpf 3、NotifyBase.cs namespace Accurate.Common {public class NotifyBase : INotifyPropertyChanged{public event PropertyChangedEventHandler? PropertyChanged;public void DoNotify([CallerMemberName] string p…

【深度学习】日常笔记10

loss_fn nn.MSELoss(reductionnone)这行代码,在这个上下文中,loss_fn实际上是一个损失函数对象而不是返回的具体值。 使用nn.MSELoss(reductionnone)创建的loss_fn是一个均方误差损失函数对象,而不是计算后的结果。要计算具体的损失值&…

(02)Cartographer源码无死角解析-(79) ROS服务→子图压缩与服务发送

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885 文…

一篇文章带你吃透Go语言的Atomic和Channel--实战方法

一篇文章带你吃透Go语言的Atomic和Channel–实战方法 Atomic 要保证原子操作,一定要使用这几种方法 我们在学习 Mutex、RWMutex 等并发原语的实现时,你可以看到,最底层是通过 atomic 包中的一些原子操作来实现的 你可能会说,这些…

C语言中级篇请看另一篇文章,这一篇文章只写给高手看【高阶C语言】【更新中】【原创】

文章目录 前言define和typedef的区别?前言 关于C语言,博主已经写了不少的笔记总结了,C语言基础版可看我的专栏里面的C语言精华,C语言进阶版可看我的谭浩强C语言第五版,C语言高阶版看此篇文章即可 C Primer Plus书籍,C语言精华,截图 + 代码 + 学习总结笔记【11000字】【…

AOCVSBOCV、AOCV table

文章目录 AOCV(Advanced OCV)&SBOCV(Stage Based OCV)---更精确,剔除悲观度Random variation(Depth/Stage based AOCV)Systematic variation(Distance based AOCV)一…

阻塞队列是什么

1、阻塞队列是什么? (1) 栈与队列 1)栈:先进后出,后进先出 2)队列:先进先出 (2) 阻塞队列 阻塞:必须要阻塞/不得不阻塞 阻塞队列是一个队列,在数据结构中起的作用如下图: 线程1…