【论文笔记】多个大规模数据集上的SOTA绝对位姿回归方法:Reloc3r
abstract
视觉定位旨在确定查询图像相对于姿势图像数据库的相机姿势。 近年来,直接回归相机姿势的深度神经网络由于其快速推理能力而受到欢迎。 然而,现有方法很难很好地推广到新场景或提供准确的相机姿态估计。 为了解决这些问题,我们提出了 Reloc3r,一个简单而有效的视觉本地化框架。 它由设计优雅的相对姿态回归网络和用于绝对姿态估计的极简运动平均模块组成。 经过大约 800 万个姿势图像对的训练,Reloc3r 取得了令人惊讶的良好性能和泛化能力。 我们对 6 个公共数据集进行了广泛的实验,一致证明了所提出方法的有效性和效率。 它实时提供高质量的相机姿态估计并推广到新颖的场景。
1. Introduction
视觉定位,也称为相机重新定位,是计算机视觉、机器人和图形领域的一个关键挑战。 它对于许多应用至关重要,包括增强现实和机器人导航。 该过程涉及将新的查询图像注册到姿势图像或 3D 模型的数据库中。 这通常是通过估计数据库定义的世界坐标系内的 6 自由度 (6-DoF) 相机姿势来完成的。(6自由度相机姿态)是指相机在三维空间中的位置和方向,具体包括6个参数,分别描述了相机在空间中在xyz三个轴上的平移和旋转。
传统的视觉定位方法依赖于运动结构(SfM)技术[27,78,87] 构建 3D 模型。 这些方法将查询图像中的像素匹配到 3D 场景点,然后使用几何优化解决相机pose估计。 虽然这些方法以其高定位精度而闻名,但在测试时往往效率低下,这限制了它们实时应用程序的可扩展性。 场景坐标回归方法[13-16,30,52,53]提供了像素到3D点对应关系的另一种视角。 这些方法使用神经网络来学习隐式场景表示,然后用于推断密集对应关系。 然而,它们中的大多数都面临普遍化的局限性。 此外,这些方法通常需要密集的监督,例如GT关键点匹配或 3D 点图,这使得扩大训练数据变得具有挑战性。
绝对姿态回归【Absolute pose regression(APR)】方法直接从图像回归相机位姿,提供了更快的推理时间和高精度。然而,这些方法本质上是特定于场景的,并且通常在训练时需要密集的视点覆盖,这限制了它们在实际中的应用。最近的一些尝试 [20–22, 57, 68] 通过合成数据生成来提高精度,但引入了显著的计算开销,阻碍了它们的广泛部署。相比之下,相对姿态回归【relative pose regression(RPR)】方法估计数据库图像和查询图像之间的相对姿态。这些方法减轻了每个场景的训练需求,同时保持了APR模型在测试时间的高效性。然而,即使是最先进的RPR方法 [4, 29, 99, 113] 在定位精度上仍未达到APR方法的水平。虽然一些RPR方法 [4, 48, 99, 113] 展示了在不同数据集之间泛化的能力,但这通常会导致相机姿态精度的进一步降低。因此,上述大多数方法在以下三个标准中的一个或多个方面存在困难:新场景的泛化能力、测试时间的效率和相机姿态精度。
我们提出了 Reloc3r(读作,哈哈哈!),这是一个简单却非常有效的视觉定位框架。Reloc3r 从最近的基础模型中汲取灵感。这些模型利用可扩展的网络架构(如Transformer [32, 40])和大规模训练,展示了在各种任务中的强大性能和出色的泛化能力。我们采用了 DUSt3R [109] 的架构作为骨干网络,并应用了简洁而优雅的修改来构建一个相对姿态回归网络。我们的主要贡献可以总结如下:
我们引入了 Reloc3r,一个简单却非常有效的视觉定位框架。它能够在新场景中实现优秀的泛化能力、快速的测试时间效率以及高精度的相机姿态估计。所提出的完全对称的相对姿态回归网络和运动平均模块都遵循简约原则。这种精简的方法使得大规模训练更加高效。
2. Related Work
Structure-based visual localization:基于结构的定位流程是一种通过多视角几何 [38] 解决相机姿态的成熟方法。现代方法 通常包括两个主要步骤:1) 建立图像之间或像素与预建3D模型之间的对应关系,2) 从噪声对应关系中稳健地求解相机姿态。这些对应关系是通过特征点匹配或场景坐标回归获得的。然后应用稳健估计器来估计最终的相机姿态。尽管这些方法非常有效,但它们通常具有较慢的推理时间,这限制了它们在实时应用中的使用。最近,提出了一些以效率为导向的变体 [59, 110] 以加速匹配过程。然而,复杂的系统设计和稳健估计的高计算成本仍然是瓶颈。这些方法通常需要GT对应关系或3D点云图来进行监督,这限制了它们在大规模训练中的扩展性。为了解决这些挑战,我们选择了一种直接的相机姿态回归方法。该方法允许高效的大规模训练,同时简化系统,从而实现更快且更可扩展的视觉定位解决方案。
相机姿态回归:端到端的相机姿态回归由于其实时推理能力而受到欢迎。这些方法大致可以分为两类:绝对姿态回归(APR)和相对姿态回归(RPR)。APR 方法直接从图像中回归出世界坐标系中的相机位置和方向,耗时仅需几毫秒。但这些方法在定位精度上仍不如基于结构的方法,通常更像是通过图像检索进行姿态近似 [86]。
RPR 方法通过学习图像对之间的相对姿态来实现跨不同场景的泛化。定位是通过回归查询图像与最相似(或前K个)数据库图像之间的相对姿态来实现的。相对平移的度量尺度(metric scales)可以从单个数据库查询对中近似估计 [1, 4, 7, 35],而通过多视角三角测量可以实现更精确的绝对定位。然而最佳的 RPR 方法仍然显著落后于 APR 方法。此外,现有 RPR 模型的泛化能力仍然有限。
以前的方法主要侧重于技术设计,而不是在更大、更多样化的数据集上进行扩展训练。 在本文中,我们提出了第一个在以对象为中心、室内、室外数据集的不同混合上训练的姿势回归方法。 与之前的工作[126]相反,表明姿态回归的不准确源于粗略的特征定位,我们发现训练有素的补丁级回归网络可以实现,有时甚至超越像素级特征匹配的性能。
3. Method
首先剧透式的一句话总结一下方法,大概就是在有绝对pose的数据集上,在dust3r的网络后面加了一个出相对位姿的head,因为dust3r是一对一对输入的,作者是固定一个查询图像,然后和K个数据集里面的图片送入dust3r,得到K个相对pose,然后又因为数据集是有GT的pose,通过pose变换公式估计出K个查询图像的绝对pose,再通过一些数值优化方法优化的好一点。
问题陈述: 给定一个数据库来自场景的姿势图像,以及来自同一场景的查询图像 Iq,视觉定位的任务是估计可以注册 Iq 到由数据库图像定义的世界坐标系的 6-DoF 相机位姿 P ∈ R3×4 。 P 由相机旋转 R ∈ R3×3 和平移 t ∈ R3 表示。
方法概述: 图 2 概述了方法。 它包含两个主要组件:相对位姿回归网络和运动平均模块。 使用现成的图像检索方法 [3] 将查询图像 Iq 与前 K 个数据库图像配对,创建一组图像对。相对位姿回归网络独立地处理来自Q的每个图像对以确定它们的相对姿势
。然后利用数据库图像自身已知的pose
,从上面的相对pose计算出查询图像 Iq的绝对pose。可以参考PhotoReg论文中的相机变换过程:
是相机坐标系c1和c2的相对变换,
就是一个世界坐标到相机坐标的绝对变换。
然而,这些估计是有噪声的,并且平移向量的度量尺度(metric scales)仍然不确定。为了解决这些问题,运动平均模块执行旋转平均和相机中心三角化,最终得到查询图像的绝对度量姿势。
3.1. Relative Camera Pose Regression(DUSt3R review)
首先使用DUSt3R一样的结构即endoer-decoder,然后在后面接一个输出相对pose的head。
相对相机位姿回归网络采用DUSt3R一样的方法,用图像对 I1、I2 作为输入。该网络将图像划分为patch,并通过 Vision Transformer (ViT) 编码器将它们作为token进行处理。 然后,ViT 解码器使用交叉注意机制在两个分支的token之间交换信息。 接下来是预测相对位姿的回归头。
ViT encoder-decoder architecture:类似于 DUSt3R , 我们首先将每个输入图像 Ii 划分为 T 个token,每个token的维度为 d。 然后我们计算每个token的 RoPE positional embeddings [93],以编码它们在图像中的相对空间位置。 最后处理 m个ViT encoder blocks,每个encoder blocks包含自注意力层和前馈层,以生成编码的特征token F1 和 F2:
解码器包含 n个ViT decoder blocks,每个decoder blocks使用相同的 RoPE 位置嵌入。 与编码器块不同,每个解码器块在其自注意力层和前馈层之间包含一个额外的交叉注意力层。 这种结构使模型能够推理两组特征标记之间的空间关系。 我们获得解码后的token为:
Pose regression head:我们的姿势回归head由h个前馈层组成,然后是average pooling,并有额外的层来回归相对旋转和平移。 旋转最初使用 9D 表示法来表示[51]。 然后使用 SVD 正交化将其转换为 3×3 旋转矩阵。 该矩阵与 3D 平移向量连接以形成最终的变换矩阵。 相对位姿的最终输出为,细节是:3*3矩阵连接平移3*1就是3*4的矩阵:
监督信号:我们的网络预测的pose包括:1)旋转,测量相机朝向的相对变化;2)平移,指示相机中心移动的相对位移。 这两个量都可以表示为相对角度。 因此,我们通过最小化这些预测的相对角度与其真实值之间的差异来训练网络:,其中:
tr(·)表示矩阵的迹, 和
表示预测的旋转和平移,而R和t表示它们各自的真实值。这个预测pose和真实pose之间的loss计算方法值得借鉴。
与 DUSt3R 用于坐标对齐的非对称分支不同,我们使用完全对称的架构,也就是说两个图片输入的两个神经网络配准完全一样,它本质上更适合相对位姿估计。 这种设计消除了图像排序的偏差,从而简化了训练。 它还允许跨分支共享权重,从而降低计算复杂性和存储要求。DUSt3R结构如下。便于对比,再放一下本文结构:
近期关于相对位姿回归的研究 [4, 113] 倾向于学习一个度量位姿。度量位姿指的是在空间中直接学习物体的位置和姿态的具体数值,通常包括三个旋转角度和三个平移距离。这种方法在许多情况下能够提供更为精确的位姿估计,但也会带来一些挑战,特别是在不同数据集之间度量尺度(metric scales)的平衡问题上。
我们选择只学习平移的方向,而将度量尺度(metric scales)的问题交给运动平均方法来解决,在下一节,我们通过将平移表示为角度的形式,而不是具体的距离值。
3.2. Motion Averaging
为了保持效率和简单性,我们将我们的姿势回归网络与最低限度运动平均模块集成在一起。给定一个网络预测的高精确度,我们不应用robust estimation。对于每个图像对,回归网络产生两个相对姿势:,理论上它们应该是互逆的。从经验上看,我们观察到这两种姿势的精确度相似。默认情况下,我们使用将查询图像映射到图像数据库的转换作为运动平均的输入。该模块分别处理旋转和平移,如下所述。
Rotation avgeraging:给定来自数据库-查询图像对的相对旋转估计,通过公式
计算查询图像的绝对旋转。运动平均模块通过聚合来自所有可用对的绝对旋转估计来降低预测噪声。具体执行是使用四元数表示法计算平均旋转[126]。我们观察到,计算中值旋转可以进一步增强对噪声的稳健性,而额外的计算代价最小。
Camera center triangulation:绝对相机中心位置可以从两个图像的数据库与查询对进行三角测量[39]。 与旋转平均类似,我们使用所有有效对来计算平均交点。 虽然交集的几何中位数无法通过分析求解并且通常需要迭代优化,但我们选择了更有效的方法。 我们使用简单的最小二乘法来最小化从相机中心到从相对位姿估计得出的每个平移方向的距离平方和。 通过矩阵的SVD求解。
4. Experiments(we focus on pose estimatation、ablation)
训练数据。 为了构建具有GT相对姿势的大规模训练对,类似于 DUSt3R [109],我们处理来自 7 个公共数据集的~800 万个图像对。 这些数据集涵盖了从以对象为中心到室内和室外环境的一系列场景。如表 1:
默认的 Reloc3r 使用 m = 24 个编码器块、n = 12 个解码器块,后面是具有 h = 2 个卷积层的姿态回归头。 我们使用 DUSt3R 预训练的 512DPT 权重初始化 Reloc3r。 对于解码器初始化,我们使用 DUSt3R 解码器 2 的权重,因为它经过预先训练以执行坐标变换。 完整模型在 8 个 AMD MI250x-40G GPU 上进行训练,批量大小为 8,学习率从 1e-5 开始,逐渐衰减到 1e-7。 补充材料中提供了更多详细信息。
对于视觉定位(visual localization)任务,按照文献 [77, 99],我们应用 NetVLAD [3] 进行图像检索,并使用前 10 个相似图像对。 我们直接使用这些检索到的图像对,而不进行基于距离的聚类。 所有评估均在 24GB NVIDIA GeForce RTX 4090 GPU 上进行。
4.1. Relative Camera Pose Estimation
我们评估 Reloc3r 的相对姿态回归模块。 涵盖两种场景:ScanNet1500 [26, 78]、RealEstate10K [127] 和 ACID [61] 数据集上的成对相对姿态,以及 Co3dv2 [74] 数据集上的多视图相对姿态。
成对相对姿态:
我们的评估测试集与训练数据中的场景不重叠,并且 Reloc3r 在训练期间完全看不到 ACID。 采用三个指标:AUC@5/10/20。 这些指标使用 τ = 5/10/20 度的阈值计算姿态精度曲线下的面积,以获得最小旋转和平移角度误差。由于没有专门为这些数据集设计现有的姿势回归(PR)方法,因此我们主要将我们的方法与非 PR 方法进行比较结果如表 3 所示。Reloc3r 在所有三个数据集上均明显优于其他 PR 方法。
在宽度为 512 的图像分辨率下,Reloc3r 的运行推理时间仅为 42 毫秒。 这比许多非 PR 方法(例如 NoPoSplat [119](>2000 ms)和 ROMA [34](300 ms))要快得多,并且与 PR 方法相当。
多视图相对位姿。
我们评估 Co3dv2 [74] 数据集上的多视图相对姿势。 该数据集由使用内向相机轨迹捕获的对象级场景组成。 该数据集的主要挑战包括视觉对称性、无纹理对象以及图像之间的宽基线。我们在 41 个类别的测试集上评估 Reloc3r。 对于每个序列,我们随机采样 10 帧并制定所有 45 对进行评估。 这些相对位姿通过三个指标进行评估:15度以内的相对旋转精度(RRA@15)、15度以内的相对平移精度(RTA@15)和平均精度(mAA@30,也称为AUC@30) )。虽然我们将评估称为多视图,但实际上我们仅使用成对评估,类似于 DUSt3R(w/ PnP)和 MASt3R。定量结果如表 2 所示。与现有方法相比,所提出的 Reloc3r 在多个指标上实现了 SoTA 性能。
4.2 Detailed Ablation Studies
Symmetric vs. asymmetric networks: DUSt3R [109] 的两个分支旨在学习不同的功能。 他们的目标是在统一的坐标系中解决场景重建问题。 为了方便起见,他们选择第一帧的局部坐标系作为统一系统。 因此,第一个分支专注于 3D 几何重建,而不需要坐标变换,而第二个分支则处理几何重建和坐标系对齐。 相比之下,Reloc3r 专注于学习相对姿势,这两个分支本质上是对称的。 为了利用这一特性,我们通过引入共享解码器和预测头来调整 DUSt3R 的架构,在简化模型的同时保持其有效性。
Reloc3r 的非对称版本遵循 DUSt3R 的设计 [109],它对两个输入图像采用单独的解码器和回归头。 然而,这种方法增加了可学习参数的数量,并引入了基于图像顺序的潜在偏差。 为了减轻这种偏差,DUSt3R 在训练期间合并了翻转图像对,这增加了额外的计算开销。 如表 6 所示,我们证明非对称版本在 ScanNet1500 数据集上的表现甚至比默认的 Reloc3r 还要差。
与非对称变体相比,我们的模型(具有 0.42B 个参数)实现了卓越的精度,同时使用的参数减少了约 28%。
是否使用度量尺度(metric scales)学习相对姿势:
如果我们学习相对姿势的度量尺度,那么相当于是将网络的优化方向从主要的估计相机方向和运动方向转移了,从而可能阻碍跨数据集的泛化。 为了研究这一点,我们将平移输出归一化为单位向量,并添加一个额外的层来回归度量平移尺度。 预测的平移向量和尺度通过 L1 损失进行监督。 我们在 ScanNet1500 [26, 78] 和 Cambridge Landmarks [44] 上评估这个版本。 相对位姿估计结果如表 6 所示。这些发现验证了非度量设计的有效性,它使网络能够专注于两个关键方面:相机方向和运动方向。
绝对位姿估计的结果在表8中。标注为“metric”(度量)的方法代表了学习度量相机位姿的版本。我们观察到,预测的尺度估计缺乏准确性,导致平移误差与基线方法 [4, 113] 类似。为了进一步评估,我们仅专注于平移方向,并结合前两名运动平均(top-2 motion averaging),这产生了显著改进的结果。这一发现验证了我们通过运动平均而不是直接使用神经网络学习来估计度量尺度的方法,突显了其鲁棒性和有效性。
预训练权重的比较: Reloc3r 建立在最近的基础模型 DUSt3R [109] 的基础上,利用其预训练的权重进行初始化。 在这里,我们探索网络权重初始化的不同方法:表 7 列出了这些初始化方法的测试结果。
相关文章:

【论文笔记】多个大规模数据集上的SOTA绝对位姿回归方法:Reloc3r
abstract 视觉定位旨在确定查询图像相对于姿势图像数据库的相机姿势。 近年来,直接回归相机姿势的深度神经网络由于其快速推理能力而受到欢迎。 然而,现有方法很难很好地推广到新场景或提供准确的相机姿态估计。 为了解决这些问题,我们提出了…...

springMVC---常用注解
目录 一、创建项目 1.依赖 2.web.xml 3.spring-mvc.xml 二、RequestParam注解 1.作用 2.属性 3.代码 DeptController类 启动tomcat 三、RequestBody注解 1.作用 2.属性 3.代码 (1)DeptController类 (2)index.jsp (3)启动tomcat 四、P…...
青龙面板脚本开发指南:高效自动化任务的实现
青龙面板脚本开发指南:高效自动化任务的实现 青龙面板(Qinglong Panel)是一款强大的任务管理平台,支持多种语言的脚本开发和执行。通过在青龙面板中编写和管理脚本,用户可以轻松实现自动化任务,提高工作效…...
深入详解DICOM医学影像定位线相关知识:理解定位线的概念、定位线的作用以及定位线显示和计算原理
DICOM医学影像中的定位线(Localization Line) 在医学影像学中,DICOM是用于存储和交换医学影像的标准格式。定位线(Localization Line)在医学影像的显示和分析中起着重要作用,它帮助医生和医学专业人员在影像中精确地标定重要的解剖结构、区域或特征,辅助进行定位、治疗计…...

网络应用技术 实验七:实现无线局域网
一、实验简介 在 eNSP 中构建无线局域网,并实现全网移动终端互相通信。 二、实验目的 1 、理解无线局域网的工作原理; 2 、熟悉无线局域网的规划与构建过程; 3 、掌握无线局域网的配置方法; 三、实验学时 2 学时 四、实…...

kubeneters-循序渐进Cilium网络(一)
文章目录 概要传统网络不同的网络(或子网)之间通信Kubernetes 中的网络在同一栋大楼内的公寓之间通信跨大楼的通信总结 概要 本文通过“封包追踪”方法,深入解析 Kubernetes 网络通信过程。基于 eBPF 的 Cilium 工具,直观展示了数…...

elasticsearch中IK分词器
1、什么是IK分词器 ElasticSearch 几种常用分词器如下: 分词器分词方式StandardAnalyzer单字分词CJKAnalyzer二分法IKAnalyzer词库分词 分词∶即把一段中文或者别的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库…...
Qt之http客户端类
一、HTTP客户端类功能: 1、POST请求发送: 支持发送JSON格式的数据自动处理请求头设置提供上传进度监控、 2、GET请求发送: 简单的GET请求实现支持下载进度监控 3、状态监控: 通过信号槽机制监控上传/下载进度错误处理和状态回调 /…...
18.C语言文件操作详解:指针、打开、读取与写入
目录 1.文件指针2.fopen3.标准流4.fclose5.EOF6.freopen()7.fgetc与getc8. fputc与putc9.fprintf10.fscanf11.fgets12.fputs13.fwrite14.fread15.feof16.fseek17.ftell18.rewind19.fgetpos()与fsetpos20.ferror与clearerr21.remove22.rename 1.文件指针 本篇原文为:…...
深入浅出 OpenResty
1. 引言 1.1. OpenResty简介 OpenResty 是一个基于 Nginx 的高性能 Web 平台,它集成了大量模块,并原生支持 Lua 脚本。这使得开发者能够以非常灵活的方式实现复杂的逻辑,而无需重新编译或扩展 Nginx 核心。OpenResty 的主要特点包括&#x…...

在 .NET 9 中使用 Scalar 替代 Swagger
前言 在.NET 9发布以后ASP.NET Core官方团队发布公告已经将Swashbuckle.AspNetCore(一个为ASP.NET Core API提供Swagger工具的项目)从ASP.NET Core Web API模板中移除,这意味着以后我们创建Web API项目的时候不会再自动生成Swagger API文档了…...

ue5 蒙太奇,即上半身动画和下半身组合在一起,并使用。学习b站库得科技
本文核心 正常跑步动画端枪动画跑起来也端枪 正常跑步动画 端枪动画的上半身 跑起来也端枪 三步走: 第一步制作动画蒙太奇和插槽 第二步动画蓝图选择使用上半身动画还是全身动画,将上半身端枪和下半身走路结合 第三步使用动画蒙太奇 1.开始把&a…...

多活架构的实现原理与应用场景解析
一、多活架构为何如此重要? 企业的业务运营与各类线上服务紧密相连,从日常的购物消费、社交娱乐,到金融交易、在线教育等关键领域,无一不依赖于稳定可靠的信息系统。多活架构的重要性愈发凸显,它宛如一位忠诚的卫士,为业务的平稳运行保驾护航。 回想那些因系统故障引发的…...
一 rk3568 Android 11固件开发环境搭建 (docker)
一 目标 搭建 rk3568 android 系统内核 及固件开发编译调试环境, 支持开发环境导出分享 基于荣品 rk3568 核心板 系统环境: ubuntu22.04 /ubuntu20.04 64位桌面版 编译环境: docker + ubuntu20.04 , 独立的容器隔离环境,不受系统库版本冲突等影响,无性能损耗, 可…...
小结:华为路由器常用的操作指令
以下是华为路由器常用的操作指令(适用于华为企业级路由器,基于VRP操作系统): 1. 基本操作命令 进入用户视图模式 <Huawei> (默认进入用户视图) 进入系统视图模式 <Huawei> system-view [Huawe…...
旅游网站设计与实现
文末附有完整项目代码 在当今数字化时代,旅游网站成为人们获取旅游信息的重要途径。本文将详细介绍旅游网站的设计与实现,让你轻松了解其中的技术奥秘! 一、项目背景 随着社会经济的发展,人们对精神消费愈发重视,旅游…...

【AI大模型】BERT GPT ELMo模型的对比
目录 🍔 BERT, GPT, ELMo之间的不同点 🍔 BERT, GPT, ELMo各自的优点和缺点 🍔 小结 学习目标 理解BERT, GPT, ELMo相互间的不同点理解BERT, GPT, ELMo相互比较下的各自优点和缺点 🍔 BERT, GPT, ELMo之间的不同点 关于特征提取…...

qt 快捷功能 快速生成 setter getter 构造函数 父类虚函数重写 成员函数实现 代码框架 查看父类及父类中的虚函数
qt 快速生成 setter getter 构造函数 父类虚函数重写 成员函数实现 代码框架 1、找到要实现的头文件 2、鼠标移动到在头文件中的类定义的类名上,右键进行选择。 这是插入父类虚函数(父类虚函数重写) 选项弹出来的结果。可以查看到所有父类及父类中的所有的虚函数...

【计算机网络】深入浅出计算机网络
第一章 计算机网络在信息时代的作用 计算机网络已由一种通信基础设施发展成一种重要的信息服务基础设施 CNNIC 中国互联网网络信息中心 因特网概述 网络、互联网和因特网 网络(Network)由若干结点(Node)和连接这些结点的链路…...

springMVC---resultful风格
目录 一、创建项目 pom.xml 二、配置文件 1.web.xml 2.spring-mvc.xml 三、图解 四、controller 一、创建项目 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...