【三维重建】Semantic Gaussians:开放词汇的3DGS场景理解

在这里插入图片描述


文章目录

  • 摘要
  • 一、引言
  • 二、主要方法
    • 1.3D Gaussian Splatting
    • 2.其他方法
      • 2.1 Gaussian Grouping(ECCV 2024)
      • 2.2 GARField
    • 3. 2D Versatile 投影
    • 4. 3D Semantic Network
    • 4. 推理
  • 四、实验
    • 1. 实验设置
    • 2.定量结果

论文:https://arxiv.org/pdf/2403.15624
来源:BIGAI和清华大学


摘要

  开放词汇的三维场景理解是计算机视觉中的一个重大挑战,在具体化代理和增强现实系统中有着广泛的应用。现有的方法采用神经渲染方法作为三维表示,联合优化颜色和语义特征,同时实现渲染和场景理解。本文介绍了一种基于三维高斯溅射的开放词汇场景理解方法语义高斯。我们的关键思想是 将知识从二维预训练模型提取为三维高斯模型 。与现有的方法不同,我们设计了一种通用的投影方法,将预先训练好的图像编码器映射到一个新的三维高斯的语义component ,这是基于空间关系,不需要额外的训练。我们 进一步建立了一个三维语义网络,直接从原始的三维高斯数据中预测语义成分 ,以进行快速推理。 实验在ScanNet segmentation和LERF目标定位上做了定量对比。此外还探索了语义高斯算法的一些应用,包括对象部分分割、实例分割、场景编辑和时空分割,在二维和三维基线上具有更好的定性结果

  

  


一、引言

  开放词汇表的三维场景理解是计算机视觉中的一项重要任务。给定一个3D场景,其目标是用自由形式的自然语言来理解和解释3D场景,也就是说,而不受限于一组预定义的对象类别。允许开放词汇表场景查询使机器能够更有效地与环境交互,促进诸如对象识别、语义场景重建和在复杂多样的环境中导航等任务。开放词汇3D场景理解在各种现实应用中具有重要意义,如机器人技术和增强现实。

  多视图图像是3D场景最直接的表示,但允许开放词汇理解通常涉及2D视觉语言模型,难以在不同视图的一致性,可能是由于缺乏视觉几何知识;点云很流行和研究,但点云固有的稀疏性限制了开放词汇场景理解在上的应用

  以往方法[4]、[5]、[8]-[16]的一个主要分支是采用NeRF或3DGS等神经渲染方法作为3D表示,共同优化颜色成分和语义特征,实现任意2D视图的高质量渲染和3D场景理解。语义知识通常是从开放词汇表的二维基础模型中提取出来的,如CLIP 或LSeg ,它们在训练视图上预测的输出在优化过程中充当了弱监督

  本文提出Semantic Gaussians,基于三维高斯溅射的优点的开放词汇表三维场景理解的方法。核心思想是将预先训练好的二维编码器中提取成三维高斯,从而为每个高斯点分配一个语义分量。为了实现这一点,我们建立了二维像素和三维高斯点之间的对应关系,并提出了一个通用的投影框架来将二维像素的语义特征映射到每个三维高斯点上,可以利用任意预先训练过的2D模型,如OpenSeg 、CLIP 、VLPart 等,在2D RGB图像上生成像素级的语义特征,不需要额外训练来将语义组件注入到三维高斯模型中,允许有效的开放词汇表场景查询。

  除了投影,还引入了一个三维语义网络MinkowskiNet[21,一个三维稀疏卷积网络],它直接从原始三维高斯中预测开放词汇语义成分。网络以原始的RGB高斯数据作为输入,并由上述投影方法得到的高斯数据的语义成分进行监督。因此,我们可以简单地运行这个网络来获得语义组件,从而实现更快的推理。该网络利用几何属性来理解看不见的场景,提高了我们的方法超越二维投影的通用性和鲁棒性。需要注意的是,三维语义网络的预测可以与投影特征相结合,进一步提高高斯中语义组件的质量和开放词汇表场景理解性能。

  

二、主要方法

1.3D Gaussian Splatting

  本文采用三维3D Gaussian Splatting作为三维场景的表示,其以可区分的方式从任意视点渲染图像,从而有效地利用各种二维基础模型的知识。具体来说,我们通过使用3DGS从指定的视点渲染二维语义图像,来实现场景理解

  3DGS由一组可学习的三维高斯点组成,其中每个点都有一个三维坐标µ表示其位置,一个协方差矩阵Σ表示其形状,球面谐波参数c代表其颜色,一个不透明度值α代表其透明度。3DGS可以由多视图图像构建,并可以利用来自运动结构(SfM)点云[48]的信息进行初始化,从而获得更好的渲染质量和几何结构。

  3DGS使用基于点的 α α α混合来计算2维图像上的像素值。每个像素C的值通过沿射线的体积渲染给出:

在这里插入图片描述
将三维高斯分布投影到某个二维平面上,从相机的角度计算协方差矩阵 Σ ′ Σ' Σ的方法为(W是world-to-camera变换矩阵,J是投影变换的仿射近似的雅可比矩阵):

在这里插入图片描述

其中。如果我们跳过 Σ ′ Σ' Σ的第三行和列,我们可以得到二维方差矩阵。为了保证正半定性,将协方差矩阵Σ分解为旋转矩阵 R R R和缩放矩阵 S S S

在这里插入图片描述

  3DGS可以看作是一个具有附加特性的特殊点云,因此具有点云的一些特性。一个直观的思想是将基于空间关系的语义信息投射到相应的高斯点上,而不是通过可微栅格化和渲染 在渲染语义映射时,如果不考虑复杂的光照条件,只考虑几何位置的对应关系就足够了 。在此基础上,我们提出了语义高斯算法来实现多功能场景理解。

2.其他方法

2.1 Gaussian Grouping(ECCV 2024)

  保留了高斯模型的所有属性(如它们的数量、颜色、不透明度和大小),同时添加了新的身份编码参数(类似于颜色,是一个长度为16的可学习的、紧凑的向量,足以以计算效率区分场景中的不同对象/部分),并使用了一个训练有素的zero-shot tracker 来传播和关联mask。使得每个高斯分布被分配给其在3D场景中所表示的实例或东西

在这里插入图片描述
  二维ID损失。为了优化ID编码,将ID 向量以可微的方式渲染为二维图像。从原始GS中提取可微的三维高斯渲染器,并将渲染过程类似于gs中的颜色(SH系数)优化。  GS采用神经点的 α ′ α' α 渲染[18,19],进行深度]排序和混合N个与像素重叠的有序点,计算所有高斯分布对单个位置像素的影响。将2D特性 E i d E_{id} Eid作为输入,使用一个线性层 f f f,将特征维数恢复到K+1,然后取 s o f t m a x softmax softmax( f f f( E i d E_{id} Eid))进行ID分类(K是3D场景中的mask总数),采用标准的交叉熵损失 L 2 d L_{2d} L2d进行K+1类别分类。

在这里插入图片描述

  2.三维正则化损失。除了间接的二维监督,还引入无监督的三维正则化损失来约束ID编码 e i e_i ei的学习:利用三维空间一致性,通过最近的 k个三维高斯分布的ID编码与其特征距离拉近。这允许3D对象内部的三维高斯分布,或在基于点的渲染期间被严重遮挡(在几乎所有的训练视图中都不可见)得到更充分的监督。公式3的 F F F表示为与线性层(在计算二维身份损失时共享)相结合的softmax操作。用m个采样点将KL散度损失形式化为:

在这里插入图片描述

  

2.2 GARField

在这里插入图片描述
   GARField以pose图像为输入,生成一个分层的三维场景分组,以及一个标准的三维体积辐射场和一个有尺度条件的亲和场。首先用SAM得到输入图像的候选mask。接下来,通过输入的三维位置和欧式尺度,优化一个体积辐射场和亲和场,并输出一个特征向量。亲和度是通过比较点对的特征向量来获得的。优化后,生成的亲和字段可以用于分解场景,通过以粗到细的方式递归地聚类三维特征嵌入,或者用于分割用户指定的查询。整个管道如图3所示。
在这里插入图片描述

  Scale-Conditioned Affinity Field(尺度条件亲和场) 。在尺度分割条件下,同一点的冲突掩模在训练过程中不再相互对抗,而是在不同的亲和尺度下在同一场景中共存。  我们在三维点 x 和欧氏尺度 s 上定义了尺度条件亲和场 Fg(x,s)→Rd,类似于LERF [13]。输出特性被限制在一个单位超球体内,在一个尺度上两点之间的亲和性由 A(x1,x2,s)= −||Fg(x1,s)−Fg(x2,s)||2 定义。这些特征可以使用基于NeRF密度的相同渲染权重,以加权平均值进行体渲染,以获得每条射线的值。

  对比监督。根据DrLIM [9],采用margin-based contrastive 对比目标进行监督。损失又两部分组成:给定的尺度下,同一组中的特征接近,不同组中的特征分开。  具体来说,从同一训练图像中采样掩模 MA、MB 的两条射线rA、rB,以及相应的尺度 sA和sB。我们可以沿每条射线,以体渲染方式得到尺度条件的亲和特征 FA和FB。如果MA=MB,特性将通过L2距离拉在一起: Lpull= ||FA−FB||;反之,特性将被分开: Lpush = ReLU(m−||FA−FB||),其中m是下界距离或边界。这种损失只适用于从同一图像中采样的射线,因为在不同视点上的掩模没有对应关系。

  

  

  

  

3. 2D Versatile 投影

  通用的特征投影方法:从一个二维预训练的模型中提取RGB图像的像素级语义映射,并将其投影到一个场景的三维高斯分布中。

   1) 语义映射提取:我们的方法从某一场景的三维高斯G开始。由于三维高斯溅射的逼真渲染性能,Semantic Gaussians可以在没有二维GroundTruth图像的情况下运行。给定形状为 H × W H×W H×W的RGB图像 I I I,Semantic Gaussians 的目的是从任意的二维视觉语言模型 ϵ 2 D \epsilon^{2D} ϵ2D 中得到由 s ∈ R H × W × C s∈R^{H×W×C} sRH×W×C表示的像素级语义映射。获得每像素语义映射的最直接的途径是利用像素级分割模型,如OpenSeg。然而,利用其他编码器,例如VLPart [20]可以帮助处理对象的组件(part)的语义(OpenSeg没这个功能)。此外,不同类型模型的特征可以集成,产生更准确的结果

  2) 统一SAM与各种2D特征:适应各种2D预训练特征是重要的,因为它们可以是像素级分割网络(如OpenSeg ,LSeg )、实例级识别网络(如DINO,VLPart)或图像级分类网络(如CLIP)。此外,Semantic Gaussians 能够利用 SAM来为每个模型生成精细的分割映射。对于像素级模型,SAM可以细化分割边界。给定一个RGB图像 I I I,使用SAM中的 everything prompt 来生成 N N N个二进制掩码 M 1 , ⋅ ⋅ ⋅ , M N M_1,···,M_N M1⋅⋅⋅MN。我们计算每个mask M i M_i Mi的embedding的平均池化,并将其分配为该mask中所有像素的embedding: s [ M i ] = A v g P o o l ( s [ M i ] ) s[M_i] = AvgPool(s[M_i]) s[Mi]=AvgPool(s[Mi])

  对于实例级模型,与Ground-SAM类似,使用预训练模型的预测结果作为SAM的方框提示符。在得到二进制mask后,将该实例的CLIP embedding分配给实例区域内的所有像素。对于图像级模型,SAM可以作为一个预处理模块来获取区域建议。我们使用SAM中的“everything” prompt 来获得不同的建议区域。每个区域都被填充、裁剪和调整到224×224,并输入图像级模型以获得语义embedding,并分配给每个proposal区域内的所有像素。

  3) 2D-3D Projection and Fusion. 获取逐像素语义映射后,语义高斯映射将其投影为三维高斯映射,得到语义成分。对于语义映射s中的每个像素 u = ( u , v ) u =(u,v) u=(u,v),语义高斯函数试图寻找空间中是否存在相应的三维高斯点 p = ( x , y , z ) p =(x,y,z) p=(x,y,z)。针孔相机模型下,利用内参矩阵 K K K和world-to-camera矩阵 E E E 投影可以表示为 u ~ = K ⋅ E ⋅ p ~ \tilde{u}=K·E·\tilde{p} u~=KEp~ ,其中~为齐次坐标。在这个投影之后,每个像素u将对应于三维空间中的一束射线,执行3DGS的深度渲染,来将二维语义投影到三维空间中的表面点。在体渲染过程中,不透明度从近到远累积。因此,我们设置了一个不透明度阈值 α d α_d αd,来判断光线被物体遮挡。我们不需要来自数据集的地面真实深度

  二维像素和三维高斯点配对时,假设三维空间中的某个高斯点 p p p具有一组来自 K K K个不同观点的二维语义, 可以通过平均池化融合: s p 2 D = A v g P o o l ( s 1 , ⋅ ⋅ ⋅ , s K ) s^{2D}_p= AvgP ool(s_1,···,s_K) sp2D=AvgPool(s1⋅⋅⋅sK)

4. 3D Semantic Network

  为了从原始三维高斯中预测语义成分,构建一个三维语义网络 f 3 D f^{3D} f3D 来实现这一点:给定三维高斯 G G G,预测point-wise的语义分量 s 3 D s^{3D} s3D,并使用融合特性 s 2 D s^{2D} s2D 来监督三维模型。损失函数为余弦相似度损失:

在这里插入图片描述

  使用MinkowskiNet作为我们的三维模型的主干(一种为点云设计的三维稀疏卷积网络)。将透明度、颜色和协方差设置为三维模型的输入特征,输出为每个高斯点的语义嵌入 s 3 D s^{3D} s3D。3D模型通过处理三维几何信息而不是多个二维视图来识别场景,使结果更加一致,且推理速度比二维投影要快得多

  

4. 推理

  语言驱动的开放词汇场景理解。给定一个自由形式的语言查询,使用CLIP文本编码器将提示编码到文本嵌入 t t t。我们计算文本嵌入与每个三维高斯点的语义分量之间的余弦相似度,匹配的高斯值将被视为与查询的对应。以语义分割和部分分割为例,对N个语义类的标签分别编码为 t 1 、 ⋅ ⋅ ⋅ 、 t N t_1、···、t_N t1⋅⋅⋅tN。计算了这些文本嵌入和三维高斯矩阵的语义嵌入之间的余弦相似度:

在这里插入图片描述

选择 c n 2 D c^{2D}_n cn2D c n 3 D c^{3D}_n cn3D中较大的值作为类 t n t_n tn的余弦相似度。softmax函数后的相似度{ c 1 , ⋅ ⋅ ⋅ ⋅ , c n c_1,····,c_n c1⋅⋅⋅⋅cn}是每个类的置信度分数,将其splat到2D视图上,就能得到一个二维语义分割图

四、实验

1. 实验设置

  数据集ScanNet是一个室内场景的大规模分割基准,具有校准的RGBD轨迹、3D点云和语义label。我们对所有1201个场景训练3D RGB高斯训练。验证集评估12个场景的性能。为了与闭集方法进行比较,将ScanNet-20类映射到来自COCO数据集中的21个类。

  对于三维对象定位任务,选择LERF [5]数据集作为我们的基准。LERF数据集提供了几个包含长尾对象和多尺度语义的3D场景。该数据集由iPhone应用程序Polycam捕获,以获得多视图图像和SfM点。

  对于定性评估,选择MVImgNet [23]数据集作为我们的部分分割数据集,而CMU全景[52]数据集作为时空跟踪数据集。MVImgNet是一个多视图的单对象数据集,包含238类对象的相机参数和稀疏点云。CMU全景数据集是一个用于多人参与社会活动的大规模数据集。对于语言引导的编辑,我们在Mip-NeRF 360 [53]数据集中选择了一些场景来显示我们的性能

  实现细节:NVIDIA RTX 4090 GPU上训练,RGB高斯网络训练10000次迭代,对三维语义网络训练100个时代。在场景级语义分割实验中,我们应用LSeg生成二维投影的像素级开放词汇表语义特征。对于3D语义网络,我们使用闵可夫斯基网34A[21]作为骨干。对于3D对象定位任务,我们都使用了带有SAM和LSeg的CLIP作为我们的2D预训练模型。

  对于零部件分割和时空跟踪,使用VLPart作为投影模型。为了评估我们在四维高斯上的语义高斯,我们遵循动态三维高斯[24]的工作,得到了具有时间信息的动态高斯。

2.定量结果

  我们从LSeg中提取语义特征来进行二维投影和三维网络训练。因此,本节中的结果将显示我们的方法将从二维视觉语言模型中改进多少

表1显示了不同方法的性能。可以观察到,我们的语义高斯方法超过了mIoU和mAcc中所有的开放词汇表方法,并且非常接近于最先进的闭集方法的性能
在这里插入图片描述

虽然我们的3D网络的mIou和mAcc低于二维投影,但2D和3D集成将进一步提高我们的性能。我们推测,某些场景中的某些物体由于其质量较低,无法在所有视图中都被二维模型正确识别,而三维网络可以利用几何细节来识别它们

在这里插入图片描述

  图3显示,LERF和LangSplat的分割精度较低。这主要是因为它们利用多尺度的CLIP特征来理解场景,而CLIP特征很难在像素级上与场景精确对齐,这使得它们不适合生成像素级的语义分割地图。另一方面,PVLFF、Fetatre3DGS和语义高斯都采用LSeg来实现开放词汇表场景理解。作为一种基于nerf的方法,PVLFF的性能相对较差,而且渲染速度也较慢。特征3DGS和我们的方法产生了非常相似的性能,特征3DGS甚至在某些视图中实现了更精确的分割。但是,Festagre3DGS需要对每个场景的语义3DGS进行再训练,其效率和灵活性较低

  

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


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

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

相关文章

华为OD机试真题-仿LISP计算

题目描述: LISP 语言唯一的语法就是括号要配对。 形如(OP P1 P2 …),括号内元素由单个空格分割。 其中第一个元素 OP 为操作符,后续元素均为其参数,参数个数取决于操作符类型。 注意: 参数 P1,P2 也有可能是另外一个嵌套的 (O…

centos7的maven配置

首先进入conf配置文件夹下的setting.xml 要改两个地方 第一&#xff1a;设置镜像源 <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>c…

思考:linux Vi Vim 编辑器的简明原理,与快速用法之《 7 字真言 》@ “鱼爱返 说 温泉哦“ (**)

Linux vi/vim | 菜鸟教程 https://zhuanlan.zhihu.com/p/602675406 Linux Vim编辑器的基本使用_vim文本编辑器-CSDN博客 思考 1. 记忆公式&#xff1a; 按键操作的 7 字真言 1&#xff1a; "鱼爱返 说 温泉哦" v i Esc : wq ! ----------- 一般的简单…

Web服务nginx基本实验

安装软件&#xff1a; 启动服务&#xff1a; 查看Nginx服务器的网络连接信息&#xff0c;监听的端口&#xff1a; 查看默认目录&#xff1a; 用Windows访问服务端192.168.234.111的nginx服务&#xff1a;&#xff08;防火墙没有放行nginx服务&#xff0c;访问不了&#xff09; …

Ubuntu实现双击图标运行自己的应用软件

我们知道在Ubuntu上编写程序&#xff0c;最后编译得到的是一个可执行文件&#xff0c;大致如下 然后要运行的时候在终端里输入./hello即可 但是这样的话感觉很丑很不方便&#xff0c;下边描述一种可以类似Windows上那种双击运行的实现方式。 我们知道Ubuntu是有一些自带的程序…

【JAVA】正则表达式中的捕获组和非捕获组

在Java中&#xff0c;正则表达式中的捕获组&#xff08;Capturing Groups&#xff09;和非捕获组&#xff08;Non-Capturing Groups&#xff09;是用来对匹配的部分进行分组的技术。它们在处理复杂的匹配模式时非常有用。 捕获组 (Capturing Groups) 捕获组不仅将一部分正则表…

openresty入门教程:init_by_lua_block

init_by_lua_block 是 Nginx 配置中用于在 Nginx 启动时执行 Lua 脚本的一个指令。这个指令通常用于初始化全局变量、设置共享内存&#xff0c;或者执行一些需要在服务器启动时完成的准备工作。 以下是一个简单的 init_by_lua_block 使用示例&#xff1a; 1. 安装 Nginx 和 L…

Python小白学习教程从入门到入坑------第二十六课 单例模式(语法进阶)

在这个节课的开始&#xff0c;我们先回顾一下面向对象课程中学的构造函数__init__() 目录 一、__init__() 和 __new__() 1.1 __init__() 1.2 __new__() 二、单例模式 2.1 特点 2.2 通过classmethod实现单例模式 2.3 通过装饰器实现单例模式 2.3 通过重写__new__() 实现…

x-cmd pkg | onefetch - 轻松获取 Git 仓库统计信息,打造个性化输出!

目录 简介首次用户功能特点常见用法类似或相关的工具进一步阅读 简介 onefetch 是由 Ossama Hjaji 用 Rust 编写的命令行 Git 信息工具&#xff0c;可将本地 Git 存储库的项目信息和代码统计信息直接显示到您的终端。该工具完全离线 - 不需要网络访问。 首次用户 本文的 dem…

基于IM场景下的Wasm初探:提升Web应用性能|得物技术

一、何为Wasm &#xff1f; Wasm&#xff0c;全称 WebAssembly&#xff0c;官网描述是一种用于基于堆栈的虚拟机的二进制指令格式。Wasm被设计为一个可移植的目标&#xff0c;用于编译C/C/Rust等高级语言&#xff0c;支持在Web上部署客户端和服务器应用程序。 Wasm 的开发者参…

现场工程师日记-MSYS2迅速部署PostgreSQL主从备份数据库

文章目录 一、概要二、整体架构流程1. 安装 MSYS2 环境2. 安装postgresql 三、技术名词解释1.MSYS22.postgresql 四、技术细节1. 创建主数据库2.添加从数据库复制权限3. 按需修改参数&#xff08;1&#xff09;WAL保留空间&#xff08;2&#xff09;监听地址 4. 启动主服务器5.…

《应用数学和力学》

作者须知 1.《应用数学和力学》(Applied Mathematics and Mechanics)于1980年由我国著名科学家钱伟长先生在重庆交通大学创办&#xff0c;创刊时为季刊&#xff0c;翌年增为双月刊&#xff0c;1985年起扩大为月刊。期刊主要刊登力学、力学中的数学方法和与现代力学紧密相关的应…

【CSS】标准怪异盒模型

概念 CSS 盒模型本质上是一个盒子&#xff0c;盒子包裹着HTML 元素&#xff0c;盒子由四个属性组成&#xff0c;从内到外分别是&#xff1a;content 内容、padding 内填充、border 边框、外边距 margin 盒模型的分类 W3C 盒子模型(标准盒模型) IE 盒子模型(怪异盒模型) 两种…

什么是PHP,有什么特点

PHP 简介 PHP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛使用的开源脚本语言&#xff0c;特别适合 Web 开发。PHP 代码可以直接嵌入到 HTML 中&#xff0c;也可以作为独立的脚本文件运行。PHP 的设计目标是使开发者能够快速编写动态和交互式的 Web 应用程序。P…

[前端项目Overview]表单构建器vue-form-generator

GitHub - vue-generators/vue-form-generator: :clipboard: A schema-based form generator component for Vue.js vue-generator-form 是一个基于 Vue.js 的表单生成器项目&#xff0c;用于动态地生成表单。它主要用于处理复杂的动态表单需求&#xff0c;比如根据 JSON 配置自…

Android中桌面小部件framework层使用到的设计模式

在Android中&#xff0c;桌面小部件&#xff08;App Widget&#xff09;的Framework层采用了多种设计模式&#xff0c;以实现模块化、可维护性和高效的交互。 以下是Android桌面小部件Framework层中常用的设计模式及其具体应用&#xff1a; 1. 观察者模式&#xff08;Observe…

半波正弦信号的FFT变换

目录 Hello&#xff0c; 大家好&#xff0c;这一期我们谈谈半波正弦信号的FFT变化长什么样子。本文硬件使用GFARM02硬件模块[1]&#xff0c;文章最后有其淘宝链接。核心器件为STM32F103RCT6&#xff0c;为Cortex-M3核&#xff0c;采用的CMSIS版本为CMSIS_5-5.6.0。 如图1所示&…

基于SpringBoot和Vue的公司文档管理系统设计与开发(源码+定制+开发)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

nvm 切换 Node.js 版本

nvm 切换 Node.js 版本 0. nvm 安装1. 查看装了哪些 Node.js 版本2. 安装 Node.js 版本安装最新稳定版本.安装个18 3. 切换 Node.js 版本4. 设置默认 Node.js 版本5. 卸载 Node.js 版本6.与项目的配合使用参考资料 0. nvm 安装 安装教程就不写了&#xff0c;直接看别人的。 脚…

深度学习:解密图像、音频和视频数据的“理解”之道20241105

&#x1f50d; 深度学习&#xff1a;解密图像、音频和视频数据的“理解”之道 深度学习已然成为人工智能领域的中流砥柱&#xff0c;它如何处理不同类型的数据&#xff08;如图像、音频、视频&#xff09;&#xff1f;如何将这些数据转换成计算机能理解和学习的“语言”&#…