51-48 CVPR 2024 | Vlogger: make your dream a vlog 自编剧制作视频博客

24年1月,上海交大、上海人工智能实验室、中科院联合发布Vlogger:make your dream a vlog。该论文主要工作是生成超过5分钟的视频博客vlog。鉴于现有文本到视频T2V生成方法很难处理复杂的故事情节和多样化的场景,本文提出了一个名为Vlogger的通用AI系统,将长视频生成任务优雅地分解为四个阶段,包括 (1) 剧本Script,(2) 演员Actor, (3)制作人ShowMaker 和 (4) 配音员Voicer。此外,论文还提出了一种名为ShowMaker的视频扩散模型,以提高T2V生成和预测的性能。最终的实验结果表明,该方法在零样本T2V生成和预测任务中取得了最先进的性能。

总体说来,Vlogger有四大特色:

  • 提出了一个新颖的Video Diffusion视频生成扩散模型—ShowMaker,以生成每个场景的视频片段。该模型采用了一种独特的时空增强块STEB,能够自适应地利用场景描述和演员图像作为文本和视觉提示,以增强剧本和演员的时空一致性。
  • 开发了一种概率模式选择机制,通过混合训练T2V生成和预测,增强了ShowMaker的能力。在推理阶段,通过将生成和预测模式进行序列组合,ShowMaker能够生成具有可控持续时间的视频片段,从而使Vlogger可以根据LLM导演的剧规划划生成具有理想持续时间的视频博客vlog。
  • 提出了一种通用AI系统Vlogger,通过自上而下规划和自下而上拍摄的可解释性的合作,它可以从开放世界的描述中生成超过5分钟的vlogs。
  • Vlogger通过将用户故事优雅地分解成一系列拍摄场景,并设计不同场景中参考演员图像,从而克服了长视频生成任务中遇到的挑战。这可以减少突然的镜头变化导致空间—时间不连贯的问题,同时利用场景文本和演员图像的明确指导。

​​​​​​​该工作有很大的实用性,制作出的效果也特别好,在视频制作、视频营销、视频学习、视频推荐和视频修复领域很有推广价值。

Abstract

在这项工作中,我们提出了Vlogger,这是一种通用AI系统,按用户描述生成分钟级视频博vlog。与几秒钟的短视频不同,视频博客Vlog通常包含复杂的故事情节和多样化的场景,这对于大多数现有的视频生成方法来说是一个挑战。为了突破这个瓶颈,我们的Vlogger巧妙地利用大型语言模型 LLM作为导演Director,并将vlog的长视频生成任务分解为四个关键阶段,我们调用各种基础模型来扮演vlog专业人士的关键角色,包括 (1) 剧本Script,(2) 演员Actor, (3)制作人ShowMaker 和 (4) 配音员Voicer。通过这种模仿人类的设计,Vlogger可以通过自上而下规划和自下而上拍摄的可解释性的合作生成vlogs。此外,我们引入了一种新的视频扩散模型ShowMaker,它在Vlogger中充当摄像师,用于生成每个拍摄场景的视频片段。将剧本和演员作为文本提示和视觉提示,可以有效地增强vlog的时空连贯性。此外,我们为ShowMaker设计了一个简洁的混合训练范式,提高了它在T2V生成和预测方面的能力。最后,大量实验表明,我们的方法在零样本T2V生成和预测任务上实现了最先进的性能。更重要的是,Vlogger可以从开放世界描述中生成超过5分钟的vlog,而不会丢失剧本和演员的视频一致性。

1. Introduction

Vlogs代表了一种独特的博客形式,其特点是利用视频作为主要媒介而不是文本。由于动态场景中有更多的实时表达,vlog已成为数字世界中最流行的在线共享方式之一。在过去的几年里,扩散模型的显著成功对视频生成有很大影响。

  • IMAGEN VIDEO: HIGH DEFINITION VIDEO GENERATION WITH DIFFUSION MODELS
  • Make-A-Video: Text-to-Video Generation without Text-Video Data
  • ModelScope Text-to-Video Technical Report
  • LAVlE: High-Quality Video Generation with Cascaded Latent Diffusion Models
  • NUWA-XL: Diffusion over Diffusion for eXtremely Long Video Generation
  • Show-1: Marrying Pixel and Latent Diffusion Models for Text-to-Vide Generation

因此,一个自然的问题是,我们能否构建一个通用人工智能系统来自动生成精彩的vlog?

遗憾的是,目前的大多数视频扩散方法主要通过图像扩散模型的时间适应来生成短视频。相比之下,vlog通常在开放世界中生成分钟级长视频。最近,在长视频生成方面取得了一些尝试。

  • Phenaki: Variable Length Video Generation From Open Domain Textual Description
  • NUWA-XL: Diffusion over Diffusion for eXtremely Long Video Generation

然而,这些早期的工作要么需要对大型精确字幕、长视频数据集进行大量训练,要么遭受镜头变化明显不连贯。因此,生成一个具有复杂叙事和多场景的分钟级vlog仍然具有挑战性。我们注意到成功的vlog制作在现实世界中是一个系统工作,其中关键工作人员参与剧本创建、演员设计、视频拍摄和编辑。受此启发,我们认为,生成长篇视频博客需要详细的系统规划和拍摄过程,而不是简单地设计一个生成模型。

图 1. Vlogger简介。基于用户故事,Vlogger利用大型语言模型LLM作为导演,并将分钟级长视频vlog生成任务分解为Script,Actor,ShowMaker and Voicer四个关键阶段。ShowMaker是一种新颖的视频扩散模型,可以生成每个拍摄场景的视频片段,具有剧本和演员的一致性。  

因此,我们提出了一种用于vlog生成的通用 AI 系统,即Vlogger,它可以通过在核心步骤中,利用各种基础模型,模仿各种专业人士来巧妙地解决这些困难任务。如图 1 所示,由于语言知识理解的强大能力,我们首先聘请大型语言模型LLM作为导演,例如GPT-4。给定一个用户故事,这个导演安排了一个四步的 vlog 生成计划。

  • 剧本Script。首先,我们为LLM导演引入了一种渐进剧本创建范式。通过这种范式中从粗到细的指令,LLM导演可以有效地将用户故事转换为剧本,该剧本通过多个拍摄场景及其相应的拍摄持续时间来充分描述故事。
  • 演员Actor。在创建脚本后,LLM导演再次读取剧本以总结演员,然后调用角色设计师(例如,SD-XL)在vlog中生成这些演员的参考图像。
  • 制作人ShowMaker。在剧本文本和演员图像的指导下,我们开发了一种新颖的ShowMaker作为摄像师,它可以有效地为每个拍摄场景生成具有时空一致性的可控持续片段。
  • 配音员Voicer。最后,LLM Director 调用语音器(例如,Bark )将 vlog 与剧本字幕相关联。

需要注意的是,我们的 Vlogger 克服了以前在长视频生成任务中遇到的挑战。一方面,它将用户故事优雅地分解为许多拍摄场景,并设计了可以参与 vlog 中不同场景的演员图像。在这种情况下,它可以在场景文本和演员图像的显式指导下减少突然镜头变化的时空不一致性。另一方面,Vlogger 为每个场景制作单个视频片段,并将它们无缝集成到单个内聚 vlog 中。因此,这绕过了大规模长视频数据集繁琐的训练过程。通过自顶向下规划和自底向上拍摄之间的这种协作,Vlogger 可以有效地将开放世界故事转换为分钟级长的视频博客 vlog。

此外,我们想强调的是,ShowMaker 是一个独特的视频扩散模型,旨在生成每个拍摄场景的视频片段。从结构的角度来看,我们在该模型中引入了一种新颖的时空增强块 STEB。这个块可以自适应地利用场景描述和演员图像作为文本和视觉提示,仔细引导ShowMaker增强剧本和演员的时空一致性。从训练的角度来看,我们开发了一种概率模式选择机制,该机制可以通过混合训练文本到视频 T2V 生成和预测来提高 ShowMaker 的容量。更具体地说,在推理阶段通过生成和预测模式的顺序组合,ShowMaker 可以生成持续时间可控的视频片段。这允许我们的 Vlogger 根据 LLM 导演剧本中每个场景的规划,生成具有更长持续时间的 vlog。

最后,通过在流行的视频基准中进行昂贵的实验,我们的方法在零样本T2V生成和预测方面实现了最先进的性能。更重要的是,Vlogger 尽管只使用了 66.7% 的训练视频,但优于众所周知的长视频生成方法,如Phenaki。值得注意的是,Vlogger 能够生成超过 5 分钟的 vlog,而不会丢失视频中剧本与演员的连贯性。

2. Related Works

Text-to-Video Generation

与传统的无条件和类条件视频生成不同,T2V生成侧重于自动将文本描述转换为视频。这是一个具有挑战性的任务,因为它涉及理解文本语义并将其翻译成视频内容。这通常需要强大的跨模态算法、大型计算资源和广泛的视频数据。基于扩散模型在文本到图像 T2I 生成方面的成功,一系列此类工作最近转移到 T2V 生成。然而,无论是从头开始还是从T2I模型开始训练,大多数方法主要致力于从简单的描述中生成几秒钟的短视频。相比之下,我们的 Vlogger 可以生成具有复杂故事的分钟级长视频博客。

Long Video Generation

长视频的生成主要依赖于并行或自回归结构。然而,这些早期的工作仍然面临 vlog 生成的挑战。一方面,并行方式可以通过从粗到细的生成来缓解时空内容不连贯问题。然而,这种方法需要对大型、标注良好的长视频数据集进行广泛而费力的训练。另一方面,自回归方式可以通过使用滑动窗口迭代应用短视频生成模型来缓解对训练长视频的大量数据要求。然而,这种解决方案往往会出现明显的镜头变化和长期不连贯,这在生成包含复杂叙事和多个场景的视频博客时就会成为问题。值得一提的是,社区逐渐意识到将高阶推理任务委托给LLM,对视觉任务有很大的帮助。我们的Vlogger将LLM引入到长视频生成领域,并通过自顶向下规划和自底向上拍摄的合作,有效地解决了以往方法中训练负担和内容不连贯问题。

3. Method

3.1. Overall Framework of Vlogger

为了生成分钟级别的视频博客 vlog,Vlogger 利用 LLM 作为导演,它可以在规划和拍摄阶段通过四个关键角色有效地分解这个生成任务。如图 1 所示,LLM Director首先在规划阶段创建剧本Script和设计演员Actor。基于 Script 和 Actor,制作人 ShowMaker 在拍摄阶段为每个场景生成一个视频片段,配音员Voicer为这个片段配字幕。最后,可以将所有片段组合成一个 vlog。

3.1.1 Top-Down Planning

vlog 往往来自一个用户故事,其中包含许多镜头变化的多样化内容。显然,通过将如此复杂的故事直接输入到视频生成模型中,产生分钟级长 vlog 具有挑战性。我们建议利用LLM作为导演,并通过图 2 中的自顶向下规划对用户故事进行分解。

图 2. 自上而下的规划。通过与LLM的四轮对话,我们逐渐将用户故事转化为最终的剧本。在此基础上,我们进一步提取演员参考图像,然后确定各个演员将在哪个场景中出演。 

Script Creating

首先,我们将使用故事解析为剧本,该剧本通过许多拍摄场景明确地描述了这个故事。在这种情况下,我们可以为每个拍摄场景生成一个视频片段,而不是从整个故事中繁琐的学习长视频。由于LLM在语言理解方面表现出了令人印象深刻的能力,我们将用户故事输入这样一个导演Director(即LLM)进行剧本生成。如图 2 所示,我们引入了一种渐进式创建范式,它可以通过从粗到细的步骤有效地解析故事。

给定用户故事 U 和创建指令 I (i)/S ,LLM Director 从前一个 S(i-1) 生成当前剧本 S(i)。更具体地说,有四个步骤,包括

(1) 粗略Rough。首先,LLM 从故事中生成脚本的基本草稿。

(2) 详细Detailed。然后,LLM 细化粗略的脚本。

(3) 完整Completed。接下来,LLM检查详细的脚本是否遗漏了故事的重要部分。

(4) 时间表Scheduled。最后,LLM根据场景内容为完整剧本中的每个场景分配一个拍摄持续时间。为方便起见,我们将最终剧本表示为 S,如下所示。它包含 N 个拍摄场景的描述 {S1,..., SN } 及其分配的持续时间 {T1,..., TN }。

Actor Designing

生成剧本后,是时候在 vlog 中设计演员了。如图 2 所示,我们请求LLM导演从剧本S中总结演员列表 A

其中 IA 是演员摘要的指令。然后,根据演员描述,LLM 导演调用设计人员来生成这些演员 R 的参考图像

由于其高质量的生成,我们选择 Stable Diffusion XL 作为角色设计者。最后,基于剧本 S 和 演员A,LLM 导演决定剧本的每个拍摄场景中的领先参与者(即主角)

其中 Ip 是主角选择的指令。生成的文档 P 与剧本 S 对齐,其中 Pn 描述了哪个演员出现在场景 Sn 中。例如图 2 中 S6 的 A1。

3.1.2 Bottom-Up Shooting

通过上面的自顶向下规划,LLM 导演灵活地将复杂的用户故事分解为几个场景,并为每个场景设计演员参考图像。这种方式大大降低了 vlog 生成的难度,因为我们可以通过自下而上的拍摄生成 vlog,即我们只需要为每个拍摄场景生成视频片段,并将它们全部组合成一个 vlog。

ShowMaker Shooting

为了生成拍摄场景的视频片段,我们引入了一种新的 ShowMaker 作为视频拍摄者,它具有两个不同设计的视频扩散模型。首先,重要的是保持生成片段中剧本和演员的时空连贯性。因此,我们的 ShowMaker 不仅采用场景描述 Sn 作为文本提示,也将场景 Rn 的演员图像作为视觉提示。其次,每个场景都被分配了剧本中的拍摄持续时间。为了控制每个场景的持续时间,我们的 ShowMaker 包含两个学习模式,包括图 3 中的生成和预测。

图 3. 自底向上拍摄。对于每个场景,ShowMaker可以通过使用剧本描述和演员图像作为文本和视觉提示,生成具有剧本和演员时空一致性的视频片段。此外,ShowMaker可以有效地控制片段的持续时间,在推理中依次进行生成和预测。最后,我们应用文本到语音(TTS)模型作为配音器。 

具体来说,它从生成模式开始。对于拍摄场景 n,我们将其脚本描述 Sn 和演员参考图像 Rn 输入到 ShowMaker 中

它从噪声 Clip N (1)/n 生成该场景 C(1)/n 的第一个视频剪辑。如果该剪辑的持续时间小于脚本中分配的持续时间 Tn,我们继续执行预测模式,即当前 Clip C(j)/n (k) 的最后 k 帧用作上下文,当从噪声输入 N (j+1)/n 生成下一个剪辑时

请注意,在预测模式下不需要演员参考图像,因为该演员的外观已在当前 Clip C(j)/n (k) 中显示为用于预测的输入。该预测过程停止,直到总持续时间达到该场景的分配 Tn。随后,我们将所有剪辑组合为该场景的视频片段,即 Cn = {C(1)n ,..., C(J)n }。

Voicer Speaking

为了提高 vlog 的完整性,我们应用 Text-To-Speech 模型(例如 Bark 作为 Voicer,它将场景描述 Sn 转换为相应的音频 On = Bark(Sn)。最后,我们将此音频添加到相应的视频片段 Vn = On ⊕ Cn 上,并将有声视频片段组合成一个完整的 vlog,即 V = {V1,..., VN }。

3.2. ShowMaker

如第 3.1.2 节所述,ShowMaker 在生成拍摄场景的视频片段中起着至关重要的作用。在这项工作中,我们为它引入了一个文本到视频扩散模型。它遵循潜在扩散模型的风格。在扩散阶段,我们将高斯噪声逐步添加到训练片段的潜在代码中。在去噪阶段,我们在任何迭代步骤从有噪声的潜在代码中重构潜在代码。为简单起见,我们仅在图 4 (a) 中展示了去噪阶段。首先,我们将嘈杂的训练片段转发到自动编码器中以提取其潜在代码。然后,我们将其输入到去噪 U-Net 中以学习干净的潜在代码。最后,我们利用解码器使用干净的潜在代码重建原始片段。但是,与现有的视频扩散模型相比,我们新颖的 ShowMaker 包含两种不同的设计,在图 4 (b) 中的模型结构(即时空增强块)和图 4 (c) 中的训练范式(即模式选择)。

图 4. ShowMaker(a)总体架构。(b)时空增强块(STEB)。通过空间-演员和时间-文本的交叉注意,STEB可以进一步增强片段中演员和脚本的连贯性。(c)模式选择。我们通过掩码帧的概率选择,引入了T2V生成和预测的混合训练范式。 

3.2.1 Spatial-Temporal Enhanced Block (STEB)

为了重建训练视频片段的干净潜在代码,去噪 U-Net 中的每个块都包含先前工作中的空间和时间操作。首先,空间操作在片段中分别对每一帧特征进行编码。通常,三个操作继承自文本到图像生成方法,包括空间分辨率(CV)、空间自注意(SA)和空间交叉注意(CA)。

其中 Xin 是训练片段的噪声特征,Ft 是迭代步骤 t 的位置嵌入。为了指导给定文本的去噪,我们使用场景描述Sn作为Eq.(9)中交叉注意的K和V。然而,我们注意到这种空间编码没有考虑演员。因此,在生成片段时,它不可避免地存在演员不连贯的问题。为了解决这个问题,我们引入了一个空间图像交叉注意。

对于拍摄场景 Sn,我们利用主角(Eq. 4) 在该场景中找到相应的演员。然后,我们利用演员参考图像Rn作为空间交叉注意的视觉上下文。随后,我们通过剧本和演员的互补指导来增强空间嵌入,即权重为 β 的 Zse = Xca + βYca。

在空间编码之后,时间学习片段中跨帧的相关性。因此,典型的操作是沿时间维度执行自注意。

然而,这种时间操作没有考虑场景文本的约束。在生成视频片段时,它通常会导致文本不连贯。因此,我们引入了一个时间文本交叉注意。

我们利用场景描述 Sn 作为时间编码的文本上下文。通过空间参与者(等式 10)和时间文本(等式 12)交叉注意,我们的 STEB 可以进一步增强片段中的演员和剧本连贯性。

3.2.2 Mixed Training Paradigm with Mode Selection

如第 3.1.2 节所述,ShowMaker 旨在生成剧本中分配持续时间的视频片段。为此,它利用了推理阶段生成和预测模式的组合。接下来,我们解释了如何训练我们的 ShowMaker 来学习这些模式。如图 4 (c) 所示,我们设计了一种模式选择机制,该机制选择干净片段的 k 帧作为噪声片段的上下文。k=0 设置是指生成模式,因为没有来自干净片段的上下文。或者,k>0 设置是指预测模式,因为干净片段的 k 帧已经可用。目标是从嘈杂的片段中生成其余帧。为了将这两种模式集成到训练中,我们设计了一种概率方式来选择 k。

其中 P(k) 是 k 的选择概率分布。此外,0<m<1 和 0≤m 是手动参数,分别控制 P(k) 的模式选择趋势和保留帧的最大数量。在确定 k 后,我们在干净片段潜在代码上引入了一个帧掩码 Mk

其中我们只保留 k 帧并屏蔽其余帧。然后,我们将掩码Mk与片段Xnoise和Xk的潜在代码连接起来,

这产生了输入特征 Xin,用于在 3.2.1 节中训练去噪 U-Net。通过这种简洁的概率方式,我们可以在训练过程中有效地整合生成 (k=0) 和预测 (k>0) 模式。

4. Experiments

Datasets

为了与最先进的模型比较,我们对流行的视频基准(即 UCF-101、Kinetics-400 和 MSR-VTT)进行了零样本评估。

UCF-101 包含 101 个动作类别的视频。我们使用FVD来评估生成的视频与真实视频之间的距离。
Kinetics-400 包含 400 个动作类别视频的数据集。我们使用 FID 来评估视频生成的性能。
MSR-VTT 是一个带有开放词汇字幕的视频数据集,其中 CLIPSIM 和 CLIP-FID 通常用于评估 T2V 生成。

此外,由于这些现有的基准要么只有少量的测试视频,要么只包含没有复杂描述的动作标签,我们建议收集消融研究的评估基准。它被称为 Vimeo11k,我们从 Vimeo 中的 10 个主流类别中收集 11,293 个开放世界视频及其标题。据我们所知,它是零样本视频生成的最大测试基准。

Implementation Details

1)Director & Script & Actor & Voicer

我们选择 GPT-4  作为我们的 LLM 导演来生成剧本。然后我们使用Stable Diffusion XL和Bark作为我们的设计者和语音器来生成参考演员图像,并将剧本转换为语音。

2)ShowMaker

我们选择 SD-1.4 作为我们的基础模型,并遵循 Make-A-Video,添加时间自注意力。然后,我们在每个时序自注意之上添加我们的时间文本交叉注意力。我们将U-Net卷积层的输入通道从4扩展到9,使模型可以将Eq.(15)中的拼接特征作为输入。我们对新添加的通道使用零初始化。我们使用CLIP ViTL/14 作为文本编码器εT。VQ-VAE作为由编码器ε和解码器D组成的自动编码器。此外,我们使用OpenCLIP ViT-H/14 作为图像编码器εI,并在STEB块中添加空间图像交叉注意。扩散步骤 T 设置为 1000。在Eq.(13)中,我们将模式选择的参数设为α = 0.6,m = 6,β = 1。

我们使用公开图像数据集(即Laion400M)和视频数据集(即WebVid10M)进行联合训练。

4.1. Comparison with state-of-the-art

             图 5. 长视频生成。UCF-101 (1000帧)的比较。FVD越低,生成性能越好。

4.2. Ablation StudyVlog Generation Process

Vlog Generation Process

表 4,不同生成过程之间的比较。

Spatial-Temporal Enhanced Block

表 5. 时间文本交叉注意和混合训练范式的消融研究。“TTCA”和“MTP”分别表示时间文本交叉注意和混合训练范式。

图 6. 空间图像交叉注意消融。曲线上一个点周围的值对应于 β。β=0 表示没有空间图像交叉注意力的原始网络。

4.3. Visualization

首先,通过与著名的 Phenaki 相比,我们可视化了长视频生成。请注意,由于 Phenaki 没有开源代码,我们交替使用官方网站中显示的演示。具体来说,我们将相同的故事描述输入到我们的 Vlogger 中。如图 7 所示,我们的Vlogger显示出更好、更多样化的视频内容。此外,根据我们的 LLM 创建的脚本,我们的 Vlogger 充分展示了持续时间更长的故事(即 7min59s)。

我们进一步可视化了 ShowMaker 的 T2V 视频生成和预测消融。如图 8 所示,ShowMaker通过设计,在生成和预测性能方面有了显著的改进。此外,它可以利用空间演员交叉注意中的视觉提示来区分文本提示中的“Teddy”概念。

5. Conclusion

在本文中,我们介绍了一种AI通用系统 Vlogger,用于从开放世界描述中生成超过 5 分钟的视频博客 vlog,而不会丢失剧本和演员上的视频时空连贯性。此外,我们提出了一种新颖的视频扩散模型 ShowMaker,用于提升最先进的 T2V 生成和预测。最后,我们发布了所有模型、数据和代码,允许为开放世界中的长视频生成开发进一步的设计。

本专题由深圳季连科技有限公司AIgraphX自动驾驶大模型团队编辑,旨在学习互助。内容来自网络,侵权即删。文中如有错误的地方,也请在留言区告知。

Vlogger-https://arxiv.org/abs/2401.09414

 https://github.com/zhuangshaobin/Vlogger

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

百度文库最新AI旋转验证码

上个月发现百度文库最新出了一个验证码&#xff0c;是AI生成的。内容每次可能都不一样&#xff0c;所以给识别造成 了很大困难。传统的比对放松完全失效。 一、介绍 这个是最近才出的最新验证码&#xff0c;内容主要以工厂、建筑、山峰、机器人、汽车、盆栽植物等为主。如下图…

Elasticsearch:如何使用 Java 对索引进行 ES|QL 的查询

在我之前的文章 “Elasticsearch&#xff1a;对 Java 对象的 ES|QL 查询”&#xff0c;我详细介绍了如何使用 Java 来对 ES|QL 进行查询。对于不是很熟悉 Elasticsearch 的开发者来说&#xff0c;那篇文章里的例子还是不能单独来进行运行。在今天的这篇文章中&#xff0c;我来详…

【DPU系列之】Bluefield 2 DPU卡的功能图,ConnectX网卡、ARM OS、Host OS的关系?(通过PCIe Switch连接)

核心要点&#xff1a; CX系列网卡与ARM中间有一个PCIe Swtich的硬件单元链接。 简要记录。 可以看到图中两个灰色框&#xff0c;上端是Host主机&#xff0c;下端是BlueField DPU卡。图中是BF2的图&#xff0c;是BF2用的是DDR4。DPU上的Connect系列网卡以及ARM系统之间有一个…

第一课为SimaPro的基本特征

问题&#xff1a; 咖啡机的设计中的环境影响指标。 step 1 点击Wizards&#xff0c;看到“Guided tour (with coffee)”。 在这个例子里&#xff0c; 定义了两种咖啡机&#xff1a; Sima型咖啡机 和 Pro型咖啡机&#xff0c; 具有以下规格&#xff1a; Sima型咖啡机 Pro型咖啡…

MySQL——Windows平台下MySQL安装与配置(一)MySQL安装

Windows平台下安装和配置 基于Windows平台的MySQL安装文件有两个版本&#xff0c;一种是以.msi作为后缀名的二进制分发版&#xff0c;一种是以.zip作为后缀的压缩文件。其中.msi的安装文件提供了图形化的安装向导&#xff0c;按照向导提示进行操作即可安装完成&#xff0c;.zip…

7-92 骨牌铺方格

在2n的一个长方形方格中&#xff0c;用一个12的骨牌铺满方格&#xff0c;输入n&#xff0c;输出铺放方案的总数。例如n3时&#xff0c;骨牌的铺放方案有3种&#xff0c;如下图所示。 输入格式: 测试数据有多组&#xff0c;处理到文件尾。每组测试输入一个整数n&#xff08;0&l…

【华为】AC直连二层组网隧道转发实验配置

【华为】AC直连二层组网隧道转发实验配置 实验需求拓扑配置AC数据规划表 AC的配置顺序AC1基本配置(二层通信)AP上线VAP组关联--WLAN业务流量 LSW1AR1STA获取AP的业务流量 配置文档 实验需求 AC组网方式&#xff1a;直连二层组网。 业务数据转发方式&#xff1a;隧道转发。 DHC…

[JUCE]从一个有关右值引用的bug,探幽移动语义

一、问题 当我尝试在\JUCE\extras\WindowsDLL\Builds\VisualStudio2022目录下编译JUCE库的时候&#xff0c;提示报错如下&#xff1a; 报错提示如下&#xff1a; 这里涉及到两个问题 一、这个std::move是干嘛用的 二、为什么这里会报错&#xff1f; 另外&#xff0c;我在实…

Mybatis进阶2

Mybatis进阶1-CSDN博客 Mybatis入门-CSDN博客 Mybatis入门2-CSDN博客 我们接下来要学习Mybatis的高级查询 我们先在数据库中准备我们需要的数据表 teacher表 课程表&#xff1a;与教师表是一对多的关系&#xff0c;所以有一个外键字段 学生表 由于学生表和课程表是多对多的…

Android selinux权限

一.SE 概述 SELinux 是由美国NSA&#xff08;国安局&#xff09;和 SCC 开发的 Linux的一个扩张强制访问控制安全模块。原先是在Fluke上开发的&#xff0c;2000年以 GNU GPL 发布。从 fedora core 2开始&#xff0c; 2.6内核的版本都支持SELinux。 在 SELinux 出现之前&#…

智慧公厕打造公共厕所智慧化管理模式

智慧公厕如何打造智慧化的管理模式&#xff1f;随着智能科技的快速发展&#xff0c;智慧公厕成为了城市管理的一项重要工作。智慧公厕的智能化管理不仅可以提升公厕的整体管理水平&#xff0c;还能为市民提供更加便捷、舒适的使用体验。本文将以智慧公厕源头实力厂家广州中期科…

Qt QImageWriter类介绍

1.简介 QImageWriter 用于写入图像文件的类。它提供了将 QImage 对象保存到不同图像格式文件的功能&#xff0c;包括但不限于 PNG、JPEG、BMP 等。QImageWriter 可以将图像写入文件&#xff0c;也可以写入任何 QIODevice&#xff0c;如 QByteArray&#xff0c;这使得它非常灵活…

CGAL 网格简化

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 为了提高网格处理的效率,通常需要将过于冗长的3D数据集简化为更简洁而又真实的表示。尽管从几何压缩到逆向工程有许多应用,但简洁地捕捉表面的几何形状仍然是一项乏味的任务。CGAL中则为我们提供了一种通过变分几…

MSYS2 Pacman常用命令--以及实际中安装linux命令

MSYS2 Pacman常用命令--以及实际中安装linux命令&#xff1a; 有时候需要使用linux下的命令&#xff0c;用这个工具就是可以实现内容 虽然现在在windows下的wsl命令以及可以很好的使用linux了&#xff0c;但是MSYS2也是个不错的工具&#xff1a; 如何下载linux下nc&#xff0c…

Nodejs-内存控制(垃圾回收机制)(新生代老生代)(Scavenge算法)

内存控制 v8的垃圾回收机制和内存限制 对于性能敏感的服务器端程序&#xff0c;内存管理的好坏&#xff0c;垃圾回收状态的优良成都&#xff0c;都会对服务器造成影响 Node和V8 Node在JavaScript的执行上受益于v8&#xff0c;随着v8的升级享受到更好的性能和性的语言特征。…

详解基于 RAG 的 txt2sql 全过程

前文 本文使用通义千问大模型和 ChromaDB 向量数据库来实现一个完整的 text2sql 的项目&#xff0c;并基于实际的业务进行效果的展示。 准备 在进行项目之前需要准备下面主要的内容&#xff1a; python 环境通义千问 qwen-max 模型的 api-keyChromaDB 向量数据库acge_text_…

一款 NodeJS 版本管理工具 NVM (Windows)

一、简介 Node Version Manager&#xff08;NVM&#xff09;是一种用于管理多个 NodeJS 版本的工具。在日常工作中&#xff0c;我们可能同时在进行多个不同的项目开发&#xff0c;每个项目的需求不同&#xff0c;依赖与不同版本的NodeJS 运行环境。这种情况下&#xff0c;维护…

数据处理学习笔记9

一些其他的函数 “Resize”和“Reshape”的区别主要在于它们对数组元素数量和形状的处理方式不同&#xff0c;以下是详细介绍&#xff1a; “Resize”通常会改变数组的元素数量&#xff0c;在放大数组形状时会用0补全新增的元素&#xff0c;而在缩小数组形状时会丢弃多余的元素…

一款AI工作流项目:phidatahq/phidata

一款AI工作流项目&#xff1a;phidatahq/phidata 构建和测试功能强大的 AI 工作流程。该项目提供了一个工作流平台,可以结合大型语言模型(LLM)和各种工具,扩展模型的实用性和应用范围。[1][4][5] 开发各种 AI 助手应用,如客服聊天机器人、数据分析工具、研究助手等。phidata 提…

Golang | Leetcode Golang题解之第72题编辑距离

题目&#xff1a; 题解&#xff1a; func minDistance(word1 string, word2 string) int {m, n : len(word1), len(word2)dp : make([][]int, m1)for i : range dp {dp[i] make([]int, n1)}for i : 0; i < m1; i {dp[i][0] i // word1[i] 变成 word2[0], 删掉 word1[i], …