一篇论文回顾 Sora 文生视频技术的背景、技术和应用。

一篇论文回顾 Sora 文生视频技术的背景、技术和应用。

追赶 Sora,成为了很多科技公司当下阶段的新目标。研究者们好奇的是:Sora 是如何被 OpenAI 发掘出来的?未来又有哪些演进和应用方向?

Sora 的技术报告披露了一些技术细节,但远远不足以窥其全貌。

在最近的一篇文章中,微软研究院和理海大学的研究者根据已发表的技术报告和逆向工程,首次全面回顾了 Sora 的背景、相关技术、新兴应用、当前局限和未来机遇。

图片

  • 论文标题:Sora: A Review on Background, Technology, Limitations, and Opportunities of Large Vision Models

  • 论文链接:https://arxiv.org/pdf/2402.17177.pdf

背景

在分析 Sora 之前,研究者首先盘点了视觉内容生成技术的沿袭。

在深度学习革命之前,传统的图像生成技术依赖于基于手工创建特征的纹理合成和纹理映射等方法。这些方法在生成复杂而生动的图像方面能力有限。

如图 3 所示,在过去十年中,视觉类的生成模型经历了多样化的发展路线。

图片

生成对抗网络(GAN)和变分自动编码器(VAE)的引入标志着一个重要的转折点,因为它在各种应用中都具有非凡的能力。随后的发展,如流模型和扩散模型,进一步增强了图像生成的细节和质量。人工智能生成内容(AIGC)技术的最新进展实现了内容创建的民主化,使用户能够通过简单的文本指令生成所需的内容。

在 BERT 和 GPT 成功将 Transformer 架构应用于 NLP 之后,研究人员尝试将其迁移到 CV 领域,比如 Transformer 架构与视觉组件相结合,使其能够应用于下游 CV 任务,包括 Vision Transformer (ViT) 和 Swin Transformer ,从而进一步发展了这一概念。在 Transformer 取得成功的同时,扩散模型也在图像和视频生成领域取得了长足进步。扩散模型为利用 U-Nets 将噪声转换成图像提供了一个数学上合理的框架,U-Nets 通过学习在每一步预测和减轻噪声来促进这一过程。

自 2021 年以来,能够解释人类指令的生成语言和视觉模型,即所谓的多模态模型,成为了人工智能领域的热门议题。

CLIP 是一种开创性的视觉语言模型,它将 Transformer 架构与视觉元素相结合,便于在大量文本和图像数据集上进行训练。通过从一开始就整合视觉和语言知识,CLIP 可以在多模态生成框架内充当图像编码器。

另一个值得注意的例子是 Stable Diffusion,它是一种多用途文本到图像人工智能模型,以其适应性和易用性而著称。它采用 Transformer 架构和潜在扩散技术来解码文本输入并生成各种风格的图像,进一步说明了多模态人工智能的进步。

ChatGPT 2022 年 11 月发布之后,2023 年出现了大量文本到图像的商业化产品,如 Stable Diffusion、Midjourney、DALL-E 3。这些工具能让用户通过简单的文字提示生成高分辨率和高质量的新图像,展示了人工智能在创意图像生成方面的潜力。

然而,由于视频的时间复杂性,从文本到图像到文本到视频的过渡具有挑战性。尽管工业界和学术界做出了许多努力,但大多数现有的视频生成工具,如 Pika 和 Gen-2 ,都仅限于生成几秒钟的短视频片段。

在这种情况下,Sora 是一项重大突破,类似于 ChatGPT 在 NLP 领域的影响。Sora 是第一个能够根据人类指令生成长达一分钟视频的模型,同时保持较高的视觉质量和引人注目的视觉连贯性,从第一帧到最后一帧都具有渐进感和视觉连贯性。

这是一个里程碑,对生成式 AI 的研究和发展产生了深远影响。

图片

如图 2 所示,Sora 在准确解读和执行复杂的人类指令方面表现出非凡的能力。该模型可以生成包含多个角色的详细场景,这些角色在错综复杂的背景下执行特定的动作。研究人员认为,Sora 不仅能熟练处理用户生成的文本提示,还能辨别场景中各种元素之间复杂的相互作用。

此外,Sora 的进步还体现在它能够生成具有细微运动和交互描绘的扩展视频序列,克服了早期视频生成模型所特有的短片段和简单视觉渲染的限制。这种能力代表了人工智能驱动的创意工具的飞跃,使用户能够将文字叙述转换成丰富的视觉故事。

总之,这些进步显示了 Sora 作为世界模拟器的潜力,它可以提供对所描绘场景的物理和背景动态的细微洞察。

为了方便读者查阅视觉生成模型的最新进展,研究者在论文附录汇编了近期的代表性工作成果。

图片

技术推演

Sora 的核心是一个预训练的扩散 Transformer。事实证明,Transformer 模型在许多自然语言任务中都具有可扩展性和有效性。与 GPT-4 等强大的大型语言模型(LLM)类似,Sora 可以解析文本并理解复杂的用户指令。为了提高视频生成的计算效率,Sora 采用了时空潜在 patch 作为其构建模块。

具体来说,Sora 会将原始输入视频压缩为潜在时空表示。然后,从压缩视频中提取一系列潜在时空 patch,以囊括短暂时间间隔内的视觉外观和运动动态。这些片段类似于语言模型中的词 token,为 Sora 提供了详细的视觉短语,可用于构建视频。Sora 的文本到视频生成由扩散 Transformer 模型完成。从充满视觉噪音的帧开始,该模型会对图像进行迭代去噪,并根据提供的文本提示引入特定细节。本质上讲,生成的视频是通过多步完善过程产生的,每一步都会对视频进行完善,使其更加符合所需的内容和质量。

图片

如图 4 所示,Sora 的核心本质是一个具有灵活采样维度的扩散 Transformer。它由三部分组成:(1)时空压缩器首先将原始视频映射到潜在空间。(2) 然后,ViT 处理 token 化的潜在表示,并输出去噪潜在表示。(3) 类似 CLIP 的调节机制接收 LLM 增强的用户指令和潜在的视觉提示,引导扩散模型生成风格化或主题化的视频。经过许多去噪步骤后,生成视频的潜在表示被获取,然后通过相应的解码器映射回像素空间。

在本节中,研究者对 Sora 所使用的技术进行了逆向工程,并讨论了一系列相关工作。

数据预处理

Sora 的一个显著特征是它能够训练、理解和生成原始尺寸的视频和图像,如图 5 所示。而传统方法通常会调整视频大小、裁剪或调整视频的长宽比以适应统一的视频和图像。利用扩散 Transformer 架构,Sora 是第一个拥抱视觉数据多样性的模型,可以以多种视频和图像格式进行采样,范围从宽屏 1920x1080p 视频到垂直 1080x1920p 视频以及介于两者之间的视频,而不影响其原始尺寸。

图片

如图 6 所示,Sora 生成的视频能够更好的展现主题,从而确保在场景中完全捕捉到拍摄对象,而其他视频有时会导致视图被截断或裁剪,导致拍摄对象脱离画面。

图片

统一视觉表示。为了有效处理不同持续时间、分辨率和高宽比的图像和视频,关键在于将所有形式的视觉数据转换为统一表示。

Sora 处理的过程是这样的:首先将视频压缩到低维潜在空间,然后将表示分解为时空 patch 来对视频进行 patch 化(patchifies)。但是回看 Sora 技术报告,他们仅仅提出了一个高层次的想法,这给研究界的复现带来了挑战。在接下来的章节中,本文尝试对 Sora 的技术路径进行逆向工程,并且借鉴现有文献,讨论可以复现 Sora 的可行替代方案。

首先是视频压缩网络。Sora 的视频压缩网络(或视觉编码器)旨在降低输入数据(尤其是原始视频)的维度,并输出在时间和空间上压缩过的潜在表示,如图 7 所示。根据技术报告中的参考文献, Sora 压缩网络是基于 VAE 或 VQ-VAE 技术的。

图片

然而,如果不像技术报告中对视频和图像调整大小和裁剪,那么 VAE 将任何大小的视觉数据映射到统一且固定大小的潜在空间挑战巨大。本文总结了两种不同的实现来解决这个问题:

空间 patch 压缩:涉及将视频帧转换为固定大小的 patch,类似于 ViT 和 MAE 中使用的方法(见图 8),然后将其编码到潜在空间中,这种方法对于适应不同分辨率和宽高比的视频特别有效。随后,将这些空间 token 按时间序列组织在一起,以创建时间 - 空间潜在表征。

图片

时间 - 空间 patch 压缩:该技术旨在封装视频数据的空间和时间维度,从而提供全面的表示。该技术不仅仅分析静态帧,还考虑帧间的运动和变化,从而捕获视频的动态信息。3D 卷积的利用成为实现这种集成的一种简单而有效的方法。

图 9 描绘了不同视频压缩方式的比较。与空间 patch 压缩类似,使用具有预定卷积核参数(例如固定内核大小、步幅和输出通道)的时间 - 空间 patch 压缩会导致潜在空间维度也不同。为了缓解这一挑战,空间修补(spatial patchification)所采用的方法在这种情况下同样适用和有效。

图片

总的来说,本文基于 VAE 或其变体如 VQ-VQE 逆向工程了两种 patch 级压缩方法,因为 patch 对处理不同类型的视频更加灵活。由于 Sora 旨在生成高保真视频,因此使用了较大尺寸的 patch 或内核尺寸以实现高效压缩。这里,本文期望使用固定大小的 patch,以简化操作、扩展性和训练稳定性。但也可以使用不同大小的 patch,以使整个帧或视频在潜在空间中的尺寸保持一致。然而,这可能导致位置编码无效,并且给解码器生成具有不同大小潜在 patch 的视频带来挑战。

压缩网络部分还有一个关键问题:在将 patch 送入扩散 Transformer 的输入层之前,如何处理潜在空间维度的变化(即不同视频类型的潜在特征块或 patch 的数量)。这里讨论了几种解决方案:

根据 Sora 的技术报告和相应的参考文献,patch n' pack(PNP)很可能是一种解决方案。如图 10 所示,PNP 将来自不同图像的多个 patch 打包在一个序列中。这种方法的灵感来源于自然语言处理中使用的样本打包,它通过丢弃 token 来实现对不同长度输入的高效训练。在这里,patch 化和 token 嵌入步骤需要在压缩网络中完成,但 Sora 可能会像 Diffusion Transformer(扩散 Transformer)那样,为 Transformer token 进一步 patch 化。

图片

无论是否有第二轮修补,都需要解决两个问题:如何以紧凑的方式打包这些 token,以及如何控制哪些 token 应该被丢弃。

对于第一个问题,研究者采用了简单的「贪心」算法,即在第一个序列中添加足够剩余空间的样本。一旦没有样本可以容纳,序列就会被填充 token 填满,从而产生批处理操作所需的固定序列长度。这种简单的打包算法可能会导致大量填充,这取决于输入长度的分布情况。另一方面,可以控制采样的分辨率和帧数,通过调整序列长度和限制填充来确保高效打包。

对于第二个问题,直观的方法是丢弃相似的 token,或者像 PNP 一样,使用丢弃率调度器。不过,值得注意的是,三维一致性是 Sora 的优良特性之一。在训练过程中,丢弃 token 可能会忽略细粒度的细节。因此,研究者认为 OpenAI 很可能会使用超长的上下文窗口并打包视频中的所有 token,尽管这样做的计算成本很高,例如,多头注意力算子在序列长度上表现出二次成本。具体来说,一个长时间视频中的时空潜在 patch 可以打包到一个序列中,而多个短时间视频中的时空潜在 patch 则会串联到另一个序列中。

建模

  • 图像 DiT

传统的扩散模型主要利用包含下采样和上采样块的卷积 U-Net 作为去噪网络骨干。然而,最近的研究表明,U-Net 架构对扩散模型的良好性能并非至关重要。

通过采用更灵活的 Transformer 架构,基于 Transformer 的扩散模型可以使用更多的训练数据和更大的模型参数。沿着这一思路,DiT 和 U-ViT 是第一批将视觉 Transformer 用于潜在扩散模型的作品。

与 ViT 一样,DiT 也采用了多头自注意力层和层范数和缩放层交错的逐点前馈网络。如图 11 所示,DiT 还通过 AdaLN 进行调节,并增加了一个用于零初始化的 MLP 层,将每个残差块初始化为一个恒等函数,从而大大稳定了训练过程。DiT 的可扩展性和灵活性得到了经验验证。

图片

在 U-ViT 中,如图 11 所示,将包括时间、条件和噪声图像片段在内的所有输入都视为 token,并在浅层和深层 Transformer 层之间提出了长跳跃连接。结果表明,基于 CNN 的 U-Net 中的下采样和升采样算子并非总是必要的,U-ViT 在图像和文本到图像生成方面取得了破纪录的 FID 分数。

与掩蔽自编码器(MAE)一样,掩蔽扩散 Transformer(MDT)也在扩散过程中加入了掩码潜在模型,以明确增强图像合成中对象语义部分之间的上下文关系学习。

图片

具体来说,如图 12 所示,MDT 在训练过程中使用边缘插值(side-interpolated)进行额外的掩蔽 token 重建任务,以提高训练效率,并学习强大的上下文感知位置嵌入进行推理。与 DiT 相比,MDT 实现了更好的性能和更快的学习速度。Hatamizadeh et al. 没有使用 AdaLN(即移位和缩放)进行时间条件建模,而是引入了 Diffusion Vision Transformers (DiffiT),它使用与时间相关的自注意力(TMSA)模块对采样时间步长内的动态去噪行为进行建模。此外,DiffiT 采用两种混合分层架构,分别在像素空间和潜在空间进行高效去噪,并在各种生成任务中取得了新的先进成果。总之,这些研究表明,利用视觉 Transformer 进行图像潜在扩散取得了可喜的成果,为面向其他模态的研究铺平了道路。

  • 视频 DiT

在文本到图像(T2I)扩散模型的基础上,一些近期研究专注于发挥扩散 Transformer 在文本到视频(T2V)生成任务中的潜力。由于视频的时空特性,在视频领域应用 DiT 所面临的主要挑战是:i) 如何将视频从空间和时间上压缩到潜在空间,以实现高效去噪;ii) 如何将压缩潜在空间转换为 patch,并将其输入 Transformer ;iii) 如何处理长序列时空依赖性,并确保内容一致性。

这里将讨论基于 Transformer 的去噪网络架构(该架构旨在时空压缩的潜在空间中运行)下文详细回顾了 OpenAI Sora 技术报告参考文献列表中介绍的两项重要工作(Imagen Video 和 Video LDM)。

Imagen Video 是谷歌研究院开发的文本到视频生成系统,它利用级联扩散模型(由 7 个子模型组成,分别执行文本条件视频生成、空间超分辨率和时间超分辨率)将文本提示转化为高清视频。

图片

如图 13 所示,首先,冻结的 T5 文本编码器会根据输入的文本提示生成上下文嵌入。这些嵌入对于将生成的视频与文本提示对齐至关重要,除了基础模型外,它们还被注入级联中的所有模型。随后,嵌入信息被注入基础模型,用于生成低分辨率视频,然后由级联扩散模型对其进行细化以提高分辨率。基础视频和超分辨率模型采用时空可分离的 3D U-Net 架构。该架构将时间注意力层和卷积层与空间对应层结合在一起,以有效捕捉帧间依赖关系。它采用 v 预测参数化来实现数值稳定性和条件增强,以促进跨模型的并行训练。

这一过程包括对图像和视频进行联合训练,将每幅图像视为一帧,以利用更大的数据集,并使用无分类器引导来提高提示保真度。渐进式蒸馏法用于简化采样过程,在保持感知质量的同时大大减少了计算负荷。将这些方法和技术相结合,Imagen Video 不仅能生成高保真视频,而且还具有出色的可控性,这体现在它能生成多样化的视频、文本动画和各种艺术风格的内容。

Blattmann et al. 建议将二维潜在扩散模型转化为视频潜在扩散模型(Video LDM)。为此,他们在 U-Net 主干网和 VAE 解码器的现有空间层中添加了一些临时时间层,以学习如何对齐单个帧。这些时间层在编码视频数据上进行训练,而空间层则保持固定,从而使模型能够利用大型图像数据集进行预训练。LDM 的解码器可进行微调,以实现像素空间的时间一致性和时间对齐扩散模型上采样器,从而提高空间分辨率。

为了生成超长视频,作者对模型进行了训练,以预测未来帧的上下文帧数,从而在采样过程中实现无分类器引导。为实现高时间分辨率,作者将视频合成过程分为关键帧生成和这些关键帧之间的插值。在级联 LDM 之后,使用 DM 将视频 LDM 输出进一步放大 4 倍,确保高空间分辨率的同时保持时间一致性。这种方法能以高效的计算方式生成全局一致的长视频。此外,作者还展示了将预先训练好的图像 LDM(如稳定扩散)转化为文本到视频模型的能力,只需训练时间对齐层,即可实现分辨率高达 1280 × 2048 的视频合成。

图片

语言指令跟随

为了提高文本到视频模型遵循文本指令的能力,Sora 采用了与 DALL・E 3 类似的方法。

DALL・E 3 中的指令跟随是通过一种描述改进方法来解决的,其假设是模型所训练的文本 - 图像对的质量决定了最终文本 - 图像模型的性能。数据质量差,尤其是普遍存在的噪声数据和省略了大量视觉信息的简短标题,会导致许多问题,如忽略关键词和词序,以及误解用户意图等。描述改进方法通过为现有图像重新添加详细的描述性描述来解决这些问题。该方法首先训练图像描述器(视觉语言模型),以生成精确的描述性图像描述。然后,描述器生成的描述性图像描述将用于微调文本到图像模型。

具体来说,DALL・E 3 采用对比式描述器(CoCa),联合训练具有 CLIP 架构和语言模型目标的图像描述器。该图像描述器包含一个图像编码器、一个用于提取语言信息的单模态文本编码器和一个多模态文本解码器。它首先在单模态图像和文本嵌入之间采用对比损失,然后对多模态解码器的输出采用描述损失。由此产生的图像描述器将根据对图像的高度详细描述进行进一步微调,其中包括主要对象、周围环境、背景、文本、风格和色彩。通过这一步骤,图像描述器就能为图像生成详细的描述性描述。文本到图像模型的训练数据集由图像描述生成器生成的重新描述数据集和真实人工编写数据混合而成,以确保模型捕捉到用户输入。

这种图像描述改进方法带来了一个潜在问题:实际用户提示与训练数据中的描述性图像描述不匹配。DALL・E 3 通过上采样解决了这一问题,即使用 LLM 将简短的用户提示改写成详细而冗长的说明。这确保了模型在推理时接收到的文本输入与模型训练时的文本输入保持一致。

为了提高指令跟踪能力,Sora 采用了类似的描述改进方法。这种方法是通过首先训练一个能够为视频制作详细说明的视频描述器来实现的。然后,将该视频描述器应用于训练数据中的所有视频,生成高质量的(视频、描述性描述)对,用于微调 Sora,以提高其指令跟随能力。

Sora 的技术报告没有透露视频描述器是如何训练的细节。鉴于视频描述器是一个视频到文本的模型,因此有很多方法来构建它:

一种直接的方法是利用 CoCa 架构来制作视频描述,方法是获取视频的多个帧,并将每个帧输入图像编码器,即 VideoCoCa。VideoCoCa 以 CoCa 为基础,重新使用图像编码器预训练的权重,并将其独立应用于采样视频帧。由此产生的帧 token 嵌入会被扁平化,并连接成一长串视频表示。然后,生成式池化层和对比池化层会对这些扁平化的帧 token 进行处理,二者是用对比损失和描述损失联合训练的。

其他可用于构建视频描述的方法包括 mPLUG-2、GIT、FrozenBiLM 等。

最后,为确保用户提示与训练数据中的描述性描述格式一致,Sora 还执行了额外的提示扩展步骤,即使用 GPT-4V 将用户输入扩展为详细的描述性提示。

然而,Sora 训练描述器的数据收集过程尚不清楚,而且很可能需要大量人力,因为这可能需要对视频进行详细描述。此外,描述性视频描述可能会对视频的重要细节产生幻觉。本文作者认为,如何改进视频描述器值得进一步研究,这对提高文本到图像模型的指令跟踪能力至关重要。

提示工程

  • 文本提示

文本提示工程对于指导文本视频模型制作出既具有视觉冲击力又能精确满足用户规格的视频至关重要。这就需要制作详细的描述来指导模型,以有效弥合人类创造力与人工智能执行能力之间的差距。

Sora 的提示涵盖了广泛的场景。近期的作品(如 VoP、Make-A-Video 和 Tune-A-Video)展示了提示工程如何利用模型的自然语言理解能力来解码复杂指令,并将其呈现为连贯、生动和高质量的视频叙事。

如图 15 所示,「一个时髦的女人走在霓虹灯闪烁的东京街头...... 」就是这样一个精心制作的文本提示,它确保 Sora 生成的视频与预期的视觉效果非常吻合。提示工程的质量取决于对词语的精心选择、所提供细节的具体性以及对其对模型输出影响的理解。例如,图 15 中的提示详细说明了动作、设置、角色出场,甚至是所期望的场景情绪和氛围。

图片

  • 图像提示

图像提示为即将生成的视频内容和其他元素(如人物、场景和情绪)提供了视觉锚点。此外,文字提示还可以指示模型将这些元素动画化,例如,添加动作、互动和叙事进展等层次,使静态图像栩栩如生。通过使用图像提示,Sora 可以利用视觉和文本信息将静态图像转换成动态的、由叙事驱动的视频。

图 16 展示了人工智能生成的视频:「一只头戴贝雷帽、身穿高领毛衣的柴犬」、「一个独特的怪物家族」、「一朵云组成了 SORA 一词」以及「冲浪者在一座历史悠久的大厅内驾驭潮汐」。这些例子展示了通过 DALL・E 生成的图像提示 Sora 可以实现哪些功能。

图片

  • 视频提示

视频提示也可用于视频生成。最近的研究(如 Moonshot 和 Fast-Vid2Vid)表明,好的视频提示需要「具体」而「灵活」。这样既能确保模型在特定目标(如特定物体和视觉主题的描绘)上获得明确的指导,又能在最终输出中允许富有想象力的变化。

例如,在视频扩展任务中,提示可以指定扩展的方向(时间向前或向后)和背景或主题。在图 17 (a) 中,视频提示指示 Sora 向后延伸一段视频,以探索导致原始起点的事件。如图 17(b)所示,在通过视频提示执行视频到视频的编辑时,模型需要清楚地了解所需的转换,例如改变视频的风格、场景或氛围,或改变灯光或情绪等微妙的方面。在图 17 (c) 中,提示指示 Sora 连接视频,同时确保视频中不同场景中的物体之间平滑过渡。

图片

虽然以前关于提示工程的研究主要集中在 LLM 和 LVM 的文本和图像提示上,但预计研究者们对视频生成模型的视频提示的兴趣会越来越大。

应用

随着以 Sora 为代表的视频扩散模型技术取得突破,其在不同研究领域和行业的应用正在迅速加速。

本文作者指出,这项技术的影响远远超出了单纯的视频创作,为从自动内容生成到复杂决策过程的各种任务提供了变革潜力。

在论文的第四章中,全面探讨了视频扩散模型的当前应用,希望为实际部署方案提供一个广阔的视角(图 18):

图片

  • 提高模拟能力:对 Sora 进行大规模训练,是因为它能够出色地模拟物理世界的各个方面。尽管没有明确的三维建模,但 Sora 通过动态摄像机运动和远距离连贯性表现出三维一致性,包括物体持久性和模拟与世界的简单交互。此外,Sora 还能模拟类似 Minecraft 的数字环境,在保持视觉保真度的同时由基本策略控制,这一点非常有趣。这些新出现的能力表明,可扩展视频模型可以有效地创建人工智能模型,以模拟物理和数字世界的复杂性。

  • 提高创造力:想象一下,通过文字勾勒出一个概念,无论是一个简单的物体还是一个完整的场景,都能在几秒钟内呈现出逼真或高度风格化的视频。Sora 可以加速设计过程,更快地探索和完善创意,从而大大提高艺术家、电影制作人和设计师的创造力。

  • 推动教育创新:长期以来,视觉辅助工具一直是教育领域理解重要概念不可或缺的工具。有了 Sora,教育工作者可以轻松地将课堂计划从文字变成视频,吸引学生的注意力,提高学习效率。从科学模拟到历史剧,可能性是无限的。

  • 增强可访问性:提高视觉领域的可访问性至关重要。Sora 通过将文字描述转换为可视内容,提供了一种创新的解决方案。这种功能使包括视觉障碍者在内的所有人都能积极参与内容创建,并以更有效的方式与他人互动。因此,它可以创造一个更具包容性的环境,让每个人都有机会通过视频表达自己的想法。

  • 促进新兴应用:Sora 的应用领域非常广泛。例如,营销人员可以用它来制作针对特定受众描述的动态广告。游戏开发商可以利用它根据玩家的叙述生成定制的视觉效果甚至角色动作。

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

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

相关文章

趣学前端 | JavaScript标准库

背景 最近睡前习惯翻会书,重温了《JavaScript权威指南》这本书。这本书,文字小,内容多。两年了,我才翻到第十章。因为书太厚,平时都充当电脑支架。 JavaScript标准库 今天阅读的章节是JavaScript标准库,…

数据库规范化设计案例解析

1.介绍 数据库规范化设计是数据库设计的一种重要方法,旨在减少数据库中的冗余数据,提高数据的一致性,确保数据依赖合理,从而提高数据库的结构清晰度和维护效率。规范化设计通过应用一系列的规范化规则(或称“范式”&a…

【死磕Elasticsearch】从实战中来,到实战中去

文章目录 写在前面:1、索引阻塞的种类2、什么时候使用阻塞?场景1:进行系统维护场景。场景2:保护数据不被随意更改场景。场景3:优化资源使用的场景。场景4:遵守安全规则场景。 3、添加索引阻塞API4、解除设置…

HarmonyOS预览功能报错:[webpack-cli] SyntaxError: Unexpected end of JSON input

harmonyos预览功能报错 在使用DevEco Studio写页面&#xff0c;进行预览的时候报错&#xff1a; [Compile Result] [webpack-cli] SyntaxError: Unexpected end of JSON input [Compile Result] at JSON.parse (<anonymous>) [Compile Result] at updateCached…

psutil, 一个超级有用的Python库

Python的psutil是一个跨平台的库&#xff0c;可以用于获取系统运行时的各种信息&#xff0c;包括CPU使用率、内存使用情况、磁盘和网络信息等。它主要用来做系统监控&#xff0c;性能分析&#xff0c;进程管理。它实现了同等命令行工具提供的功能&#xff0c;如ps、top、lsof、…

20240312-2-贪心算法

贪心算法 是每次只考虑当前最优&#xff0c;目标证明每次是考虑当前最优能够达到局部最优&#xff0c;这就是贪心的思想&#xff0c;一般情况下贪心和排序一起出现&#xff0c;都是先根据条件进行排序&#xff0c;之后基于贪心策略得到最优结果。 面试的时候面试官一般不会出贪…

2024-3-12尾盘一致转分歧

安彩高科开一字符合预期&#xff0c;昨天风光储锂电大涨&#xff0c;理应给大溢价&#xff0c;超预期是 艾艾精工 高开秒板&#xff0c;立航科技高开分歧反核承接良好回封一致&#xff0c;带动了低空经济板块高潮&#xff0c;低空经济开始往 碳纤维 方向扩散。盘中我说了 三晖…

Neo4j 批量导入数据 从官方文档学习LOAD CSV 命令 小白可食用版

学习LOAD CSV&#x1f680; 在使用Neo4j进行大量数据导入的时候&#xff0c;发现如果用代码自动一行一行的导入效率过低&#xff0c;因此明白了为什么需要用到批量导入功能&#xff0c;在Neo4j中允许批量导入CSV文件格式&#xff0c;刚开始从网上的中看了各种半残的博客或者视频…

pytest测试框架使用基础07 fixture—parametrize获取参数的几种常用形式

【pytest】parametrize获取参数的几种常用形式: a.数据结构 b.文件 c.数据库 d.conftest.py配置一、直接在标签上传参 1.1 一个参数多个值 pytest.mark.parametrize("参数", (参数值1, 参数值2, 参数值3))示例&#xff1a; import pytest # 单个参数的情况 pytest.…

每日OJ题_牛客另类加法_力扣不用加号的加法

目录 另类加法 不用加号的加法 另类加法 另类加法__牛客网 class UnusualAdd {public:int addAB(int A, int B) {while (B ! 0) {int C ((B & A) << 1); // 进位A ^ B; // 无进位相加B C; // 直到进位不为0就跳出循环}return A;} };不用加号的加法 面试题 17.0…

WebSocket:实现客户端与服务器实时通信的技术

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

3、Design Script之对象类型

布尔值 布尔值Boolean——true/false是Design Script的常量对象&#xff0c;用于表示真/假值 boolTrue true; boolFalse false&#xff1b; 在数字环境中&#xff0c;布尔值的行为类似于整数0和1 布尔值也可以作为Yes和No来引用 数字 int(integer)——整数 Double&#…

JS的对象

目录 对象&#xff1a;object 对象的创建&#xff1a; 利用对象字面量创建对象&#xff1a; 使用new来进行创建对象&#xff1a; 利用构造函数来创建对象&#xff1a; new的执行&#xff1a; 对象属性的遍历&#xff1a;for in ------ 相当于JAVA的工具类&#xff0c;直…

docker学习入门篇

1、docker简介 docker官网&#xff1a; www.docker.com dockerhub官网&#xff1a; hub.docker.com docker文档官网&#xff1a;docs.docker.com Docker是基于Go语言实现的云开源项目。 Docker的主要目标是&#xff1a;Build, Ship and Run Any App, Anywhere(构建&…

每日一题——LeetCode2129.将标题首字母大写

方法一 个人方法 将字符串转为数组&#xff0c;遍历数组&#xff0c;对数组的每一个元素&#xff0c;先全部转为小写&#xff0c;如果当前元素长度大于2&#xff0c;将第一个字符转为大写形式 var capitalizeTitle function(title) {titletitle.split( )for(let i0;i<tit…

概要了解postman、jmeter 、loadRunner

postman还蛮好理解的&#xff0c;后续复习的话着重学习关联接口测试即可&#xff0c;感觉只要用几次就会记住&#xff1a; 1 从接口的响应结果当中提取需要的数据 2 设置成环境变量/全局变量&#xff08;json value check 、set environment para 3写入到下一个接口的请求数据中…

工具-百度云盘服务-身份认证

目标 通过百度网盘API的方式去获取网盘中的文件&#xff0c;要实现这的第一步就是需要获取网盘的权限。资料(参考) 如果期望应用访问用户的网盘文件&#xff0c;则需要经过用户同意&#xff0c;这个流程被称为“授权”。百度网盘开放平台基于 OAuth2.0 接入授权。OAuth2.0 是…

关于分布式分片,你该知道的事儿

关于分布式分片&#xff0c;你该知道的事儿 前言一、关于分片方式的那些事儿1.1 按照Hash划分1.2 按照区间范围划分1.3 按照数据量划分1.4 来些例子1.4.1 Redis的分片划分1.4.2 Mongo的分片划分 二、关于分区再平衡的那些事儿2.1 基于固定分片数量2.2 基于动态分片数量2.3 基于…

计算机毕业设计 | SSM 在线毕业论文管理 线上考试成绩教务管理系统(附源码)

1&#xff0c; 绪论 研究背景 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于论文管理系统所牵扯的管理及数据保存都是非常多的&#xff0c;例如管理员&#xff1b;首页、系统用户&#xff08;管理员、学生、老师&#xff09;模块管理&#xff08;指导教师、课…

为什么不要使用elasticsearch

互联网上有很多文章&#xff0c;都在讲为什么要使用elasticsearch&#xff0c;却很少有人讲为什么不要使用elasticsearch。作为深入研究elasticsearch四年&#xff0c;负责公司万亿级别检索的操盘手&#xff0c;借着这篇文章&#xff0c;给大家分享一下&#xff0c;为什么不要使…