【文生视频】Diffusion Transformer:OpenAI Sora 原理、Stable Diffusion 3 同源技术

文生视频 Diffusion Transformer:Sora 核心架构、Stable Diffusion 3 同源技术

    • 提出背景
      • 变换器的引入
      • Diffusion Transformer (DiT)架构
      • Diffusion Transformer (DiT)总结
    • OpenAI Sora 设计思路
      • 阶段1: 数据准备和预处理
      • 阶段2: 架构设计
      • 阶段3: 输入数据的结构化
      • 阶段4: 视频压缩和表示
      • 阶段5: 模型训练和优化
      • 阶段6: 输出生成
    • OpenAI Sora 工作流程
      • 步骤1: 视频数据的压缩和转换
      • 步骤2: 时空补丁的提取
      • 步骤3: 使用Transformer处理补丁
      • 步骤4: 生成视频内容
      • 步骤5: 视频解码

 


读懂 Diffusion Transformer 需要的知识点:

  • Transformer
  • ViT:视觉 Transformer
  • Diffusion 扩散模型

提出背景

论文:https://arxiv.org/pdf/2212.09748.pdf

代码:https://github.com/facebookresearch/DiT

在传统的DDPMs中,使用卷积U-Net作为骨干网络是常见的选择。

尽管这些模型在图像生成任务上取得了显著的成功,但是随着生成图像分辨率的提高以及对更复杂图像特征的需求增加,需要寻找更高效和可扩展的模型架构。

假设我们想要生成一系列高质量的图像,这些图像模仿了某种特定的艺术风格,例如梵高的画风。

传统的方法可能依赖于复杂的卷积网络,如U-Net,这种网络通过大量的层次和参数来捕捉图像的细节和风格特征。

然而,这种方法在处理更高分辨率的图像或更复杂的图像风格时,可能会遇到性能瓶颈。

用变换器替代U-Net骨干网络:U-Net是一种流行的用于图像处理任务(特别是图像分割)的卷积神经网络架构。

  • 它的特点是有一个对称的结构,能够有效地捕获图像的局部和全局信息。
  • 在这里,研究者选择用变换器替换U-Net,意味着他们采用了一种基于注意力机制的方法来处理图像,而不是传统的卷积方法。
  • 这种替换旨在利用变换器处理复杂数据依赖关系的能力,以提高扩散模型生成图像的质量和效率。

变换器作用于潜在的补丁上:这意味着变换器模型不是直接在整个图像上一次性操作,而是将图像分割成小块(即补丁),然后在这些小块的潜在表示上应用其注意力机制。

  • 这种方法可以让模型更有效地学习图像的局部细节,同时保持对全局结构的理解。

引入基于变换器的扩散模型(DiTs)后,我们采取不同的策略:

  1. 模型设计:我们设计一个基于变换器的架构,该架构能够更有效地处理图像的潜在表示。

    变换器以其强大的注意力机制著称,能够捕捉图像不同部分之间的复杂关系,这对于图像生成尤其有用。

  2. 潜在空间操作:与直接在像素级别操作不同,我们的模型在所谓的潜在空间中工作,这是一个通过某种形式的编码器得到的压缩图像表示。

    这种表示捕捉了图像的关键特征,但用更少的数据表示,使得模型更加高效。

  3. 可扩展性:为了生成更高质量的图像,我们可以通过增加变换器的深度(即层数)或宽度(即每层的大小),或是增加处理的潜在补丁的数量来提高模型的计算复杂度(Gflops)。

    随着复杂度的提高,模型能够更好地学习复杂的图像特征,生成更接近真实的高分辨率艺术风格图像。

  4. 性能验证:我们通过在一系列图像生成任务上测试我们的模型,特别是在模仿梵高画风的任务上,来验证模型的性能。

    通过计算FID得分,我们发现随着模型复杂度的增加(更多的Gflops),生成的图像与真实的梵高画作在视觉上更为相似,FID得分更低,表明图像质量更高。

  5. 成就:我们的最大型号,DiT-XL/2,在这些图像生成任务中表现出色,不仅在模仿梵高画风方面达到了新的高度,而且在一系列基准测试中设置了新的记录。

基于变换器的扩散模型提供了一种强大且可扩展的方法来生成高质量的图像,能够应对不同分辨率和复杂度的挑战,同时在保持或提高图像质量的同时提高计算效率。

实验结论:

通过增加模型的规模和计算资源投入,能够生成更高质量的图像。这表明DiTs模型是可扩展的,即它们可以通过增加资源投入来实现更好的性能。

变换器的引入

  • 目标:探索变换器架构在DDPMs中的应用,旨在利用其强大的可扩展性和处理大规模数据集的能力来提升图像生成的质量。

  • 实现步骤

    1. 替换骨干网络:用标准变换器架构替换DDPM中的U-Net骨干网络。

    这一步骤需要考虑如何有效地将图像数据转换为适合变换器处理的格式(例如,将图像切分为小块或补丁)。

    1. 模型训练:在变换器骨干的DDPM上进行训练,使用大规模图像数据集并采用适当的训练技巧,如注意力机制和位置编码,以捕捉图像的全局依赖性和局部细节。
    2. 性能评估:通过FID(Fréchet Inception Distance)等指标评估生成图像的质量,验证变换器架构的有效性。

通过将变换器架构应用于DDPMs,我们能够生成具有更高分辨率、更丰富细节和更低FID得分的图像。

Diffusion Transformer (DiT)架构

在这里插入图片描述
左侧描述了条件潜在DiT模型的训练过程,其中输入的潜在信息被分解为补丁并由多个DiT块处理。

右侧展示了DiT块的详细信息,并说明了标准变换器块的不同变体。

在这些变体中,适应性层归一化(adaptive layer norm)表现得最好。

图中的结构包括:

  • 多头自注意力(Multi-Head Self-Attention)
  • 多头交叉注意力(Multi-Head Cross-Attention)
  • 前馈网络(Pointwise Feedforward)
  • 层归一化(Layer Norm)
  • 缩放、平移以及时步和条件信息的整合
  • 每个DiT块都包含了这些元素,这些元素共同工作以学习和生成图像数据的复杂分布。

通过实验不同的变换器块配置,研究人员可以找到最优的模型设置,以提高模型的性能和生成图像的质量。

这张图表明,DiT模型是对传统扩散模型的一个显著改进,因为它们整合了变换器架构的强大能力,尤其是在处理和生成高质量图像方面。

DiT的输入规格:

在这里插入图片描述

输入图像首先被处理成大小为 ( p × p ) ( p \times p) (p×p) 的补丁,然后这些补丁被线性化为具有隐藏维度( d )的输入令牌序列。

令牌总数( T )由公式 T = ( I / p ) 2 T = (I/p)^2 T=(I/p)2 确定,其中( I )是以像素为单位的输入图像大小。

这种表示方式表明,较小的补丁大小会导致更长的令牌序列,从而增加计算复杂度,以Gflops衡量。

 

以图像分辨率为256x256像素,补丁大小为16x16像素的情况为例:

首先,输入图像会被分割成大小为 p × p p \times p p×p(在这个例子中是 16 × 16 16 \times 16 16×16)的补丁。

如果输入图像的大小为 I × I I \times I I×I(在这个例子中是 256 × 256 256 \times 256 256×256),那么会有 T = ( I / p ) 2 T = (I/p)^2 T=(I/p)2(即 T = ( 256 / 16 ) 2 = 256 T = (256/16)^2 = 256 T=(256/16)2=256)个这样的补丁。

接下来,每个补丁会被线性化为具有隐藏维度 ( d ) 的输入令牌。

这意味着我们最终会有一个长为256的令牌序列,每个令牌都是一个 ( d ) 维的向量。

在此基础上:

  • 特征1(ViT架构的应用):这些令牌序列会被用作DiT模型的输入,模型会利用ViT架构的特点来处理这些序列,捕捉图像内部的复杂结构和特征。

  • 特征2(补丁大小对序列长度和Gflops的影响):较小的补丁大小会导致更长的序列,这意味着模型需要处理更多的令牌,从而增加了模型的Gflops。

    当我们把输入图像分割成更小的patches(或补丁)时,我们得到更多的tokens来表示这些patches。

    由于每个token都需要被模型处理(例如,通过神经网络层的前向和后向传播),这就增加了模型所需执行的总计算操作数。

    因此,模型的Gflops也会相应增加,表明它需要更多的计算资源来处理相同数量的数据。

    换句话说,当你减少patch的大小时,为了处理这些更细粒度的数据,模型需要做更多的工作,因此计算复杂度就会提高。

    在给定的例子中,如果将补丁大小从16x16减少到8x8,令牌数从256增加到1024,相应地,模型处理这些令牌所需的计算量(Gflops)也会增加,因为现在有更多的令牌需要经过模型的神经网络层。

  • 特征3(DiT块的设计差异):不同的DiT块设计会影响模型处理这些令牌的方式,从而影响整体模型的性能和计算效率。例如,adaLN-Zero块通过特定的初始化策略来提高模型性能,同时保持计算效率。

在这个例子中,通过选择合适的补丁大小和DiT块设计,可以优化模型的计算负载,并提高图像生成任务的性能。

Diffusion Transformer (DiT)总结

  • 特征1(模型架构):DiT采用了变换器架构,特别是在处理序列化的图像数据方面,这是因为变换器架构在捕捉长期依赖关系方面表现出色。

  • 特征2(序列化输入):通过将图像分割成小patches并将它们序列化为tokens,DiT能够有效地在变换器模型中处理图像数据。

  • 特征3(位置编码):位置编码被应用于tokens以保留空间信息,这对于保持图像中的相对位置关系至关重要。

  • 特征4(计算复杂度):通过调整补丁大小,DiT可以在保持精细度的同时增加或减少模型的计算负担(Gflops)。

  • 特征5(性能优化):模型的性能通过调整不同的块设计(例如,使用adaLN或adaLN-Zero)来优化,这些设计影响着模型在特定任务上的效率和效果。

  • 特征6(训练策略):适当的训练策略,如使用指数移动平均(EMA)和特定的优化器(如AdamW),对于达到高性能至关重要。

OpenAI Sora 设计思路

在Sora中,Diffusion Transformer(DiT)通常承担着生成模型的角色,就是负责生成高质量图像或视频的核心组件,是核心的生成组件。

负责从噪声化数据中生成清晰、高质量的图像或视频内容。

DiT结合了Transformer架构的能力和扩散模型的生成能力,使得Sora能够根据文本提示来创造逼真的视频序列。

阶段1: 数据准备和预处理

  • 子特征1(文本到视频的训练数据):这是链条的起点,涉及收集大量的视频及其描述性文字说明。

    例如,可能会从YouTube等平台获取视频,并提取或生成相关的描述性文字。

阶段2: 架构设计

  • 子特征2(基本架构):确定了将使用基于Transformer的扩散模型架构。

    在这个阶段,设计者需要决定模型的关键架构元素,例如如何集成文本提示和噪声图像块。

    在设计阶段,确定Sora模型将采用基于Transformer的扩散模型架构。

    这意味着DiT是用来构建模型的基本框架,它将负责处理和生成图像或视频块。

阶段3: 输入数据的结构化

  • 子特征3(视频的类token化):将预处理后的视频数据转换成模型可以理解的形式,这类似于NLP中的tokenization过程。

    视频被压缩并分割成时空补丁,为后续的模型训练准备。

    DiT需要能够处理序列化后的视频数据,即将视频分割成的时空补丁,这些补丁类似于自然语言处理中的tokens。

阶段4: 视频压缩和表示

  • 子特征4(视频压缩网络):使用视频压缩网络进一步处理视频数据,生成与视频大小成正比的3D visual patch array。

    这一步是为了将视频信息密集地封装成可处理的形式。

    在视频压缩和表示阶段,DiT需要从视频压缩网络接收压缩后的3D visual patch array,并将其转换为1D array of patches,这是DiT进行训练的直接输入。

阶段5: 模型训练和优化

  • 这个阶段并未在您的列表中直接提及,但在实际应用中是至关重要的。

    在这里,模型会根据设计好的架构和输入数据进行训练,以学习如何根据文本提示生成视频内容。

    在这个阶段,DiT被训练以预测从噪声中恢复出原始“清晰”图像块。

    这涉及到将带有噪声的输入补丁和条件信息(例如文本提示)作为输入,DiT必须学会如何去噪声化这些输入并恢复原始内容。

阶段6: 输出生成

  • 最终阶段是利用训练好的模型生成新的视频内容。

    模型会将潜在的视觉补丁转化为实际的视频输出,以匹配输入的文本提示。

    训练好的DiT能够接收新的噪声化的补丁,结合文本提示来生成新的视频内容。

    这个生成的过程涉及到逐步减少噪声并且细化细节,直到生成高质量的视频输出。

以制作一段根据文本提示 “一只猫坐在窗台上看雨” 的视频为例。

阶段1: 数据准备和预处理

  • 收集包含猫在不同环境中的视频和相应描述。使用类似DALL·E 3的技术为这些视频生成详细的描述性文字说明。

阶段2: 架构设计

  • 设计基于Transformer的扩散模型Sora,确保它能够理解文本提示并生成相应的视频内容。
  • 此时,DiT作为模型的核心部分被确定下来,它将处理视频和图像的潜在编码。

阶段3: 输入数据的结构化

  • 将视频压缩并分割成时空补丁(tokens),以符合DiT处理的格式。
  • 例如,将 “一只猫坐在窗台上看雨” 的场景视频压缩和分割,准备成可训练的数据格式。

阶段4: 视频压缩和表示

  • 通过视频压缩网络将输入视频的时间和空间维度同时进行压缩,为DiT提供训练数据。

阶段5: 模型训练和优化

  • 在这个阶段,DiT学习如何基于文本提示和带有噪声的视频补丁(tokens),预测出原始的“清晰”视频补丁。
  • 模型通过大量的训练数据学习 “一只猫坐在窗台上看雨” 的文本提示对应的视频内容特征。

阶段6: 输出生成

  • 使用训练好的DiT模型,输入带有噪声的补丁和 “一只猫坐在窗台上看雨” 的文本提示,模型能够生成匹配这一描述的新视频内容。
  • 通过逐步去噪和细化补丁,DiT最终输出一段高质量的视频,展示了一只猫坐在窗台上看着外面的雨景。

在这个逻辑链条中,DiT起着核心作用,它不仅处理了从文本到视频内容生成的关键步骤,还确保了生成的视频内容能够尽可能地贴近用户的文本提示。

OpenAI Sora 工作流程

Sora是一个基于文本条件的扩散模型,使用了Transformer架构来生成视频。

步骤1: 视频数据的压缩和转换

想象你有一个视频,里面是一只猫在玩耍。

首先,Sora会将这个视频压缩到一个低维度的潜在空间中。

这就像是把视频简化成一系列基本的图像特征,这样做的目的是为了减少处理视频时需要的数据量。

步骤2: 时空补丁的提取

接下来,Sora会将压缩后的视频分解成一系列小块,称为时空补丁。

这些补丁包含了视频的时间和空间信息。

你可以将每个补丁视为视频中的一个小片段。

这一步骤类似于将一篇文章分割成单词或句子,以便更好地理解和处理。

步骤3: 使用Transformer处理补丁

这些补丁接着被送入一个基于Transformer的模型中进行处理。

Sora通过分析这些补丁和相应的文本提示(例如,“一只猫在玩耍”),学习如何根据文本提示生成对应的视频内容。

Transformer在这里的作用是理解补丁之间的关系,并根据文本提示来预测每个补丁应该展示的内容。

步骤4: 生成视频内容

一旦Sora模型训练完成,它就能够接受新的文本提示和带有噪声的补丁作为输入,生成新的视频内容。

Sora会预测这些噪声补丁背后的原始“干净”图像,然后将它们组合起来形成完整的视频。

步骤5: 视频解码

最后,Sora使用一个解码器将这些潜在的视觉补丁转换回像素级的视频图像。

这就像是将简化后的图像特征重新转换成详细的视频片段。

 
假设你想要Sora生成一段视频,视频内容是“一只猫坐在窗台上看雨”。

你会给Sora输入这段文本提示。

Sora会使用它训练好的模型,根据这个文本提示生成一系列代表视频的补丁,这些补丁最终会被转换成你想要的视频内容。

简而言之,Sora通过将视频转换成更易于处理的格式(时空补丁),然后利用Transformer模型的强大能力来理解和生成视频内容,最终再将这些内容转换回实际的视频。

这个过程允许Sora根据文本提示来创造出新的、高质量的视频内容。

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

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

相关文章

云安全威胁及日常防护方案建议

随着互联网技术发展,企业越来越多地采用云服务,云安全成为了企业IT安全的重要组成部分。然而,伴随技术的发展普及,云安全也面临着许多安全风险。下面我们就来简单了解下目前常见的一些云安全风险以及有什么防护方案。 1、云平台配…

基于qt的图书管理系统----04sql功能开发

参考b站:视频连接 源码github:github 目录 1 封装一个全局的对象2 设计所有接口2.1 初始化数据库接口2.2 登陆接口2.3 条件查询用户接口 1 封装一个全局的对象 新建一个cclass,sqlmange,并且在.pro文件中添加上sql 使用c单例模…

Linux进程【补充】

文章目录 进程概念task_struct 进程创建forkvfork写时拷贝 进程状态僵尸进程孤儿进程守护进程 进程地址空间是什么为什么怎么做 进程概念 进程是一个程序的执行实例或者是担当系统资源分配的实体。当一个程序运行时,被从硬盘加载到内存中,操作系统为每个…

Python实战:爬取小红书——采集笔记详情

上一篇文章发出后,有读者问能不能爬到小红书笔记详情数据,今天他来了。 Python实战:爬取小红书 一、先看效果 程序输入:在一个txt文件内粘贴要爬取的笔记链接,每行放1个链接。 程序输出:输出是一个所有笔记…

docker-compose 搭建laravel环境

laravel环境包含nginx,mysql,php7.4,redis 一、安装好docker后pull镜像 1.nginx镜像 docker pull nginx:latest单独启动容器 docker run --name nginx -p 80:80 -d nginx 2.php镜像 docker pull php:7.4-fpm3.mysql镜像 docker pull mysql:5.74.redis镜像 docker pull r…

zabbix3.4.6 源码安装

Step1: 下载 https://www.zabbix.com/download 选中一下。download Zabbix Sources PackageReleaseDateRelease NotesZabbix ManualDownloadZabbix 3.4Server, Proxy, Agent, GUI3.4.615 January, 2018 Download step2 :拷贝在redhat 6.3_X86_86(192…

UE蓝图 序列(Sequence)节点和源码

系列文章目录 UE蓝图 Get节点和源码 UE蓝图 Set节点和源码 UE蓝图 Cast节点和源码 UE蓝图 分支(Branch)节点和源码 UE蓝图 入口(FunctionEntry)节点和源码 UE蓝图 返回结果(FunctionResult)节点和源码 UE蓝图 函数调用(CallFunction)节点和源码 UE蓝图 函数调用(CallFunction)…

springboot215基于springboot技术的美食烹饪互动平台的设计与实现

美食烹饪互动平台的设计与实现 摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统美食信息管理难度大&…

MAC地址学习和老化

MAC地址学习过程 一般情况下,MAC地址表是设备根据收到的数据帧里的源MAC地址自动学习而建立的。 图1 MAC地址学习示意图 如图1,HostA向SwitchA发送数据时,SwitchA从数据帧中解析出源MAC地址(即HostA的MAC地址)和VLAN…

做接口测试的流程一般是怎么样的?UI功能6大流程、接口测试8大流程这些你真的全会了吗?

在讲接口流程测试之前,首先需要给大家申明下:接口测试对于测试人员而言,非常非常重要,懂功能测试接口测试,就能在企业中拿到一份非常不错的薪资。 这么重要的接口测试,一般也是面试笔试必问。为方便大家更…

C++ //练习 8.13 重写本节的电话号码程序,从一个命名文件而非cin读取数据。

C Primer(第5版) 练习 8.13 练习 8.13 重写本节的电话号码程序,从一个命名文件而非cin读取数据。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /***************************************…

Unity(第四部)新手组件

暴力解释就是官方给你的功能;作用的对象上面如: 创建一个球体,给这个球体加上重力 所有物体都是一个空物体,加上一些组件才形成了所需要的GameObject。 这是一个空物体,在Scene场景中没有任何外在表现,因为…

公厕智慧化_智慧化的公厕

公厕智慧化是现代城市建设中的重要一环。通过信息化、数字化和智慧化技术手段,实现对公共厕所的高效管理和服务,不仅提升了城市环境质量,还改善了居民生活品质。智慧公厕的智慧化包括监测、管理、服务和设备的智慧化,利用先进科技…

1分钟带你学会Python的pass关键字和range函数

1.pass 关键字 pass关键字在 python 中没有任何实际意义,主要是用来完成占位的操作,保证语句的完整性 age int(input(请输入您的年龄:))if age > 18: pass # pass 在此处没有任何意义,只是占位 print(欢迎光临。。。…

常见的排序算法整理

1.冒泡排序 1.1 冒泡排序普通版 每次冒泡过程都是从数列的第一个元素开始,然后依次和剩余的元素进行比较,若小于相邻元素,则交换两者位置,同时将较大元素作为下一个比较的基准元素,继续将该元素与其相邻的元素进行比…

Spring 中 ApplicationContext 和 BeanFactory 的区别有哪些

先看一张类图: 区别: 1:包目录不同: spring-beans.jar 中 org.springframework.beans.factory.BeanFactory spring-context.jar 中 org.springframework.context.ApplicationContext 2:国际化: BeanFacto…

mysql的日志文件在哪?

阅读本文之前请参阅----MySQL 数据库安装教程详解(linux系统和windows系统) MySQL的日志文件通常包括错误日志、查询日志、慢查询日志和二进制日志等。这些日志文件的位置取决于MySQL的安装和配置。以下是一些常见的日志文件位置和如何找到它们&#xff…

PHP中的飞碟运算符、取反运算符、对比非ASCII字符串、对比浮点数操作

对比浮点数 在电脑里存储的浮点数可能会和输入的值有些许差异,比如输入的是10.0,但存储的是10.00001. 在比较两个浮点数是否相等时可以计算下两个数的差值,然后查看下两数之差是否小于可以接受的阈值,如果要求精度在小数点后5位的…

ubuntu 22.04LTS的一些使用心得

前言 笔者一直在折腾ubuntu作为开发的主力系统,尤其是最近微信和各种软件陆续支持Debian系列,很多软件都可以用了,当然开源的软件大部分是跨平台的,尤其是idea系列。 X11 OR Wayland 关于X11和wayland,笔者还是使用…

9.5K Star,又一款超棒开源轻量自动化运维平台

Hi,骚年,我是大 G,公众号「GitHub指北」会推荐 GitHub 上有趣有用的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注。 一个好的运维平台就变得非常重要了,可以节省大量的人力和物…