【三维重建】【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像机实现密集的SLAM。SplaTAM,解决了辐射场的表示的局限性,包括 快速渲染和优化,确定区域是否已经被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。有以下好处:
- 快速渲染,实现丰富的优化
Gaussian Splatting高达400 FPS的渲染速度,是隐式的替代方案,关键因素是3Dprimitives 的栅格化。SplaTAM做了简单修改,,包括去除与视图相关的外观 和 使用各向同性高斯分布。此外,这允许我们实时使用密集光度损失的SLAM,而传统的和隐式映射表示分别依赖于稀疏的三维几何特征或像素采样来保持效率。
- 可以显式延申空间的地图
通过只在观察到的部分场景中添加高斯分布,可以很容易地控制现有地图的空间边界。给定一个新的图像帧,这允许人们通过渲染一个silhouette(轮廓)来有效地识别场景的哪些部分是新的内容(在地图的空间边界之外)。这对于相机跟踪至关重要,因为我们只想将场景的映射区域与新图像进行比较。这对于隐式映射表示来说是困难的,因为网络在对未映射空间的基于梯度的优化过程中会受到全局变化的影响
- 显式地图
通过简单地添加更多的高斯分布,增加map的容量。显式的体积表示能够编辑场景的部分,同时仍然允许逼真的渲染。隐式方法不能轻易地增加它们的能力或编辑它们所表示的场景
- 参数的直接梯度流
场景是用物理三维位置、颜色和大小的高斯表示的,在参数和渲染之间有一个直接的、几乎线性的(投影的)梯度流。因为相机的运动可以被认为是保持相机的静止和移动的场景,我们也有一个直接的梯度到相机的参数,从而实现快速优化。基于神经的表示没有这一点,因为梯度需要流过(可能有很多)非线性神经网络层。
图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估计、场景重建和新视图合成的最新结果方面的有效性。
相关文章:

【三维重建】【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,一个新…...
Go Barrier栅栏
1. 简介 实现与pythonthreading.Barrier库类似的功能,多线程同时等待达到指定数量一起放行。 有待改进地方: wait方法没有支持context控制。 2. 代码 import ("context""golang.org/x/sync/semaphore""sync/atomic" …...
[蓝桥杯 2023 省 B] 冶炼金属
P9240 [蓝桥杯 2023 省 B] 冶炼金属 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 参考题解: #C3150——蓝桥杯2023年第十四届省赛真题-冶炼金属(分块)-Dotcpp编程社区 https://www.bilibili.com/video/BV1wc411x7KU/?spm_id_from333.1007.top_right_bar_windo…...
续Java的执行语句、方法--学习JavaEE的day07
day07 一、特殊的流程控制语句 break(day06) continue 1.理解: 作用于循环中,表示跳过循环体剩余的部分,进入到下一次循环 做实验: while(true){ System.out.println(“111”); System.out.println(“222”); if(true){ conti…...

公网IP怎么获取?
公网IP是网络中设备的唯一标识符,用于在Internet上进行通信和定位。对于普通用户来说,了解如何获取自己的公网IP是很有必要的,本文将介绍几种获取公网IP的方法。 方法一:通过路由器查询 大多数家庭和办公室使用的路由器都会有一个…...
连接未来:探索嵌入式系统的智能化之路
连接未来:探索嵌入式系统的智能化之路 嵌入式系统的智能化是连接未来的关键之一。以下是对这一主题的小点论述: 1. 嵌入式系统的定义和特点 嵌入式系统是一种特殊用途的计算机系统,通常嵌入在其他设备中,具有小巧、低功耗、实时…...

基于STM32制作的示波器(可对任意信号进行描点)
基于STM32制作的示波器(可对任意信号进行描点) 注意:用的屏幕是TFT-LCD(MCU 屏)正点原子同款屏幕 液晶显示器,即 Liquid Crystal Display,利用了液晶导电后透光性可变的特性,配合显…...

WEB APIs (5)
window对象 BOM(浏览器对象模型) 其为js操作浏览器提供了方法 window对象是一个全局变量,是BOM树根节点 BOM的属性和方法都是window的,如document、console.log()等 var定义在全局全局作用域中的变量、函数都会变成window对象…...
物联网常见协议篇
在物联网环境中,物联网协议承担着关键作用,而新手了解物联网协议如传输协议、通讯协议和行业协议等。 一、物联网协议 物联网协议是物联网环境中的关键组成部分,它承担着设备间通信和数据传输的重要任务。这些协议根据其作用的不同ÿ…...

Kubernetes-1
学习Kubernetes第一天 k8s-11、什么是Kubernetes2、配置Kubernetes2.1、准备三台全新的虚拟机2.2、关闭防火墙和SElinux2.3、修改主机名2.4、升级操作系统(三台一起操作)2.5、配置主机hosts文件,相互之间通过主机名互相访问2.6、配置master和node之间的免密通道2.7、…...
SpringMVC框架②
三、RequestMapping注解 3、RequestMapping注解的value属性 必须设置 发送一个请求最直观的表示方式就是一个请求路径 altenter 进入接口方法 再用 alte7 查看里面的属性 value值可以是数组 value{"test","test1"} 只满足任何一个请求地址就会调用此方…...

springboot230基于Spring Boot在线远程考试系统的设计与实现
在线远程考试系统设计与实现 摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到…...

盘点:国家智能算力中心
文章目录 1. Main2. My thoughtsReference 1. Main 按照《中国算力白皮书(2022年)》的定义,算力主要分为四部分:通用算力、智能算力、超算算力、边缘算力。通用算力以CPU芯片输出的计算能力为主;智能算力以GPU、FPGA、…...
【C++】7-2 寻找完美数 分数 10
7-2 寻找完美数 分数 10 全屏浏览 切换布局 作者 李祥 单位 湖北经济学院 所有真因子之和小于其本身的数称为亏数。 如:4 的真因子 1、2 之和为 3,小于 4,是亏数。 所有真因子之和大于其本身的数称为盈数。 如:12 的真因子 1…...

基于Mahout实现K-Means聚类
需求分析 需要对数据集进行预处理,选择合适的特征进行聚类分析,确定聚类的数量和初始中心点,调用Mahout提供的K-Means算法进行聚类计算,评估聚类结果的准确性和稳定性。同时,需要对Mahout的使用和参数调优进行深入学习…...
科技的成就(五十七)
535、Machine Learning "1959 年 7 月,塞缪尔首创 Machine Learning 一词。塞缪尔在“Some Studies in Machine Learning Using theGame of Checkers”一文中给 Machine Learning 下了个非正式定义:没有明确编程指令的情况下,能让计算机…...

动态IP代理技术在网络爬虫中的实际使用
目录 一、动态IP代理技术概述 二、动态IP代理技术的优势 三、动态IP代理技术的实际应用 四、注意事项 五、案例分析 六、结论 随着互联网的迅猛发展,网络爬虫成为了获取信息、分析数据的重要工具。然而,在进行大规模爬取时,爬虫常常面临…...

计算机网络:深入探索HTTP
引言: HTTP,全称超文本传输协议(Hypertext Transfer Protocol),是互联网上数据通信的基础。它定义了客户端(如浏览器)和服务器之间如何交互和传输数据。HTTP最初是为了支持Web浏览而设计的&…...

Netty(1)nio
一. NIO 基础 non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 st…...

1.3 vue ui框架-element-ui框架
1 前言 ElementUI是一套基于VUE2.0的桌面端组件库,ElementUI提供了丰富的组件帮助开发人员快速构建功能强大、风格统一的页面。 ElementUI官网 https://element.eleme.io 2 安装 运行命令 cnpm i element-ui -S -S表示只在该项目下安装,不是全局安…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...

使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...

边缘计算网关提升水产养殖尾水处理的远程运维效率
一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...