SOF-SLAM论文翻译

news2024/10/5 14:12:23

SOF-SLAM:面向动态环境的语义可视化SLAM

摘要-同时定位与绘图(SLAM)在计算机视觉和机器人领域中占有重要地位。为了便于分析,传统的SLAM框架采用了强静态世界假设。如何应对动态环境是一个非常重要的问题,越来越受到人们的关注。现有的动态场景SLAM系统要么单独利用语义信息,要么单独利用几何信息,要么以松散耦合的方式将它们的结果天真地组合在一起。本文基于ORB-SLAM2的RGB-D模式,提出了面向动态环境的视觉语义SLAM系统sofslam: Semantic Optical Flow SLAM。提出了一种新的动态特征检测方法——语义光流,它是一种紧密耦合的方法,可以充分利用特征隐藏在语义信息和几何信息中的动态特性,有效合理地去除动态特征。SegNet生成的逐像素语义分割结果在本文提出的语义光流中作为掩码,得到可靠的基本矩阵,然后使用该基本矩阵过滤出真正的动态特征。跟踪优化模块只保留剩余的静态特征,实现动态环境下相机姿态的精确估计。在公开的TUM RGB-D数据集和现实环境下进行了实验。与ORB-SLAM2相比,本文提出的sofslam在高动态场景下平均提高了96.73%。它也优于其他四个最先进的SLAM系统,以应对动态环境。
关键词-计算视觉,机器人,语义,同时定位与建图

1.引言

同时定位与制图(SLAM)利用运行SLAM系统的平台收集的数据构建周围世界的地图,并同时在地图中定位自身。平台携带的用于观察外界的传感器可以是多种多样的,如单目摄像头、立体摄像头、RGB-D摄像头、激光雷达等。当传感器为视觉传感器时,系统称为视觉SLAM系统。视觉SLAM系统是服务机器人、增强现实和自动驾驶汽车等各种上层应用的基础和必不可少的模块,这些应用需要估计相机姿态并重建环境的三维模型。在过去的几十年里,视觉SLAM问题引起了许多研究者的广泛关注,目前已经出现了许多优秀的视觉SLAM系统,如MonoSLAM[1]、PTAM[2]、ORB-SLAM[3]、ORB-SLAM2[4]、LSD-SLAM[5]、SVO[6]、DSO[7]。这些优秀的作品可以在静态环境或动态元素较少的情况下,使用RANSAC等鲁棒模块和鲁棒成本函数,达到令人满意的性能,可以将动态物体归类为离群值[8]。然而,在实际应用中,环境的动态特性是普遍存在的,有时动态元素甚至占据了场景的很大比例,例如城市街道,那里总是有移动的人或汽车。由于静态世界假设,上述标准SLAM系统在这种高动态环境下的精度大大降低,结果可能完全不可靠。图1(a)显示了一个高动态场景,其中有两个人在走动。当在这个场景中应用ORB- slam2时,几乎一半提取的ORB特征位于两个移动的人,如图1b所示。这些动态特征不能作为异常值过滤掉,因为它们的数量不是少数。由于这些动态特征的影响,估计的轨迹是完全不可用的。从图1©中可以看出,蓝色虚线为图1(a)场景中ORB-SLAM2估算的轨迹,黑色虚线为ground truth,两者形状完全不同。这意味着该系统已经失效,无法提供可靠的摄像机位置和环境信息。这种失效是由于SLAM系统的静态世界假设通常不能满足。因此,需要对标准SLAM系统进行扩展,以适应高动态环境。
在这里插入图片描述
为了提高动态环境下标准SLAM系统的精度,已经出现了许多方法。我们将在下一部分中回顾这些方法。

A.相关工作

在面向高动态环境的视觉SLAM系统中,特征通常分为静态和动态两类。仅保留静态特征,以提高高动态环境下的精度。场景动态特征的检测方法多种多样,大致可分为三类:单纯依赖几何信息的动态特征检测、单纯依赖语义信息的动态特征检测和单纯结合几何计算结果的动态特征检测。在几何方法中,最相关的有以下几点。Kundu等人[9]从机器人测程中构造基本矩阵来定义两个几何约束,其中一个是由对极几何导出的。根据极线几何约束,如果匹配的特征距离极线太远,则很可能被认为是动态的。这种方法的关键是基本矩阵的估计,如果能获得一个相对可靠的基本矩阵,就可以很容易地检测出大部分的动态特征。基本矩阵的获取可以采用纯视觉的方法,如5点算法[10]或8点算法[11]。如果有其他运动传感器,如惯性测量单元(IMU),也可以通过对IMU数据的双积分计算出相机的运动。Lin和Wang[12]基于观察到位姿估计计算中存在动态特征会显著降低SLAM系统的精度而检测动态特征。当跟踪新特征时,计算两个局部slam,一个不添加新检测到的特征,另一个在假设新特征是平稳的情况下添加该特征。使用二值贝叶斯滤波器对两种结果的差异进行临时集成,而不是艰难地决定将特征分类为动态或静态。在固定次数的更新之后,如果对数比值比大于预定的阈值,则可以将该新特征分类为静态特征,否则将该特征分类为移动特征。利用重投影误差检测动态特征是另一种几何方法。邹和谭[13]通过分析地图点的三角测量一致性,将每一帧的地图点分为动态点和静态点。它们将前一帧的特征投影到当前帧中,并测量跟踪特征的重投影误差。如果地图点是静态的,误差应该很小,否则将地图点分类为动态的。Wang等[14]以当前RGB图像、之前图像和当前深度图像为输入,首先将深度图像聚类为多个对象,提取当前RGB图像中的特征,并对每个对象上的特征数量和百分比进行计数。然后利用当前RGB图像与之前RGB图像之间的特征响应来计算基本矩阵,然后使用基本矩阵来过滤掉离群点,再次计算每个对象上剩余的内点数和百分比。剩余的内点用于再次计算基本矩阵,下面的过程与之前相同。最后,基于上述统计特征设计了运动目标判断模型,一旦认为目标是运动的,则消除其所有特征。Sun等[15]采用码本学习和推理机制的形式来处理动态环境中的SLAM问题。他们的运动去除方法包括两个在线并行过程:建立和更新前景模型的学习过程;用构建的模型对前景进行像素智能分割的推理过程。Fan等[16]构建了运动平台的摄像机运动模型,并对运动模式进行分解为两部分:平移和旋转。最后,提出了两个约束条件来定位动态区域。
仅依赖于语义信息的方法是直接的。根据人类的常识和经验,动态物体通常是人、车等可以自行运动的物体。近年来,随着深度学习的快速发展,计算机视觉任务如物体检测和语义分割可以很好地解决,精度甚至可以超过人类。在SLAM系统中,当新帧到来时,通过应用YOLO[17]、SSD[18]、SegNet[19]、Mask-RCNN[20]等先进的CNN架构,可以获取提取特征的语义标签。然后,位于语义动态对象(如人或汽车)上的特征被认为是动态的并被删除。Zhong等[21]利用目标检测网络SSD对人、狗、猫、车等可移动物体进行检测。例如,一旦检测到一个人,无论是行走还是站立,它都被视为一个潜在的移动物体,所有属于该区域的特征都被删除。Zhang等[22]使用YOLO获取语义信息,他们认为总是位于运动物体上的特征是不稳定的,并将其过滤掉。Wang等人[23]提出了一种由目标检测和轮廓提取组成的分步方法,以更高效的计算方式提取动态对象的语义信息。Xiao等[24]利用运行在单独线程中的SSD目标检测网络获取动态目标的先验知识,然后在跟踪线程中通过选择性跟踪算法对动态目标上的特征进行处理,从而显著降低姿态估计的误差。
最近的一些研究将几何计算的动态检测结果与语义信息相结合。Yu等人[25]使用SegNet在单独的线程中获得逐像素语义标签。如果特征被分割为单个,则使用极几何约束进行进一步的移动一致性检查。如果检查结果是动态的,那么所有带有person语义标签的特征将被分类为动态的并被删除。该方法实际上是将带人标签的特征作为一个整体来对待,取两种结果的交集,只有在语义和几何上都是动态的特征才被认为是动态的。Bescos等人[26]将Mask R-CNN的语义分割结果与多视图几何相结合。它们实际上是两种结果的结合:语义动态或几何动态的特征都被认为是动态的。

B.动机

上述动态SLAM系统确实在一定程度上提高了精度。然而,动态特征的去除要么单独依赖几何信息,要么单独依赖语义信息,要么将它们的动态特征去除结果天真地组合在一起。直观地看,这些系统中的几何信息和语义信息是松散耦合的。如果我们能找到一种使它们紧密耦合的方法,将更有效地去除动态特征,从而进一步提高系统的精度。

C.贡献和概述

本文提出了一种面向动态环境的视觉语义SLAM系统,即基于ORB-SLAM2的语义光流SLAM (sofslam)。该框架旨在使系统在动态环境中更加准确,本文提出的sofslam系统利用我们的动态特征检测和去除方法,即语义光流,以紧密耦合的方式检测具有几何和语义信息的动态特征,可以极大地降低环境中动态物体的影响。
我们的贡献可以概括为:本文提出的sofl -SLAM充分利用了语义分割的运动先验信息和极极几何约束的运动检测信息的互补特性,而现有的SLAM系统要么仅仅依赖语义信息或几何信息,要么天真地将两者的结果结合起来去除动态特征。我们在sofslam中提出的动态特征检测算法,即语义光流,利用语义分割信息来辅助极面几何的计算,而不是简单的结果组合。因此,该系统可以更合理有效地去除动态特征,从而获得更准确的结果。
本文的其余部分结构如下:第2节描述了所提出的sofm - slam。本文首先概述了系统概况,其次简要介绍了潜在动态特征的语义分割,并讨论了其局限性。第三,提出了基于几何约束的真实动态特征分割方法及其局限性。随后,我们引入了语义光流算法,该算法能够有效地检测出真实的动态特征。第3节评估了我们的系统在TUM RGB-D数据集上的准确性,并将我们的系统与动态环境中最先进的SLAM系统进行了比较。并进行了实际的定性实验。最后,在第4节中进行了总结

2.语义光流SLAM

在本节中,将详细介绍所提出的sof-slam系统。动态特征检测与去除方法是本文的主要内容。

A.系统概述

所提出的sofslam概述如图2所示。首先,与原ORB- slam2相同,进行ORB特征提取,同时提取静态和动态特征。提出的语义光流动态特征检测方法可以有效地去除动态特征。保留静态特征以参与跟踪线程中新帧的以下位姿估计。局部建图线程的地图点创建和地图维护,闭环线程的回环检测和回环校正过程与原ORB-SLAM2保持一致。语义光流是我们的框架中最重要的模块,所以我们将集中讨论这个模块。
在这里插入图片描述

B.语义光流

动态特征检测与去除的语义光流流程图如图3所示。一方面,利用当前RGB图像提取ORB特征;另一方面,利用SegNet在另一个单独的线程中运行产生的当前RGB图像的语义分割结果,计算当前RGB图像和以前的RGB图像的语义光流。
在这里插入图片描述
我们的动态特征检测方法是将语义光流、语义先验和多视图几何紧密耦合统一起来,实现有效的动态特征检测。接下来,我们将从语义分割的运动先验分析、动态特征检测中的多视图几何约束分析以及如何以紧密耦合的形式有效地利用语义和几何信息三个方面对语义光流进行详细的演示。

1) 基于语义分割的运动先验

在语义分割线程中,我们对每张图像使用SegNet编码器解码器网络来实现逐像素的语义分割。SegNet的体系结构由两个主要模块组成:编码器网络和解码器网络。编码器网络由13个卷积层组成。每个编码器层都有对应的解码器层,因此解码器网络也有13层。首先将输入图像馈送到编码器网络,编码器网络中的每个编码器与滤波器组进行卷积以产生一组特征映射,然后通过批归一化,ReLU (Rectified Linear Unit)激活函数和最大池化过程。然后将编码器网络产生的特征图馈送到解码器网络。解码器网络中的解码器使用从相应编码器特征图中记忆的最大池索引对输入特征图进行上采样。上采样过程可以产生稀疏的特征图。然后将这些特征图与可训练的滤波器组进行卷积,生成密集的特征图。然后对每个图应用批处理规范化步骤。解码器网络的最后解码器输出端的高维特征,被馈送到可训练的soft-max分类器中,该分类器可以生成每个像素的语义标签。
我们采用SegNet的caffe实现来产生逐像素的语义分割。我们使用的SegNet模型是在PASCAL VOC数据集上训练的,它总共可以分割20个类(飞机、自行车、鸟、船、瓶子、公共汽车、汽车、猫、椅子、牛、餐桌、狗、马、摩托车、人、盆栽、羊、沙发、火车、监视器)。
根据像素的语义标签,可以得到像素运动特征的先验信息。例如,如果像素的标签是人,这意味着像素位于一个人身上,我们可以假设这个像素是动态的,并且置信度很高,因为在我们的常识中,人往往是移动的。如果像素的标签是餐桌,我们可以假设这个像素是静态的,置信度很高。如果标签上的像素是椅子,情况就不同了。椅子不能自己移动,所以在正常情况下应该是静态的,但它会随着其他物体的影响而移动,比如人的活动,所以不适合高置信度地决定椅子上的像素是静态的还是动态的。我们认为这类物体上的像素可能是动态的。
利用SegNet,我们可以获得一些关于像素运动特性的先验知识,这有助于提高SLAM系统在动态环境下的精度。一种常用的利用运动先验知识的方法是使用语义分割结果作为掩模来去除动态特征。这种思路简单明了,是提高动态环境下定位精度的一种有效方法。然而,有两个限制。然后我们将详细分析它们。
首先,如上所述,每个像素的先验知识大致可以分为三类:静态、潜在动态和动态。在朴素语义SLAM中,静态特征被保留,动态特征被删除,但对于潜在的动态特征,有两种处理方法,将其视为静态或动态。这两种方式都很麻烦。
图4显示了一个包含潜在动态对象的场景。在这个场景中,有两个显示器和两把椅子,从SegNet的分割中我们可以得到它们的属性应该是潜在的动态的,而它们的实际运动特征是:两个显示器是静态的,左边带轮子的椅子由于坐在上面的人而移动,右边的椅子是静态的。如果我们把所有这些物体上的特征都看作是动态的并将其移除,定位的精度会变差,这是因为在两个显示器和椅子上有很多静态特征,它们的角上的特征是非常明显的,这意味着这种特征可以在连续的帧之间提供准确可靠的匹配。静态特征数量的减少,特别是显著特征的去除,会导致精度下降。如果我们将这些物体上的特征视为静态并保留下来,那么由于左侧椅子上的动态特征也会影响定位的准确性。换句话说,单纯依靠语义分割,不能很好地处理场景中的一些动态部分。
其次,尽管近年来出现的先进CNN架构极大地提高了语义分割的精度,但在物体边界附近的分割结果仍然不可避免地存在歧义。
图5是一个将语义分割结果天真地用作掩码过滤动态ORB特征的示例。在图5(a)中,ORB- slam2提取的ORB特征均匀地分布在图像中,我们可以看到有大量的ORB特征落在人身上,这是该场景的主要动态成分。这些动态特征会降低SLAM系统的定位精度。图5(b)为SegNet生成的语义分割结果,其中红色、粉色、蓝色和深色分别代表chair、person、monitor和void的像素标签。在常见的语义SLAM解决方案中,将图像中语义标签为person的部分作为掩码来去除动态ORB特征。去除效果如图5©所示,我们可以看到躺在人身上的大部分动态ORB特征被去除,而人的腰部、腿部和手部仍保留了一些特征。这是由于人的分割不完整,从图5(b)中可以很容易地观察到。该人员手上的一个ORB特征被分割为具有void语义标签,腰部和腿部的一些ORB特征被误认为是椅子。错误的语义标注导致动态特征的保留,阻碍了系统定位精度的进一步提高。
在这里插入图片描述
在面向动态环境的SLAM问题中,SegNet的语义分割结果确实有助于去除动态特征,但分割结果实际上与场景的运动情况无关。也就是说,无论场景中的物体是动态的还是非动态的,分割结果都应该是相同的。因此需要另一种能够反映场景真实运动情况的信息源。

2)多视图几何约束

利用对极几何属性的几何约束可以用来检查一个特征是动态的还是静态的。在多视图几何中,静态特征必须满足极面约束,而动态特征则不符合标准极面约束。图6(a)为连续两帧对应图像点之间的关系。 X X X是一个静态地图点,它在两个连续的帧中成像, x 1 x_1 x1在帧 I 1 I_1 I1, x 2 x_2 x2在帧 I 2 I_2 I2, C 1 C_1 C1 C 2 C_2 C2分别为 I 1 I_1 I1 I 2 I_2 I2的相机光心,连接 C 1 C_1 C1 C 2 C_2 C2的线成为基线,基线和地图点 X X X确定极平面 π \pi π,平面π与像平面 I 1 I_1 I1 I 2 I_2 I2分别在 L 1 L1 L1 L 2 L2 L2线相交。基线与像面交点称为极点,即图6中的 e 1 e_1 e1 e 2 e_2 e2
在这里插入图片描述
假设现在我们只知道 I 1 I_1 I1中的 x 1 x_1 x1,我们想找到它在 I 2 I_2 I2中的对应 x 2 x_2 x2,如图6(b)所示。在没有深度信息的情况下,我们只知道地图点 X X X位于从 x 1 x_1 x1反投影的射线中,因此我们只知道 x 2 x_2 x2位于极线 L 2 L2 L2上。这个几何约束实际上描述了从一个图像中的点到另一个图像中相应的极线的映射,映射关系可以用基本矩阵F来描述:
在这里插入图片描述
p 1 p_1 p1 p 2 p_2 p2分别为对应图像点 x 1 x_1 x1 x 2 x_2 x2的齐次坐标。给定 I 1 I_1 I1中的点 x 1 x_1 x1和基本矩阵F,(1)给出了如地图点 X X X是静态地图点 x 2 x_2 x2必须满足的约束。因此,我们可以使用此约束来分类与ORB特征相对应的映射点是否是动态的。然而,由于特征提取和基本矩阵F估计中不可避免的不确定性存在,一个静态地图点的两个图像点可能并不严格满足(1)。直观上,像点 x 2 x_2 x2并不完全位于像点 x 1 x_1 x1与基本矩阵F确定的极线上,而是非常靠近,如图7中的 x 2 x_2 x2所示。我们可以计算x2到对应的极线L2之间的距离D。如果D小于预定义的阈值,则认为图像点是静态的,否则认为是动态的。

极几何的关键是基本矩阵F的估计:
在这里插入图片描述
f至少可以用5对特征响应来计算,但通常使用经典的八点算法。以图6中匹配的图像点x1, x2为例,我们可以写出它们的齐次坐标:
在这里插入图片描述
(u1, v1), (u2, v2)分别为x1和x2的像素坐标。由(1)(2)(3)组合得到(4):
在这里插入图片描述
设f表示一个向量,它包含基本矩阵F的所有元素:
在这里插入图片描述
通过展开式(4),我们可以得到关于变量f的方程:
在这里插入图片描述
f中有9个未知元素,但由于基本矩阵f的无标度特性,f的自由度为8。因此,如果我们在两个连续帧之间有8对图像点对应,我们可以通过求解由8个方程组成的方程集(6)来计算f。
对于寻找连续两帧之间对应的图像点,光流是一种方便有效的方法。为了减少错误匹配的影响,采用了RANSAC。事实上,这种方法具有先有鸡还是先有蛋的特点。为了利用对极几何约束检测动态特征,首先需要估计基本矩阵f。另一方面,我们必须使用连续帧中静态地图点的对应关系来估计基本矩阵F。因此,在计算光流的过程中有一个限制:场景中的大多数特征必须是静态的,以便RANSAC可以减少剩余的少数动态特征的影响。

3)紧耦合形式的动态特征检测

为了克服仅使用语义分割先验或多视图几何约束来处理动态特征的缺点,我们提出的语义光流利用语义和几何信息紧密耦合的方式来检测动态ORB特征。
与传统的结合几何信息和语义信息来去除动态特征的方法相比,本文采用了紧密耦合的方法。我们认为这些传统方法是松耦合的。这是因为这些传统方法首先利用几何或语义信息分别检测动态特征,然后通过投票模块将两种结果结合起来。投票策略有两种:如果两个单独的结果都是动态的,则最终结果是动态的[25];如果两个单独的结果中有一个是动态的,则最终结果是动态的[26]。我们首先利用语义信息得到一个相对可靠的基本矩阵F,然后利用F通过几何约束来检测真正的动态特征。在我们的方法中,基本矩阵作为连接这两个信息来源的桥梁,在一个统一的框架中,只做出一个决定,即一个特征是否是动态的。具体的步骤将在下面的部分进行说明。

首先,我们使用SegNet获得运动先验,然后在计算当前帧到当前帧到上一帧的光流时,将运动先验作为掩码去除动态和潜在动态特征的匹配关系。只保留可靠匹配,如图8所示。然后使用语义静态特征的对应关系而不是所有对应关系来计算基本矩阵F。
在这里插入图片描述
利用上面计算的基本矩阵F,利用极线约束来寻找真正的动态特征。在我们的实现中,我们选择1像素作为阈值,认为当前帧中的特征与上一帧中对应的特征距离极线大于1像素的特征才是真正动态的。
图9(a)为单纯利用语义分割结果的朴素语义方法的动态特征去除结果。图9(b)显示了我们的语义光流方法的动态特征去除效果。首先,我们可以看到,躺在移动的人身上的几乎所有特征都被删除了。与朴素语义方法相比,该方法克服了SegNet分割不完整和不准确的特点。第二,确认两个显示器上的特征和右边的椅子是静态的,而左边的椅子上的特征是动态的,它有轮子,随着人的移动。
在这里插入图片描述

3.评估

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.结论和讨论

本文在ORB-SLAM2的基础上,提出了一个语义可视化SLAM系统,即sofslam。我们增加了运行SegNet的单独线程来实现逐像素的语义分割,并提出了一种新的语义光流方法来有效地检测和去除动态特征。该系统克服了单纯利用语义信息或几何信息的缺点,避免简单的结合。我们以紧密耦合的方式利用它们,从而更合理地去除动态特征。为了验证集成语义光流的sofslam的有效性,我们在公开的TUM RGB-D数据集和真实的实验室环境中进行了实验。结果表明,我们的系统对原始ORB-SLAM2在本地化准确性方面有了很大的改进。在高动力序列中,我们的系统平均显示出96.73%的准确性提高了原始的Orb-Slam2。此外,在动态环境中与四个最先进的大满贯系统的比较表明,相对于原始的Orb-Slam2,我们的系统实现了最高的相对RMSE减少。
然而,在我们的系统上还有更多正在进行的工作。我们的制度可以在两个方面加以改进。首先,我们的系统仅利用当前帧和最后一帧这两个连续帧的信息来检测当前帧中的动态特征。我们正在考虑使用更多的图像帧来确定特征的运动特征,这些图像帧可以提供更丰富的时间信息。其次,我们的系统目前采用一种硬决策的方式来决定一个特征是否是动态的。进一步的改进可以通过采用概率框架来计算特征是动态的概率,这将使我们的系统更具鲁棒性。

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

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

相关文章

MySQL不适合创建索引的7种情况

1. 在where中使用不到的字段,不要设置索引 WHERE条件(包括order by ,group by) 2. 数据量小的表最好不要使用索引 表记录太少,比如少于1000个,创建索引会先查索引,再回表,查询花费…

虚拟机安装及使用

无论下载什么软件,最好都要单独设置个文件夹 文章目录 VMware下载CentOS下载Xshell 7下载WinSCP下载linux命令 VMware下载 提示:这里可以添加本文要记录的大概内容: VMware Workstation Pro安装 一直傻瓜式安装 可以上网找许可证秘钥 …

asm: 实现打印“Hello, world!“

使用汇编打印“Hello, world!“ 实现打印"Hello, world!"的汇编代码代码详细剖析 实现打印"Hello, world!"的汇编代码 我们来直接贴代码 section .textglobal _start _start:mov edx,lenmov ecx,msgmov ebx,1mov eax,4 int 0x80mov …

pytest 通过装饰器获取测试case的断言失败结果

test11.py import logging from functools import wrapsdef log_exceptions(func):wraps(func)def wrapper(*args, **kwargs):# 创建日志记录器logger logging.getLogger(func.__name__)logger.setLevel(logging.ERROR)# 创建文件处理器file_handler logging.FileHandler(er…

MySQL(五)缓存策略

MySQL系列文章 MySQL(一)基本架构、SQL语句操作、试图 MySQL(二)索引原理以及优化 MySQL(三)SQL优化、Buffer pool、Change buffer MySQL(四)事务原理及分析 MySQL(五&a…

利用pgloader工具将MySQL数据迁移至PostgreSQL数据库

一、简介 pgloader是一款开源软件,可以将各种来源的数据加载到PostgreSQL数据库中,支持动态读取数据,使用 COPY 流式传输协议将数据加载到 PostgreSQL 数据库中,并使用单独的线程读取和写入数据,由于能够直接从源数据库加载数据。…

1771_Windows下格式化Linux硬盘

全部学习汇总: GreyZhang/little_bits_of_linux: My notes on the trip of learning linux. (github.com) 我自己使用Linux系统多年,但是对于很多操作系统相关的知识我其实并不是很了解。我当初之所以使用Linux一是因为这个系统能够提供给我所有想要的工…

Unity游戏源码分享-Unity手游射击横版游戏

Unity游戏源码分享-Unity手游射击横版游戏 战斗场景 项目地址: https://download.csdn.net/download/Highning0007/88050256

Deployment:让应用永不宕机

“Deployment”,顾名思义,它是专门用来部署应用程序的,能够让应用永不宕机,多用来发布无状态的应用,是 Kubernetes 里最常用也是最有用的一个对象。 Deployment 的关键字段:先看 replicas 字段。它的含义比…

在Vitis IDE中使用第三方库 libtiff 保存 tiff 文件

目的和思路 一个Vitis IDE 裸机项目,需要将视频帧无损地保存下来 由于每帧的像素数据是 16bit 1通道的 bayer 格式,满足这一需求的图像格式似乎只有 tiff 格式 开源的tiff 库是 libtiff,而在 Vitis IDE 裸机项目中要使用的话就需要交叉编译…

AD22软件系统参数的一些基本设置

AD22软件系统参数设置 SystemData managementSchematicPCB Editor System Data management Schematic PCB Editor

集群基础5——keepalived对apache高可用

文章目录 一、基本了解二、配置文件参数释义2.1 默认配置文件2.2 定制配置文件2.2.1 vrrp_instance段配置参数2.2.2 vrrp_script段配置参数2.2.3 real_server段配置参数2.2.4 tcp_check段配置参数 三、keepalived对apache高可用3.1 环境说明3.2 安装服务3.3 配置主服务器3.4 配…

前端编码规范

prettier 配置 1. vscode 安装prettier 的 插件 2. 新建 .prettierrc 文件 {"semi": false, // 不尾随分号"singleQuote": true, // 使用单引号"trailingComma": "none" // 多行逗号分隔的语法,最后一行不加逗号 }eslin…

orbslam3 生成标定板rosrun kalibr kalibr_create_target_pdf --type

rosrun kalibr kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.08 --tspace 0.3小师妹要做相机视觉标定,需要制作棋盘格,无奈其电脑有些卡,对此毫无经验的博主从头开始安装(此前博主已经安装了ROS环境&#x…

精品个人或团队引导页网站HTML源码_好看大气

2023全新宽屏大气好看团队个人指导页网站HTML源码,带音乐视频mv,源码比较小,只有七兆,就因为一个MV占了十几兆。源码也很漂亮,但是有个缺点就是没有手机适配,只能PC浏览器正常显示,手机不能完全…

“探索图像处理的奥秘:使用Python和OpenCV进行图像和视频处理“

1、上传图片移除背景后下载。在线抠图软件_图片去除背景 | remove.bg – remove.bg 2、对下载的图片放大2倍。ClipDrop - Image upscaler 3、对放大后的下载照片进行编辑。 4、使用deepfacelive进行换脸。 1)将第三步的照片复制到指定文件夹。C:\myApp\deepfakeliv…

Java 设计模式——模板方法模式

目录 1.概述2.结构3.案例实现3.1.抽象类3.2.具体子类3.3.测试 4.优缺点5.使用场景6.JDK 源码解析6.1.InputStream6.2.AbstractQueuedSynchronizer 1.概述 (1)在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知…

【代码随想录 | Leetcode | 第三天】数组 | 滑动窗口 | 209

前言 欢迎来到小K的Leetcode|代码随想录|专题化专栏,今天将为大家带来滑动窗口的分享✨ 目录 前言209. 长度最小的子数组总结 209. 长度最小的子数组 ✨题目链接点这里 给定一个含有 n 个正整数的数组和一个正整数target。找出该数组中满足其和 ≥ target 的长度…

docker在arm64架构ubuntu系统的安装

卸载可能存在的旧版本 sudo apt remove docker docker-engine docker-ce docker-io安装依赖使apt可通过HTTPS下载包 sudo apt update && apt install -y apt-tranport-https ca-certificates curl software-properties-commonapt-transport-https用于支持通过HTTPS协…

如何设计光场2.0(聚焦型光场相机)系统参数

1. 系统参数设计 目前的硬件系统的现状:主透镜50mm,MLA:15*15,d0.5mm,f15mm,s4.8um 开普勒型光场系统: 首先我们需要确定系统的M,M参数表示单个位置的点能被多少个小微透镜成像&am…