自回归和Rectified Flow完美融合统一多模态理解和生成!DeepSeek北大等开源JanusFlow

news2025/1/13 10:09:32

论文链接:https://arxiv.org/pdf/2411.07975
github链接:https://github.com/deepseek-ai/Janus

亮点直击

  • 统一多模态框架: 提出 JanusFlow,一个同时处理图像理解和文本到图像生成任务的统一模型,解决了任务分离带来的架构复杂性问题。

  • 创新优化策略: 采用任务解耦和表示对齐两大关键策略,提高理解与生成任务的独立性与语义一致性。

  • 卓越性能表现:在多模态理解与文本到图像生成基准测试中超越现有专用模型和统一模型,取得领先成绩。

  • 紧凑高效的设计:仅用 1.3B 参数实现性能突破,展示出高效模型在多模态任务中的巨大潜力。

效果展示

文生图

多模态理解

总结速览

解决的问题

当前图像理解与生成任务通常由专门的模型完成,统一模型在性能和效率上仍然存在局限性,难以在两个领域中同时达到优异表现。

提出的方案

提出 JanusFlow 框架,采用极简架构,将自回归语言模型rectified flow相结合,实现图像理解与生成的统一。

应用的技术

  1. Rectified Flow:作为生成建模的先进方法,简化了在大语言模型框架中训练的复杂性。

  2. 理解与生成解码器的解耦:分别优化理解与生成任务的编码器。

  3. 表示对齐:在统一训练过程中对理解和生成的表示进行对齐,增强统一模型的表现力。

达到的效果

  1. 性能提升:在标准基准上显著优于现有的统一模型,并在各领域中表现出与专用模型媲美甚至更优的性能。

  2. 模型简化:无需复杂的架构修改,即可在统一框架内有效训练,提升效率和通用性。

JanusFlow

本节介绍 JanusFlow 的架构以及我们的训练策略。

背景

多模态大语言模型(MLLMs)
给定一个数据集 ,其中包含离散的 token 序列,每个序列可以表示为 ,大语言模型(LLMs)通过自回归方式对序列分布进行建模。

其中, 表示 LLM 的参数, 是序列长度。在经过大规模数据集的训练后,LLMs 展现出在各种任务中的泛化能力,并能够遵循多样化的指令。为了扩展这些模型以处理视觉输入,LLMs 会与视觉编码器结合。例如,LLaVA 通过投影层将 LLM 与预训练的 CLIP 图像编码器集成,将提取的图像特征转换为 LLM 可处理的联合嵌入空间(作为词嵌入)。借助大规模多模态数据集和日益强大的 LLMs,这种架构推动了能够解决多种视觉语言任务的先进多模态模型的发展。

Rectified Flow
对于一个包含连续 维数据点的数据集 ,其中 从未知的数据分布 中抽取,Rectified Flow [55, 60] 通过学习一个定义在时间 上的常微分方程(ODE)来建模数据分布:

其中, 表示速度神经网络的参数, 是一个简单的分布,通常为标准高斯噪声 。通过最小化神经网络速度与从 到 的随机点之间线性路径方向的欧几里得距离来训练网络:

其中, 是定义在时间 上的分布。当网络具有足够的容量且目标函数被完美最小化时,最优速度场 将初始分布 映射为真实的数据分布 。更具体地说,对于 ,分布 满足分布 。尽管概念简单,Rectified Flow在各种生成建模任务中表现出色,包括文本到图像生成、音频生成 和生物结构生成。

多模态理解与生成的统一框架

JanusFlow 提供了一个统一的框架,用于处理视觉理解和图像生成任务。以下概述了 JanusFlow 如何在单一 LLM 架构中处理这两类任务。

多模态理解
在多模态理解任务中,LLM 处理由交替出现的文本和图像数据组成的输入序列。文本被分割为离散的 token,每个 token 被转换为维度为 的嵌入向量。对于图像,图像编码器 将每个图像 编码为形状为 的特征图。该特征图被展平,并通过线性变换层投射为形状为 的嵌入序列。这里, 和 由图像编码器确定。

文本嵌入与图像嵌入连接形成输入序列,输入到 LLM 中,LLM 随后根据嵌入序列自回归地预测下一个 token。根据通用做法 [85, 93, 96],我们在图像前添加特殊 token |BOI|,在图像后添加特殊 token |EOI|,以帮助模型定位序列中的图像嵌入。

图像生成
在图像生成任务中,LLM 以文本序列 作为条件,利用Rectified Flow生成对应的图像。为提高计算效率,生成过程在使用预训练的 SDXL-VAE 的潜空间中完成。

生成过程从在潜空间中采样高斯噪声 开始,其形状为 ,然后通过生成编码器 处理为形状为 的嵌入序列。此序列与表示当前时间步 (初始时 )的时间嵌入连接,形成长度为 的序列。

不同于之前采用多种注意力屏蔽策略的研究 [96, 103],我们发现因果注意力已足够,因为初步实验表明替代屏蔽方案并未带来性能提升。LLM 输出与 对应的结果通过生成解码器 转换回潜空间,生成形状为 的速度向量。状态通过标准的欧拉求解器进行更新:

其中, 是用户定义的步长。我们用 替换输入中的 ,并重复该过程,直到得到 ,随后通过 VAE 解码器将其解码为最终图像。为了提高生成质量,在计算速度向量时,引入了无分类器指导(Classifier-Free Guidance,CFG)。

其中, 表示未结合文本条件推断的速度, 控制无分类器指导(CFG)的幅度。经验表明,增加 能够提高语义对齐度。与多模态理解类似,我们在序列中添加特殊标记 |BOI|,以指示图像生成的开始。

解耦两任务的编码器
先前将自回归生成与扩散模型统一在联合 LLM 训练框架中的方法为理解和生成任务使用相同的编码器( 和 )。例如,Zhou 等人在相同的 VAE 潜在空间中通过共享的 U-Net 或线性编码器完成这两项任务,而 Xie 等人利用 MAGVIT-v2将图像块编码为离散标记以同时处理两项任务。

然而,关于统一自回归模型的最新研究表明,这种共享编码器的设计在生成任务上表现次优,尤其是在通过向量量化标记进行自回归生成的模型中。借鉴这些发现,JanusFlow 采用了解耦编码器设计。具体而言,我们使用预训练的 SigLIP-Large-Patch/16 模型作为 ,以提取多模态理解的语义连续特征,而生成任务则使用从头初始化的独立 ConvNeXt 块 作为 和 ,因其效果优越。按照既定实践 [5, 14, 90],在 和 之间加入长跳跃连接。对照实验表明,这种解耦编码器设计显著提升了统一模型的性能。JanusFlow 的完整架构如下图 2 所示。

训练方案

如下图 3 所示,分三个阶段依次训练模型,具体如下。

阶段 1:随机初始化组件的适配
在第一阶段,我们仅训练随机初始化的组件,包括线性层、生成编码器和生成解码器。这一阶段旨在使这些新模块与预训练的 LLM 和 SigLIP 编码器有效配合,实质上是为新引入的组件进行初始化。

阶段 2:统一预训练
在适配阶段之后,我们训练整个模型,但不包括视觉编码器,与先前方法一致 [57, 63]。训练数据包括三种类型:多模态理解、图像生成和仅文本数据。最初分配较高比例的多模态理解数据,以建立模型的理解能力。随后逐步增加图像生成数据的比例,以满足基于扩散模型的收敛需求。

阶段 3:监督微调(SFT) 最后阶段,使用指令调优数据对预训练模型进行微调,包括对话、任务特定的交流以及高质量的文本条件图像生成示例。在此阶段,还解冻 SigLIP 编码器参数。这一微调过程使模型能够有效响应用户指令,完成多模态理解和图像生成任务。

训练目标

训练 JanusFlow 涉及两种类型的数据:多模态理解数据和图像生成数据。这两种数据都包含两部分:“条件”和“响应”。“条件”指的是任务的提示(例如,在生成任务中是文本提示,在理解任务中是图像),而“响应”指的是两种任务的相应输出。数据可以格式化为 ,其中上标 表示“条件”, 表示“响应”。我们表示整个序列 的长度为 , 的长度为 , 的长度为 。我们用 来表示 JanusFlow 中所有可训练的参数集合,包括 LLM、、、 和线性变换层。

自回归目标

对于多模态理解任务, 仅包含文本标记。JanusFlow 采用最大似然原则进行训练,

其中期望是对多模态理解数据集 中所有 对进行计算,仅对 中的标记计算损失。

Rectified Flow目标:对于图像生成任务, 包含文本标记,而 是对应的图像。JanusFlow 通过Rectified Flow目标进行训练。

其中 。遵循 Stable Diffusion 3,将时间分布 设置为对数正态分布。为了启用 CFG 推理,在训练中随机丢弃 10% 的文本提示。

表示对齐正则化:近期的研究 [99] 显示,跨diffusion transformers 和语义视觉编码器对齐中间表示能够增强扩散模型的泛化能力。解耦视觉编码器设计能够有效地将这种对齐实现为正则化项。具体来说,对于生成任务,将理解编码器 中的特征与 LLM 的中间特征对齐。

其中 表示给定输入 的中间 LLM 表示, 是一个小型可训练 MLP,将 投影到维度 。函数 计算嵌入之间逐元素余弦相似度的均值。在计算损失之前,我们将 重塑为 。为了简化实现,我们故意调整了 和 的配置,以确保 且 。 的梯度不会通过理解编码器反向传播。这个对齐损失帮助 LLM 的内部特征空间(给定噪声输入 )与理解编码器的语义特征空间对齐,从而在推理过程中生成图像时,能够提高从新的随机噪声和文本条件生成图像的质量。

总结:所有三个目标在各个训练阶段都被应用。多模态理解任务使用 ,而图像生成任务则使用组合损失 。

实验

研究者们进行了一系列实验,以评估 JanusFlow 在多模态理解和生成任务中的能力。首先,我们描述了我们的实验设置和实现细节。然后,展示了在多模态理解和图像生成的标准基准上的结果。最后,进行了一些消融实验,以验证关键设计选择。

实验设置和实现细节

本文的框架基于 DeepSeek-LLM(1.3B)的增强版。LLM 由 24 个变换器块组成,支持序列长度为 4,096。在本文的模型中,理解和生成任务都使用分辨率为 384 的图像。

对于多模态理解,使用 SigLIP-Large-Patch/16 作为 。对于图像生成,利用预训练的 SDXL-VAE 作为其潜在空间。生成编码器 包括一个 2×2 的 Patchify 层,后跟两个 ConvNeXt 块和一个线性层。生成解码器 由两个 ConvNeXt 块、一个像素重排层(用于上采样特征图)和一个线性层组成。我们的 SigLIP 编码器包含约 300M 个参数。 和 是轻量级模块,总参数量约为 70M。下表 1 详细列出了每个训练阶段的超参数。在对齐正则化中,我们使用第 6 个块之后的 LLM 特征作为 ,并使用一个三层 MLP 作为 。使用指数移动平均(EMA)方法,比例为 0.99,以确保训练的稳定性。

对于数据预处理,分别处理理解和生成数据。对于理解任务,通过将长边调整为目标大小,并将图像填充为正方形来保持所有图像信息。对于生成任务,将短边调整为目标大小,并应用随机方形裁剪,以避免填充伪影。在训练过程中,为提高训练效率,将多个序列打包成一个长度为 4,096 的单一序列。

实现基于 HAI-LLM 平台,使用 PyTorch。训练是在 NVIDIA A100 GPU 上进行的,每个模型需要约 1,600 A100 GPU 天。

训练数据设置

遵循 Janus 构建训练数据。每个训练阶段的数据配置如下。

阶段 1 和阶段 2 的数据

本文框架的前两个阶段使用三种类型的数据:多模态理解数据、图像生成数据和仅文本数据。

  1. 多模态理解数据。此类数据包含几个子类别:

    • (a) 图像描述数据。结合了来自 [20, 41, 50, 51, 53, 79] 的描述数据集,并使用开源多模态理解模型为来自 [16, 43] 的图像生成附加描述。数据遵循模板格式,例如:“<image>生成此图片的描述。<caption>”。

    • (b) 图表和表格。直接采用来自 DeepSeek-VL 训练数据的图表和表格数据。

    • (c) 任务数据。使用 ShareGPT4V 数据,以促进预训练期间的基本问答能力,数据结构为:“<image><question><answer>”。

    • (d) 交替文本-图像数据。此子类别来源于 [42, 81]。

  2. 图像生成数据。图像生成数据集结合了来自 [16, 21, 41, 43, 67, 69, 79, 82] 的高质量图像和 200 万个内部数据。我们使用多模态理解模型增强它们,生成机器生成的描述。筛选了来自 [16, 79] 的图像,按纵横比和美学评分进行过滤,保留约 20% 的原始数据集。25% 的数据包含单句描述,这类数据帮助模型能够处理简短的提示。所有数据点格式为:“<prompt><image>”。

  3. 仅文本数据。直接使用 DeepSeek-LLM的文本语料库。

阶段 3 的数据 SFT 阶段同样使用三种类型的数据:

  1. 多模态指令数据。利用来自 [29, 33, 35, 47, 64, 78] 的指令调优数据集。

  2. 图像生成数据。将来自 [16, 79, 82] 的高质量文本-图像对重新格式化为指令格式:“User:<user prompt>\n\n Assistant:<image>”。

  3. 仅文本数据。直接合并了来自 [47] 的仅文本数据。

评估设置

图像生成
使用视觉质量和语义准确性指标来评估生成的图像。对于视觉质量评估,采用 Fréchet Inception DistanceFID)指标,并计算 30,000 张生成图像与其对应的来自 MJHQ 数据集的参考图像之间的 FID。FID 的计算遵循 GigaGAN的实现。为了评估语义准确性,使用两个专门的框架:GenEval和 DPG-Bench。这些框架旨在评估生成的图像是否准确包含了输入提示中指定的对象和关系,从而提供广泛的生成能力评估。

多模态理解 通过一系列多样化的视觉-语言基准测试来评估 JanusFlow 的多模态理解能力,这些基准测试涉及一般的理解能力,包括 POPE、MME、MMBench、SEEDBench、VQAv2、GQA、MM-Vet 和 MMMU。

定量结果

图像生成性能 本文报告了在 GenEval、DPG-Bench 和 MJHQ FID-30k 上的性能。在下表 2 中,给出了 GenEval 的比较,包括所有子任务的分数和总体分数。JanusFlow 在总体得分上达到了 0.63,超过了之前的统一框架以及多个生成特定模型,包括 SDXL 和 DALL-E 2。在下表 3 中,展示了 DPG-Bench 上的结果及其相应的比较。需要注意的是,表 3 中的所有方法都是生成特定模型,除了本文的模型之外。GenEval 和 DPG-Bench 上的结果展示了本文模型的指令跟随能力。

在下表 4 中给出了 MJHQ FID-30k 的比较。计算 FID 的图像是通过 CFG 因子 𝑤 = 2 和采样步数 30 生成的。对 CFG 因子和采样步数进行了扫频。本文的方法在所有 1.3B LLM 模型中表现最好。结果证明,Rectified Flow能够改善生成图像的质量,优于自回归模型,如 Janus。

多模态理解性能
在下表 5 中展示了我们的方法与其他方法的比较,包括理解特定模型和统一的理解与生成模型。我们的模型在所有具有相似参数数量的模型中达到了最佳性能,甚至超过了多个规模更大的理解特定方法。我们的结果表明,我们的方法协调了自回归 LLM 和Rectified Flow,在理解和生成任务中都取得了令人满意的表现。

消融研究

本文进行了全面的消融研究,以验证关键设计选择的有效性。为了提高计算效率,所有消融实验均在 256 × 256 分辨率的图像上进行。除理解-only 和生成-only 变体外,所有模型均在我们的统一预训练数据集上训练了 50,000 次迭代,而理解-only 和生成-only 变体则根据其在预训练阶段的数据比例进行了相应较少的训练迭代。这些消融研究的定量结果见下表 6。

表示对齐的影响

Exp. A 和 F 之间的比较展示了在训练过程中加入表示对齐正则化的显著益处。具体来说,采用表示对齐训练的模型在 MJHQ 数据集上的 FID 分数显著较低,且 CLIP 分数较高,表明图像质量和语义对齐均得到了同步提升。值得注意的是,本文的架构与 [99] 中研究的先前工作 [65, 70] 有所不同,因为我们结合了 LLM 并在 和 之间增加了一个跳跃连接。在修改后的架构中,表示对齐的有效性表明它具有广泛的适用性和跨不同网络结构的泛化能力。

视觉编码器解耦的影响 通过 Exp. B、C 和 F 之间的比较验证了使用强大预训练视觉编码器在多模态理解中的有效性。在 Exp. B 中,采用类似 Transfusion 的设计,在 SDXL-VAE 潜在空间中为理解和生成编码器实现了共享的 ConvNeXt 块。Exp. C 则使用独立的编码器,架构和初始化参数相同,但进行了独立训练。不同配置之间的性能差异验证了在改进我们统一模型能力方面解耦视觉编码器的必要性。此外,Exp. C 和 F 中的优越结果突出了利用预训练语义视觉编码器进行多模态理解任务的好处。

与理解/生成-only 模型的公平比较

为了建立有意义的基准,评估了在相同条件下训练的任务特定模型——使用相同的预训练数据集、基础设施和超参数。Exp. D 和 E 代表了这些专门的模型,它们使用与统一模型相匹配的数据量进行了训练,如前面表 6 所示。Exp. F 与这些任务特定基线之间的最小性能差距表明,本文的统一框架成功地将理解和生成能力集成在一起,且不会在任何任务的性能上造成显著的妥协。

定性结果

本文展示了 JanusFlow 方法在图像生成和理解任务上的定性评估。下图 1(b) 和图 4 展示了 JanusFlow 在图像生成方面的能力。这些结果展示了我们生成的图像在视觉质量上的优越性,并且证明了我们的框架能够忠实地执行各种指令。

在多模态理解方面,下图 5 展示了示例对话,展示了我们的模型在不同场景下的理解能力。这些互动展示了模型在自然语言对话中理解和推理视觉内容的能力。

结论

本文提出了 JanusFlow,一种成功地将自回归模型和Rectified Flow模型融合的统一框架,适用于多模态理解和生成任务。广泛的实验表明,这种统一方法在性能上与任务特定模型相当。成功整合这两种根本不同的模型架构,不仅解决了当前多模态学习中的挑战,还为未来训练统一模型的研究开辟了新的可能性。

参考文献

[1] JanusFlow: Harmonizing Autoregression and Rectified Flow for Unified Multimodal Understanding and Generation

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

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

相关文章

Docker1:认识docker、在Linux中安装docker

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

数据结构在二叉树Oj中利用子问题思路来解决问题

二叉树Oj题 获取二叉树的节点数获取二叉树的终端节点个数获取k层节点的个数获取二叉树的高度检测为value的元素是否存在判断两颗树是否相同判断是否是另一棵的子树反转二叉树判断一颗二叉树是否是平衡二叉树时间复杂度O(n*n)复杂度O(N) 二叉树的遍历判断是否是对称的二叉树二叉…

【C++】踏上C++学习之旅(九):深入“类和对象“世界,掌握编程的黄金法则(四)(包含四大默认成员函数的练习以及const对象)

文章目录 前言1. 实现Date类的构造函数2. 实现Date类的拷贝构造函数3. 实现Date类的赋值运算符重载4. 实现各Date对象之间的比较接口5. 实现Date对象的加减接口6. const成员7. 取地址及const取地址操作符重载 前言 在我们前面学习到了"类和对象"的四大默认成员函数(…

远程控制软件使用教程

随着数字化办公浪潮的席卷&#xff0c;远程控制软件已经悄无声息地融入我们的日常生活&#xff0c;成为提升工作效率的神奇工具。它让我们无论身处何地&#xff0c;都能轻松驾驭办公室电脑&#xff0c;让旅途中的工作也变得轻松自如。那么&#xff0c;远程控制软件究竟是什么&a…

oracle查看锁阻塞-谁阻塞了谁

一 模拟锁阻塞 #阻塞1 一个会话正在往一个大表写入大量数据的时候&#xff0c;另一个会话加字段&#xff1a; #会话1 #会话2 会话2被阻塞了。 #阻塞2 模拟一个会话update一条记录&#xff0c;没提交。 另一个会话也update这一条记录&#xff1a; 会话2被阻塞了。 二 简单查…

我用豆包MarsCode IDE 做了一个 CSS 权重小组件

作者&#xff1a;夕水 查看效果 作为一个前端开发者&#xff0c;应该基本都会用VSCode来做开发&#xff0c;所以也应该见过如下这张图的效果: 以上悬浮面板分为2个部分展示内容。 <element class"hljs-attr">: 代表元素只有一个类名叫hljs-attr的类选择器&am…

第三届航空航天与控制工程国际学术会议 (ICoACE 2024)

重要信息 会议官网&#xff1a;www.icoace.com 线下召开&#xff1a;2024年11月29日-12月1日 会议地点&#xff1a;陕西西安理工大学金花校区 &#xff08;西安市金花南路5号&#xff09; 大会简介 2024年第三届航空航天与控制工程国际学术会议&#xff08;ICoACE 2024&a…

如何下载链接为blob类型的视频,video 标签 src:blob 链接转下载MP4

文章目录 前言这种链接是如何生成的&#xff1f;原理分析 第一步&#xff0c;找到源地址1.在想下载的视频网页&#xff0c;按f12打开开发人员工具。找到video标签&#xff0c;锁定src属性2.确认src源为blob&#xff1a;样式&#xff0c;转到网络&#xff08;network&#xff09…

Redis | Redis常用命令及示例总结(API)

前言 参考文档&#xff1a;http://doc.redisfans.com/index.html 本篇主要总结Redis的常用命令&#xff0c;笔者在记录命令时的格式如下&#xff1a; 命令关键字&#xff1a;命令示例&#xff1b;命令说明&#xff1b; 命令参数解释及一些说明&#xff1b; 其中命令关键字使用…

【VTK】MFC中使用VTK9.3

MFC中如果使用VTK 碎碎念一、vtk环境配置二、具体实现1、新建类2. 自定义控件3、跑个栗子 总结 碎碎念 如果不是老程序用的MFC&#xff0c;我才不想用MFC去使用VTK呢。 一、vtk环境配置 关于环境配置你可以看这篇文章&#xff0c;在这里不过多赘述。需要注意要选择支持MFC&a…

《译文》2024年11月数维杯国际大学生数学建模挑战赛题目

# 赛题正式发布 2024年第十届数维杯国际大学生数学建模挑战赛顺利开赛&#xff0c;竞赛开始时间为北京时间2024年11月15日09:00至北京时间2024年11月19日09:00&#xff0c;共计4天&#xff0c;竞赛题目正式发布&#xff0c;快来一起围观&#xff0c;你认为今年的哪个题目更具有…

SentenceTransformers×Milvus:如何进行向量相似性搜索

你可曾经历过在 Meetup 上听到一段绝妙的内容&#xff0c;但发现回忆不起具体的细节&#xff1f;作为一名积极组织和参与 Meetup 的开发者关系工程师&#xff0c;我常常会有这种感受。 为了解决这个问题&#xff0c;我开始探索使用相似性搜索技术来筛选大量的非结构化数据。非结…

如何在 Ubuntu 20.04 上的 PyCharm 中使用 Conda 安装并配置 IPython 交互环境

如何在 Ubuntu 20.04 上的 PyCharm 中使用 Conda 安装并配置 IPython 交互环境 要在 Ubuntu 20.04 上的 PyCharm 中配置 IPython 交互环境&#xff0c;并使用 Conda 作为包管理器进行安装&#xff0c;你需要遵循一系列明确的步骤。这些步骤将确保你可以在 PyCharm 中使用 Cond…

VMware虚拟机(Ubuntu或centOS)共享宿主机网络资源

VMware虚拟机(Ubuntu或centOS)共享宿主机网络资源 由于需要在 Linux 环境下进行一些测试工作&#xff0c;于是决定使用 VMware 虚拟化软件来安装 Ubuntu 24.04 .1操作系统。考虑到测试过程中需要访问 Github &#xff0c;要使用Docker拉去镜像等外部网络资源&#xff0c;因此产…

近期两篇NeRF/3DGS-based SLAM方案赏析:TS-SLAM and MBA-SLAM

原文链接&#xff1a;近期两篇NeRF/3DGS-based SLAM方案赏析&#xff1a;TS-SLAM and MBA-SLAM paper1&#xff1a;TS-SLAM: 基于轨迹平滑约束优化的神经辐射场SLAM方法 导读 本文提出了TS-SLAM&#xff0c;一种改进的基于神经辐射场&#xff08;NeRF&#xff09;的SLAM方法…

C# 实现BLE Client 程序与ardunioESP32 通信

编写一个C# Windows 桌面应用程序&#xff0c;与ardunio ESP32 Client 通信。 预备工作 建立一个项目Nuget安装 Microsoft.Windows.SDK.Contracts右击引用菜单中点击&#xff1a;从 packages.config 迁移到 PackageReference using System; using System.Collections.Generi…

【c++丨STL】stack和queue的使用及模拟实现

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C、STL 目录 前言 一、什么是容器适配器 二、stack的使用及模拟实现 1. stack的使用 empty size top push和pop swap 2. stack的模拟实现 三、queue的…

MyBatis-Plus分页插件IPage用法

首先就是service接口需要继承IService<entity> 然后就是业务类实现类中需要继承ServiceImpl<Mapper,entity> Mapper正常写法&#xff0c;继承baseMapepr<entity> IPage的使用方式 QueryWrapper<MdSaleDayPhone> queryWrappernew QueryWrapper<>…

基于阿里云服务器部署静态的website

目录 一&#xff1a;创建服务器实例并connect 二&#xff1a;本地文件和服务器share 三&#xff1a;关于IIS服务器的安装预配置 四&#xff1a;设置安全组 五&#xff1a;建站流程 六&#xff1a;关于备案 一&#xff1a;创建服务器实例并connect 创建好的服务器实例在云…

Android Studio 设置不显示 build-tool 无法下载

2024版本查看build-tool版本 File -> Settings -> Languages & Frameworks -> Android SDK 或者直接打开Settings后搜索“SDK” 解决方案 将 Android Studio 升级到2022.2.1以上的版本将 C:/Windows/System32/drivers/etc/hosts 文件用管理员身份打开&#xff0c…