【论文笔记】多个大规模数据集上的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 视觉定位旨在确定查询图像相对于姿势图像数据库的相机姿势。 近年来,直接回归相机姿势的深度神经网络由于其快速推理能力而受到欢迎。 然而,现有方法很难很好地推广到新场景或提供准确的相机姿态估计。 为了解决这些问题,我们提出了…...
UE5 打包项目
UE5 打包项目 flyfish 通过 “文件”->“打开项目”,然后在弹出的对话框中选择项目文件(通常是以.uproject为后缀的文件) 选择目标平台: 在 UE5 主界面中,找到 “平台”(Platforms)。根据…...
JavaEE之定时器及自我实现
在生活当中,有很多事情,我们不是立马就去做,而是在规定了时间之后,在到该时间时,再去执行,比如:闹钟、定时关机等等,在程序的世界中,有些代码也不是立刻执行,…...
好用的php商城源码有哪些?
选择一个优秀的商城工具,能更好地帮助大家建立一个好用的商城系统。目前比较流行的都是开源PHP商城系统,那么现实中都有哪些好用的PHP商城源码值得推荐呢?下面就带大家一起来了解一下。 1.TigShop 【推荐指数】:★★★★★☆ 【推…...
GO语言实现KMP算法
前言 本文结合朱战立教授编著的《数据结构—使用c语言(第五版)》(以下简称为《数据结构(第五版)朱站立》)中4.4.2章节内容编写,KMP的相关概念可参考此书4.4.2章节内容。原文中代码是C语言&…...
国产Docker可视化面板Dpanel的安装与功能解析
国产Docker可视化面板Dpanel的安装及功能介绍 Docker 可视化面板系统,提供完善的 docker 管理功能。 支持查看基本信息、运行状态统计、网络统计、磁盘统计、用量统计等功能 容器管理: 创建/修改容器 支持基本配置、环境变量、…...
Elaticsearch常用的浏览器插件
Elasticsearch head https://github.com/mobz/elasticsearch-headElasticsearch Tools https://www.chajianxw.com/developer/31765.html#google_vignetteElasticvue https://blog.csdn.net/weixin_60457220/article/details/143595846...
LabVIEW数据库管理系统
LabVIEW数据库管理系统(DBMS)是一种集成了数据库技术与数据采集、控制系统的解决方案。通过LabVIEW的强大图形化编程环境,结合数据库的高效数据存储与管理能力,开发人员可以实现高效的数据交互、存储、查询、更新和报告生成。LabV…...
【HM-React】08. Layout模块
基本结构和样式reset 结构创建 实现步骤 打开 antd/Layout 布局组件文档,找到示例:顶部-侧边布局-通栏拷贝示例代码到我们的 Layout 页面中分析并调整页面布局 代码实现 pages/Layout/index.js import { Layout, Menu, Popconfirm } from antd impor…...
SpringCloud
1.认识微服务 随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢? 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构:将业务的所有功…...
HarmonyOS应用开发者初级认证最新版– 2025/1/13号题库新版
1.欢迎各位读者,本文档来自鸿蒙开发学员亲测,最新版。(考试时直接Ctrlf进行搜索,一定要认真比对答案,有的答案相似度很高)!!!!!! 欢迎…...
基于微信小程序的汽车销售系统的设计与实现springboot+论文源码调试讲解
第4章 系统设计 一个成功设计的系统在内容上必定是丰富的,在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值,吸引更多的访问者访问系统,以及让来访用户可以花费更多时间停留在系统上,则表明该系统设计得比较专…...
[免费]SpringBoot+Vue新能源汽车充电桩管理系统【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue新能源汽车充电桩管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue新能源汽车充电桩管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息化时代的到来࿰…...
《机器学习》之K-means聚类
目录 一、简介 二、K-means聚类实现步骤 1、初始化数据点、确定K值 2、通过距离分配数据点 3、更新簇中心 4、 迭代更新 三、聚类效果评价方式 1、轮廓系数的定义 2、整体轮廓系数 3、使用场景 4、优点 5、缺点 6、代码实现方法 四、K-means聚类代码实现 1、API接…...
【芯片封测学习专栏 -- 2D | 2.5D | 3D 封装的区别和联系】
请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】 文章目录 Overview线键合(wire-bonding)封装FOWLP2D封装2.5D 封装硅通孔(TSV)硅中介层无TSV的2.5D 3D封装 Overview 我们先要了解一下&…...
E12.【C语言】练习:求两个数的最大公约数
目录 1.枚举 2.辗转相除法 1.枚举 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() {int a 0;int b 0;int tmp 0;scanf("%d %d", &a, &b);if (a < b){for (int i1; i < a; i){if (0a% i && 0b%i)tmp i;}}if …...
SVG图表
1、时序图 英文 #mermaid-svg-OyLuBTPnpbW9XDOB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OyLuBTPnpbW9XDOB .error-icon{fill:#552222;}#mermaid-svg-OyLuBTPnpbW9XDOB .error-text{fill:#552222;stroke:#55…...
IDEA中创建maven项目
1. IDEA中创建maven项目 在IDEA中创建Maven项目,前提是已经安装配置好Maven环境。如还未配置安装Maven的,请先下载安装。如何下载安装,可参考我另外篇文章:maven的下载与安装教程本篇教程是以创建基于servlet的JavaWeb项目为例子&…...
Laravel 中 Cache::remember 的基本用途
在 Laravel 中,Cache::remember 方法用于缓存数据,以提高应用程序的性能。当需要从数据库或其他较慢的数据源中检索数据时,可以使用 Cache::remember 来检查请求的数据是否已经被缓存。如果数据已缓存,则直接从缓存中读取…...
云数赋能:开启企业数字化转型的高速通道
目录 一、引言:数字化转型浪潮下的企业挑战与机遇 二、认识云数赋能 2.1 云计算:企业数字化的强大基石 2.2 大数据:挖掘企业潜藏价值的宝藏 三、云数赋能如何加速企业数字化转型 3.1 优化企业运营管理 3.2 提升客户体验 3.3 推动创新…...
Spring底层核心原理解析
本次分享会把Spring中核心知识点都给大家进行串讲,让大家对Spring的底层有一个整体的大致了解,比如: Bean的生命周期底层原理依赖注入底层原理初始化底层原理推断构造方法底层原理AOP底层原理Spring事务底层原理 但都只是大致流程&#…...
昵称 校验
1. 基本格式校验 1. 长度限制 • 设置最小和最大字符长度:2-20 个字符(常见范围)。 • 避免昵称过短或过长影响显示和识别。 • 示例: • 2 ≤ 长度 ≤ 20:let minLength 2 let maxLength 20 if nickname.count <…...
25/1/12 嵌入式笔记 学习esp32
了解了一下位选线和段选线的知识: 位选线: 作用:用于选择数码管的某一位,例如4位数码管的第1位,第2位) 通过控制位选线的电平(高低电平),决定当前哪一位数码管处于激活状…...
PostgreSQL 超级管理员详解
1. 什么是 PostgreSQL 超级管理员 PostgreSQL 超级管理员(superuser)是拥有数据库系统最高权限的用户。他们可以执行任何数据库操作,包括但不限于创建和删除数据库、用户、表空间、模式等。超级管理员权限是 PostgreSQL 中权限的最高级别。 …...
【centos】校时服务创建-频率修改
在 NTP 配置中,校时频率通常是由 NTP 协议自动管理的,NTP 会根据网络延迟和时间偏差动态调整校时频率。不过,您可以通过配置文件中的一些参数来影响 NTP 的行为。 如果想要更改 NTP 的校时频率,可以考虑以下几个方面:…...
mybatis分页插件:PageHelper、mybatis-plus-jsqlparser(解决SQL_SERVER2005连接分页查询OFFSET问题)
文章目录 引言I PageHelper坐标II mybatis-plus-jsqlparser坐标Spring Boot 添加分页插件自定义 Mapper 方法中使用分页注意事项解决SQL_SERVER2005连接分页查询OFFSET问题知识扩展MyBatis-Plus 框架结构mybatis-plus-jsqlparser的 Page 类引言 PageHelper import com.github.p…...
二、模型训练与优化(4):模型优化-实操
下面我将以 MNIST 手写数字识别模型为例,从 剪枝 (Pruning) 和 量化 (Quantization) 两个常用方法出发,提供一套可实际动手操作的模型优化流程。此示例基于 TensorFlow/Keras 环境,示范如何先训练一个基础模型,然后对其进行剪枝和…...
开发人员学习书籍推荐(C#、Python方向)
作为一名开发人员,持续学习和提升自己的技术水平是至关重要的。如今,技术不断更新换代,新的开发框架、语言和工具层出不穷。对于刚入行的开发者或希望深入某一领域的工程师来说,选对书籍是学习的捷径之一。本篇文章将推荐一些经典…...
【HTML+CSS+JS+VUE】web前端教程-31-css3新特性
圆角 div{width: 100px;height: 100px;background-color: saddlebrown;border-radius: 5px;}阴影 div{width: 200px;height: 100px;background-color: saddlebrown;margin: 0 auto;box-shadow: 10px 10px 20px rgba(0, 0, 0, 0.5);}...
【Elasticsearch】批量操作:优化性能
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探…...
sklearn-逻辑回归-制作评分卡
目录 数据集处理 分箱 分多少个箱子合适 分箱要达成什么样的效果 对一个特征进行分箱的步骤 分箱的实现 封装计算 WOE 值和 IV值函数 画IV曲线,判断最佳分箱数量 结论 pd.qcut 执行报错 功能函数封装 判断分箱个数 在银行借贷场景中,评分卡是…...
Saas数据库迁移单租户数据
1、背景 租户使用Saas系统,用一段时间后要将系统、数据搬迁到自建服务器。该Saas系统没有按租户分库,且数据库数据量太大,需要将单租户的数据抽取出来。Saas系统使用Mysql5.7数据库,主要使用INFORMATION_SCHEMA.COLUMNS表进行数据…...
23_Spring Boot中Redis缓存实现
1.基于注解的Redis缓存实现 下面我们在之前Spring Boot默认缓存管理的基础上引入Redis缓存组件,使用基于注解的方式讲解Spring Boot整合Redis缓存的具体实现。 1.使用@Cacheable、@CachePut、@CacheEvict注解定制缓存管理。对CommentServiceImpl类中的方法进行修改,使用@Ca…...
Vue 学习之旅:核心技术学习总结与实战案例分享(vue指令下+计算属性+侦听器)
Vue 学习之旅:核心技术学习总结与实战案例分享 文章目录 Vue 学习之旅:核心技术学习总结与实战案例分享一、指令补充(一)指令修饰符(二)v-bind 对样式操作的增强(三)v-model 应用于其…...
【Linux网络编程】数据链路层 | MAC帧 | ARP协议
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 🌈个人主页: 南桥几晴秋 🌈C专栏: 南桥谈C 🌈C语言专栏: C语言学习系…...
vscode vue 自动格式化
vscode vue 自动格式化 安装Prettier和Vetur插件 选择设置,并且转到编辑文件。增加如下内容。 {"editor.formatOnSave": true,"editor.defaultFormatter": "esbenp.prettier-vscode","[vue]": {"editor.defaultFor…...
GitCode G-Star 光引计划终审前十名获奖项目公示
在技术的浩瀚星空中,GitCode 平台上的 G-Star 项目熠熠生辉。如今,“光引计划” 已圆满落幕,众多 G-Star 项目作者,一同分享项目在 GitCode 平台托管的宝贵体验,并深入挖掘平台的多样玩法。 众多投稿纷至沓来…...
Postgres14.4(Docker安装)
Postgres14.4(Docker安装) 一,Docker拉取镜像 docker pull postgres:14.4 #检查镜像是否拉取成功 docker images | grep postgres二,新建挂载目录,并运行容器 mkdir -p /data/postgre/data chmod 777 /data/postgre/…...
R.swift库的详细用法
R.swift 是一个 Swift 工具库,它提供了一个自动生成的类 R,使得你可以通过类型安全的方式访问项目中的资源,例如图片、字体、颜色、XIB 文件等。通过 R.swift,你可以避免字符串类型的错误,提升代码的可维护性。 以下是 R.swift 库的详细用法: 1. 安装 R.swift 使用 Sw…...
Redis高危漏洞-GHSA-whxg-wx83-85p5:用户可能会使用特制的 Lua 脚本来触发堆栈缓冲区溢出
官方漏洞描述:https://github.com/redis/redis/security/advisories/GHSA-whxg-wx83-85p5 Redis 是一个高性能的键值数据库,广泛用于缓存和存储数据。由于其功能丰富,Redis 允许用户通过 Lua 脚本来执行服务器端的操作。Lua 脚本通常用来在 …...
分组通道自注意力G-CSA详解及代码复现
G-CSA定义 G-CSA (Grouped Channel Self-Attention) 是一种创新性的视觉注意力机制,巧妙地结合了卷积和自注意力的优势。通过将输入特征图划分为多个独立的通道组,在每个组内执行自注意力操作,G-CSA实现了高效的全局信息交互,同时保留了局部特征细节。这种方法不仅提高了模…...
Unity 自定义批量打包工具
打包配置项 using UnityEngine; using System.Collections.Generic;namespace MYTOOL.Build {[System.Flags]public enum VersionOptions{None 0,Major 1,Minor 4,Build 8,Revision 0x10,}/// <summary>/// 批量打包配置文件/// </summary>[CreateAssetMenu]…...
WebGL性能检测
WebGL性能检测系统说明 检测维度 1. WebGL版本支持检测(20分) WebGL 1.0 和 WebGL 2.0 版本检测WebGL 2.0 支持得20分仅支持WebGL 1.0 得12分主要影响高级特性和性能优化的可用性2. GPU性能评估(25分) 通过WEBGL_debug_renderer_info获取显卡信息根据GPU品牌和型号进行评…...
C#,图论与图算法,输出无向图“欧拉路径”的弗勒里(Fleury Algorithm)算法和源程序
1 欧拉路径 欧拉路径是图中每一条边只访问一次的路径。欧拉回路是在同一顶点上开始和结束的欧拉路径。 这里展示一种输出欧拉路径或回路的算法。 以下是Fleury用于打印欧拉轨迹或循环的算法(源)。 1、确保图形有0个或2个奇数顶点。2、如果有0个奇数顶…...
Jenkins触发器--在其他项目执行后构建
前言: jenkins中有多种触发器可用,可以方便的控制构建的启动 这里简单介绍下项目后构建的配置方法 1. 解释: Build after other projects are built Set up a trigger so that when some other projects finish building, a new build is…...
UE5.4运行报错解决(关于osg使用-无法解决的外部命令)(未解决)
报错如下: 09:38:06:665 4>EpicGames.Core -> E:\AppInstall\EpicGames\UE_5.4\Engine\Source\Programs\Shared\EpicGames.Core\bin\Development\net6.0\EpicGames.Core.dll 09:38:06:668 5>------ 已启动全部重新生成: 项目: EpicGames.MsBuild, 配…...
Swift语言的软件工程
Swift语言的软件工程 引言 随着科技的不断进步,软件开发行业正在经历着前所未有的变化。在这场变革中,Swift语言作为苹果公司推出的一种新型编程语言,凭借其简洁、高效及安全的特性,正在快速崛起,成为现代软件工程中…...
国内外网络安全政策动态(2024年12月)
▶︎ 1.2项网络安全国家标准获批发布 2024年12月6日,根据2024年11月28日国家市场监督管理总局、国家标准化管理委员会发布的中华人民共和国国家标准公告(2024年第29号),全国网络安全标准化技术委员会归口的2项网络安全国家标准正…...
DELTA并联机械手视觉方案荣获2024年度机器人应用典型案例奖
直击现场 2025年1月9日晚,2024深圳市机器人年度评选颁奖典礼在深圳市南山区圣淘沙酒店正式拉开帷幕。本次颁奖活动由中国科学院深圳先进技术研究院指导,深圳市机器人协会与《机器人与智能系统》杂志组织承办。 正运动公司受邀参与此次典礼,…...
python 3个线程轮流打印A、B、C
要实现 Python 中三个线程轮流打印 A、B、C 的效果,可以使用 threading 模块和 Condition 或 Lock 来同步线程。以下是使用 Condition 的解决方案: 代码实现 import threading# 初始化条件变量 condition threading.Condition() current 0 # 共享变…...