当前位置: 首页 > news >正文

CogVideoX: Text-to-Video Diffusion Models with An Expert Transformer 论文解读

目录

一、前置知识

1、Cogview

2、Cogview2 

3、Cogvideo

二、CogvideoX概述

三、CogVideoX架构

1、整体架构

2、3D Causal VAE

3、Expert Transformer

         


一、前置知识

1、Cogview

        21年的工作,Cogview是第一个开源的大型文本到图像的转换器并且超过了基于GAN的方法,和zero-shot generation的方法,适应于各种不同下游任务,风格,图像超分辨率等。

        首先输入图像到一个VQVAE(但是这里面在codebook后用了GPT来输出token),另外引入了一个Text输入,通过一个text tokenizer得到text tokens并且与image token concat后作为GPT输入,最后取前8192再查codebook,输出到decoder得到预测图像。

Cogview

2、Cogview2 

Cogview2

        22年的工作,相较于Cogview来说,攻克了三个问题,建立了一个CogLM模型。

(1)对于Cogview在VQVAE中引入了transformer但只能处理单向的tokens,换句话说,每一个token只关注前面n-1的tokens的问题,在Cogview2中引入了Mask,(应该是学了MaskGIT,但是MaskGIT是bidirect-transformer,或者是学了MAE),Mask掉部分tokens,并行操作,保证可以处理双向上下文。

(2)考虑到高分辨率水平上局部一致性问题,定制了一个新的CUDA内核,而不是在transformer中加交叉注意力,这样减少了内存开销。

(3)另外提出了一个局部并行自回归生成(LoPAR),在从低分辨率上升到高分辨率的过程中(编码器输出20*20,解码器输入60*60),引入了一个局部并行自回归生成来打破生成token的独立性,同时保持并行性,这相比于Cogview的滑动窗口的生成速度快十倍。其中初始mask掉75%的像素,并通过LoPAR从一个初始局部窗开始滑动,并且忽略已经生成的部分,向其他方向滑动生成。

LoPAR
​​

3、Cogvideo

CogVideo

         22年的工作,基于Cogview2的CogLM模型,但是输入的是视频帧,原来一张input经过VQVAE后是20*20的tokens,而如果当前输入是5帧图像,那么就需要20*20*5tokens,并且相较于Cogview引入Input text,这里面还要引入视频帧率,最后同样输入到CogLM的transformer结构,但是相较于Cogview2又引入了一个新的时间注意力通道,原有的CogLM所有参数冻结,只有新的注意力机制保持训练,以训练时间信息。

        另外提出一个Swin注意力,就是原有Cogview的mask策略在Cogvideo上的改进,是在帧方向的优化。保证不同帧可以进行并行操作。

二、CogvideoX概述

        该论文提出了一个基于Diffusion Transformer的大规模文本到视频模型CogVideoX,可以实现生成与文本对齐的10s连续视频,分辨率为768*1360 pixels。为了解决现有视频模型存在移动空间有限,持续时间短,难以生成基于文本的连续视频问题,该论文提出了几种方法。

(1)提出了3D VAE来从时间空间维度压缩视频,以提高视频保真度和压缩率。

(2)为了保证文本-视频对齐,提出了具有exper AdaLN的expert Transformer来促进文本和视频的深度融合。

(3)采用渐进式训练和多分辨率帧包技术,使得CogvideoX擅长连贯的,长时间的,具有显著运动特征的视频。

(4)设计了一个文本-视频数据的处理pipeline,包括预处理,视频字母处理工作,极大地有助于生成质量和语义对齐。

        CogvideoX在多种客观指标和人类评估下均达到SOTA性能。

        对于CogvideoX的训练,训练了两个不同的参数量大小,CogVideoX-2B,CogVideoX-5B。

The performance of openly-accessible
text-to-video models in different aspects.

三、CogVideoX架构

1、整体架构

        CogVideoX整体架构是一个双路DiT结构,相比于以往的DiT把文本作为condition,通过MLP来引导AdaLN的参数,CogVideoX直接用T5将文本编码并经过双路DiT Expert Transformer模块。

        模块的改进包括对于输入视频帧(序列图像)经过3D Causal VAE进行编码(他提出的)。

        将原有的AdaLN改进为Expert AdaLN。

        Self-Attention改为3D full Attention,并且把文本编码tokens concat到视频帧token后面作为条件。

CogVideoX Architecture

2、3D Causal VAE

        由于视频中包含时间空间信息,相比于图像有更大的数据量,所以3D Causal VAE的目的是结合3D Causal Convlution来在空间和时间上压缩视频,保证更高的压缩比,这也在很大程度上提高质量和视频重建的连续性。

        这个a图中,模型中所有的3D卷积都替换成了3D Causal Convolution(3D因果卷积) ,这个因果卷积要求每个时间步的输出只依赖于当前时间步以及之前的时间步数据,而不依赖于未来的时间步,也就是说,一个三维数据是[H,W,T],先不考虑颜色,从时间层面看那么计算卷积后的t_3时刻的特征,只能依赖t_1,t_2时刻下的全部特征,而以往的3D卷积会完全考虑t_1,t_2,...,t_n所有时刻的特征。

        通过3D因果卷积也可以保证分布式并行处理,也就是多个分布式设备rank间互相交互信息。

        a图中的2x downsample和2x upsample都是经过两次残差块--ContextParallelResnetBlock3D块逐层下采样堆叠的,残差块内部都是3D因果卷积,最后进行归一化输出。

        另外就是KL散度进行正则化,类似于GAN的鉴别器损失,对比encoder输入和decoder输出的特征,计算KL散度损失。

        对于3D Causal VAE的压缩问题进行了笑容研究,随着潜在通道增加,回复质量越高,视频抖动越低(Flickering),但是视频质量变化不太明显,甚至压缩率过高还会下降,而且模型的收敛也会变得更难。

3、Expert Transformer

        Expert Transformer中最大的改进是Expert AdaLN和3D Full Attention。

Expert AdaLN

        论文中提到通过输入时间步长t来引导AdaLN生成不同时间下的\alpha_{1_t},\beta_{1_t},\gamma_{1_t},\alpha_{2_t},\beta_{2_t},\gamma_{2_t},注意LN是样本内归一化,所以涉及到不同时间下的归一化参数不同。

        在论文中图3的画法,就是一个双通道的DiT,输入Z_{text}或者Z_{vision}到AdaLN,然后scale&shift,注意力机制,gate(或者是叫scale)。

3D Full Attention

        先前的工作主要关注分离时间和空间注意力机制来降低复杂度,而这种方式消耗了运动物体的一致性,所以考虑使用video-text的混合注意力机制。

表达时间和空间分离没有意义

3D-RoPE

        另外提出将原始的以往的二维RoPE(旋转位置嵌入)应用到三维领域,二维RoPE被LLM证明有效地捕捉tokens之间的关系,尤其是长序列建模中,而视频数据的每一个张量都可以由一个三维坐标[h,w,t]组成,而我们将1D-RoPE用于H,W,T三个通道中,得到3D-RoPE。

3D-RoPE

论文地址:https://arxiv.org/abs/2408.06072


http://www.mrgr.cn/news/80937.html

相关文章:

  • 01docker run
  • .NET Core 8 Blazor 和 Vue 3 技术构建网站
  • 【无人机遥感技术】无人机遥感在农林信息提取中的实现方法与GIS融合应用(如何将无人机真彩色、多光谱和高光谱数据,与农林业应用结合)
  • 大数据查询争霸:CK、ES、RediSearch谁主沉浮?
  • 1 推荐系统概述
  • 8.flask+websocket
  • Linux shell脚本用于常见图片png、jpg、jpeg、tiff格式批量转webp格式后,并添加文本水印
  • 【C语言程序设计——入门】C语言入门与基础语法(头歌实践教学平台习题)【合集】
  • 游戏开发技能系统常用概念
  • 云计算HCIP-OpenStack02
  • 基础2:值类型与右值引用
  • redo log 和 undo log
  • 实现 WebSocket 接入文心一言
  • Golang学习历程【第二篇 fmt包变量、常量的定义】
  • aosp15 - App冷启动
  • 编译原理复习---基本概念+推导树
  • 云计算HCIP-OpenStack01
  • 滴滴的logicFlow流程图组件
  • 通过smem 定时检测系统内存占用情况
  • uniapp Native.js 调用安卓arr原生service
  • Ubuntu 上传项目到 GitHub
  • windwos defender实现白名单效果(除了指定应用或端口其它一律禁止)禁止服务器上网
  • 我在广州学 Mysql 系列——有关 Mysql 函数的练习
  • Mysql语法之DQL查询的多行函数
  • Linux文件属性 -- 查看文件命令
  • jvm符号引用和直接引用