超燃!纯AI生成《泰坦尼克号》大片!浙大阿里发布MovieDreamer:超长电影生成“梦工厂“

论文链接:https://arxiv.org/pdf/2407.16655
项目主页:https://aim-uofa.github.io/MovieDreamer/
github链接:https://github.com/aim-uofa/MovieDreamer

亮点直击

  • MovieDreamer,一个新颖的分层框架,将自回归模型与扩散渲染结合起来,平衡长时间叙事连贯性与短时间视觉保真度。该方法大幅延长了生成视频内容的时长,达到数千个关键帧。

  • 使用多模态自回归模型生成视觉token序列。自回归模型支持zero-shotfew-shot的个性化生成场景,并支持可变长度的关键帧预测。

  • 使用了一种新颖的多模态脚本,对场景和角色身份进行分层结构化丰富描述。这种方法不仅促进了视频不同片段之间的叙事连贯性,还增强了角色控制和身份保持能力。

  • 方法展示了卓越的生成质量,具有详细的视觉连续性、高保真度的视觉细节以及角色身份保持能力。

最近的视频生成技术进展主要利用扩散模型来生成短时内容。然而,这些方法在处理复杂叙事和保持角色一致性方面常常不足,而这些对于电影等长篇视频制作至关重要。本文提出了MovieDreamer,一个新颖的分层框架,将自回归模型的优势与基于扩散的渲染相结合,开创了具有复杂情节进展和高视觉保真度的长时视频生成。本文的方法利用自回归模型来保持整体叙事连贯性,预测视觉token序列,然后通过扩散渲染将其转换为高质量的视频帧。这种方法类似于传统的电影制作过程,将复杂的故事分解为可管理的场景拍摄。

此外,本文采用多模态脚本,丰富了场景描述,提供详细的角色信息和视觉风格,增强了场景间的连续性和角色身份一致性。本文在各种电影类型中进行了广泛的实验,证明本文的方法不仅在视觉和叙事质量上取得了优异的成绩,而且有效地将生成内容的时长显著延长,超越了当前的能力。

方法

概览

本文提出了一种新颖的框架,用于生成扩展的视频序列,该框架利用自回归模型在长期时间一致性方面的优势和扩散模型在高质量图像渲染方面的优势。本文的方法以多模态脚本作为条件,以自回归方式预测关键帧tokens,并使用这些帧作为anchor生成完整的视频。本文的方法提供了灵活性,支持zero-shot生成以及需要遵循给定风格的few-shot场景。本文特别注意在多模态脚本设计、自回归训练和扩散渲染过程中保持角色身份的一致性。下图2中展示了整体框架。

通过扩散自编码器进行关键帧tokens

为了创建简洁且忠实于图像的表示,本文采用扩散自编码器。本文的编码器 包含一个预训练的 CLIP 视觉模型和一个基于transformer的tokens压缩器,它将图像 编码为数量减少的压缩tokens,记为。解码器使用这些tokens重建图像,采用预训练的 SDXL 扩散模型,生成 的重建图像。提取的潜在图像tokens通过交叉注意力被输入到扩散解码器中。本文在训练压缩器和解码器的同时,保持CLIP视觉模型冻结。训练这个扩散自编码器的损失函数如下:

其中, 是输入图像, 是其在时间步 对应的噪声潜在表示,即 其中 , 和 定义了一个噪声调度。在本文的实验中,作者经验性地发现,仅仅两个tokens就能充分描述关键帧的主要语义,这一发现与之前的工作[42]一致。

自回归关键帧tokens生成

本文使用预训练的大型语言模型 LLaMA2-7B初始化本文的自回归模型。与大型语言模型(LLMs)不同,本文的模型 根据输入的多模态脚本 和历史信息 预测压缩的视觉tokens,其公式如下:

本文的方法首先利用预训练的大型语言模型,特别是 LLaMA2-7B,来构建本文的自回归模型 G。与传统的 LLM 不同,G 旨在从多模态脚本 和历史数据 中预测压缩的视觉tokens。模型函数定义为

传统的 LLM 通常使用交叉熵损失进行训练,这适用于离散输出。然而,本文的模型处理的是连续实值图像tokens,使得交叉熵不适用。

受 GIVT的启发,本文采用 k-混合高斯混合模型(GMM)来有效地建模这些实值tokens的分布。这涉及用 2kd 个均值、2kd 个方差和 k 个混合系数来参数化 GMM。

这些参数是通过自回归模型的一个修改后的线性输出层获得的,从而能够从 GMM 中采样连续tokens。模型通过最小化负对数似然进行训练:

其中 代表总帧数, 表示当前帧, 是每帧的压缩tokens数量。为了简化这些连续tokens的学习,本文还结合了预测tokens和真实tokens之间的 和 损失,并优化以下目标:

为了解决自回归模型在长视频关键帧生成中的过拟合问题,本文实施了几种关键策略:

  • 数据增强:为了最大限度地利用本文的训练数据,本文应用了随机水平翻转和随机反转视频帧的时间顺序。这种训练数据增强大大增加了训练数据的多样性。

  • 面部embedding随机化:为了防止身份泄露,本文随机检索同一角色在不同帧中的面部embedding。否则,模型会简单地通过面部embedding输入记住训练帧。

  • 激进的Dropout:本文使用了异常高的50%的Dropout率,这对于从有限的训练数据中进行广泛学习至关重要。

  • tokens mask:本文以0.15的概率随机mask输入tokens,这适用于因果注意力mask。这迫使模型根据可用的上下文(如面部ID)推断缺失的信息,进一步增强了其从部分数据中进行泛化的能力。

自回归条件下的多模态脚本。本文开发了一种结构良好的多模态脚本格式,作为自回归模型的输入,如下图14所示。本文的脚本整合了多个维度:角色、场景元素和叙述弧线。仅使用文本来准确表示角色外貌是具有挑战性的;因此,本文将文本描述与面部embedding结合起来,以提供每个角色的更详细表示。为了便于自回归模型的处理,本文将脚本格式结构化,以明确区分这些元素。

对于非文本模态(如面部embedding和压缩tokens),本文使用多层感知器将其投射到LLaMA的embedding空间中。主要的挑战在于文本数据,它往往会产生长序列,从而消耗过多的tokens空间并限制模型的上下文广度。为了解决这个问题,本文将文本视为一种单独的模态,将其分为“标识符”和“描述”(见上图2)。标识符是简洁的陈述,用于建立脚本的结构。相比之下,描述则详细说明了生成的属性,每个描述都使用CLIP编码为一个单独的[CLS]tokens,然后投射到统一的输入空间中。

这种方法通过将整个句子压缩成单个tokens,显著延长了训练期间可用的上下文长度。本文使用LongCLIP作为描述的文本编码器,支持最多248个tokens的输入,这增强了本文处理详细叙述内容的能力。因此,时间步的多模态脚本及其之前的历史数据表示为:

其中,、 和 分别表示描述、标识符和角色面部embedding的embedding。 表示之前预测的压缩帧tokens。负对数似然损失公式如下:

个性化生成的few-shot训练。 为了促进个性化电影内容生成,本文提出了一种利用上下文学习的few-shot学习方法。在训练过程中,本文从一集中随机选择10个帧,将它们编码为视觉tokens,并随机将这些tokens添加到该集的视觉tokens之前。这一策略不仅促进了上下文学习,使模型能够根据参考帧定制内容,还作为一种数据增强技术,有效减轻了过拟合问题。

本文的模型具有多功能性,支持zero-shot和few-shot生成模式。在zero-shot模式下,模型仅根据文本提示生成内容。在few-shot模式下,模型利用一小组用户提供的参考图像,使生成的内容更符合用户的偏好,而无需进一步训练。这一功能确保用户能够高效地生成高质量、定制化的视觉内容,符合他们期望的主题和风格。

保留 ID 的扩散渲染

在本文的方法中,虽然主要的扩散解码器能够熟练地重建目标图像,但有时在捕捉细节方面,特别是面部特征上,会有所欠缺。这是由于压缩后的token中细节的衰减。为了解决这个问题,本文增强了中的交叉注意力模块。这种增强涉及到整合来自多模态脚本的描述性文本embedding 和面部embedding 。

为了进一步提升模型对关键细节的关注能力,本文引入了一种随机mask策略,该策略会遮蔽一部分输入token。这种技术鼓励解码器更有效地利用现有的面部和文本线索,以更高的保真度重建图像,特别是在保持身份特征方面。这种身份保留渲染也弥补了在自回归建模过程中身份丢失的问题,如下图3所示,显著提高了身份感知质量。

基于关键帧的视频生成

在获得电影中的关键帧后,本文可以基于这些关键帧生成电影片段。一种直接的方法是利用现有的图像到视频模型,例如Stable Video Diffusion (SVD),来生成这些片段。具体来说,SVD将输入图像转化为用于条件的潜在特征,并通过交叉注意力引入与输入图像的CLIP特征的交互。虽然SVD能够生成高质量的短视频,例如25帧,但在生成更长的电影片段时会遇到困难。

为了生成更长的电影片段,一种直接的方法是利用前一个视频的最后一帧作为生成后续视频的初始帧。这个过程可以迭代进行,以获得较长的视频序列。然而,本文通过实验证明,这会导致严重的错误积累:随着时间的推移,视频帧的质量会逐渐恶化。

为了解决这个问题,本文提出了一种简单而有效的解决方案。本文的动机是始终使用第一帧的特征作为视频扩展过程中的“锚”,以增强模型对原始图像分布的感知。在实际操作中,本文在生成后续视频时,使用原始输入图像的CLIP特征,而不是前一个视频的最后一帧进行交叉注意力交互。

实验

与最先进的模型比较

故事生成。 许多现有的故事生成方法专注于使用小数据集进行微调,表现出较差的泛化能力。因此,本文仅与那些展示出高泛化能力的方法进行比较,即StoryDiffusion和 StoryGen。如下图4所示,StoryDiffusion无法保持长期一致性。例如,角色的头发不一致,关键帧77中的角色与关键帧968中的角色不一致。类似地,StoryGen也未能保持一致性并生成了异常结果。相比之下,本文的方法在生成极长内容的同时,能够在多个角色之间保持短期和长期的一致性。这个观察也通过下表1中的定量结果得到了证实,本文的方法在LT和ST指标上均取得了高分。此外,更高的CLIP得分反映了本文生成的结果与故事情节很好地契合。更好的IS、AS和FID得分表明本文的方法生成了高质量的图像。

视频结果。 本文对生成长视频的方法进行了详细比较。对于文本到视频的方法,本文使用测试集中准备的详细描述作为输入。对于图像到视频的方法,本文采用由本文的方法生成的关键帧作为输入。如下表2所示,本文的方法在质量方面显著优于现有的开源模型,展示了强大的泛化能力。最重要的是,本文的方法能够生成持续数小时的视频,且质量几乎没有妥协,达到了最先进的水平。

分析

反过拟合策略。 大型自回归模型是强大的学习器,这使得它们很容易对数据集过拟合。如下图6的第一行所示,生成的内容主要由输入字符主导。即使给出不同的文本提示,模型也会生成相似的视觉内容。本文的反过拟合策略旨在削弱字符ID与目标帧之间的对应关系,从而避免简单的记忆。如第二行所示,这有助于生成与文本描述高度一致的多样化高质量结果。

多模态电影脚本。 多模态脚本引入了面部embedding,以更好地保持一致性。下图5有力地展示了这种设计的有效性。具体来说,移除面部embedding会导致模型保持角色一致性的能力下降。面部embedding携带了比单纯文本更细致和精确的信息。使用面部embedding后,短期和长期的一致性都得到了很好的保持。

ID保持渲染。 在启用ID保持渲染之前,本文的解码器已经显示出重建目标图像的能力。然而,对于训练集外的图像,由于压缩token中细微面部特征的丢失,重建的角色外观可能与预期目标略有不同。应用ID保持渲染后,本文的解码器在保持角色身份方面表现出显著增强的能力。实验结果如上图3所示,清楚地展示了后处理步骤的有效性。

few-shot个性化生成。 本文的方法作为一个强大的上下文学习者,能够根据用户提供的少量参考生成与风格或角色一致的结果。结果展示在下图7中。本文的模型在few-shot场景下能够生成与参考风格和角色更一致的结果。

结论

本文提出了MovieDreamer,以应对生成具有复杂叙事的长时间视觉内容的挑战。该方法巧妙地结合了自回归和扩散的优势,能够生成长视频。此外,本文设计了多模态脚本,旨在保持生成序列中角色的一致性。本文进一步引入了身份保持渲染,以更好地保持角色身份,并通过上下文建模支持few-shot电影创作。这项工作有望为自动化长时间视频制作的未来发展开辟令人兴奋的可能性。

参考文献

[1] MovieDreamer: Hierarchical Generation for Coherent Long Visual Sequences

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

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

相关文章

idea设置类注释模板作者、日期、描述等信息

文章目录 前言一、新建类的时候自动添加类注释1.打开设置2.模版配置示例如下3.实际生成效果 前言 由于每次换电脑时都需要重新对idea进行设置,为了方便大家的开发配置,同时也为自己以后配置留一份记录(毕竟每次换环境都需要重新配置一遍&…

代码审计 | .NET SqlSugar框架注入漏洞

01阅读须知 此文所节选自小报童《.NET 代码审计》专栏,主要内容有涉及的.NET目录和文件操作、SQL注入方向的敏感函数、还有不安全的配置导致的漏洞挖掘思路,对.NET代码审计感兴趣的朋友们可以解锁该电子报刊,解锁更多的报刊内容。 02基本介…

【Unity】 HTFramework框架(五十三)使用 Addressables 可寻址系统

更新日期:2024年7月25日。 Github源码:[点我获取源码] Gitee源码:[点我获取源码] 索引 Addressables 可寻址系统使用 Addressables 可寻址系统一、导入 Addressables二、切换到 Addressables 加载模式三、切换资源加载助手四、加载资源五、注…

C++基础知识:函数重载是什么?函数重载基础用法,函数重载的作用,函数重载满足条件(关键),注意事项,函数重载代码语法的函数

1.作用: 函数名可以相同,提高复用性 2.函数重载满足条件(关键): 1.同一个作用域下 2.函数名称相同 3.函数参数类型不同 或者 个数不同 或者 顺序不同 注意:函数的返回值不可以作为函数重载的条件 1.常见…

【python】python销售数据分析可视化(源码+论文+数据集)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

CTF-pwn-虚拟化-vmmware 前置

文章目录 参考vmware逃逸简介虚拟机和主机通信机制(guest to host)共享内存(弃用)backdoor机制Message_Send和Message_RecvGuestRPC实例RpcOutSendOneRawWork实例 vmware-rpctool info-get guestinfo.ip各个步骤对应的backdoor操作Open RPC channelSend …

【MySQL进阶之路 | 高级篇】页锁+锁的思想(悲观锁和乐观锁)

1. 页锁 页锁就是在页的粒度上进行锁定,锁定的数据资源比行锁要多,因为一个页中可以有多个行记录.当我们使用页锁的时候,会出现数据浪费的现象,但这样的浪费最多也就是一个页上的数据行。页锁的开销介于表锁和行锁之间&#xff0…

Internet Download Manager2024功能特点优势分析及使用建议及注意事项

1. Internet Download Manager简介 2. 功能特点 3. 优势分析 4. 专家评价 5. 使用建议及注意事项 6. 常见问题解答 7. 用户反馈及案例分享 8. IDM下载器的未来发展趋势 文章: 在互联网快速发展的今日,人们对于网络资源的获取和利用越来越频繁。无论…

【Python面试题收录】Python编程基础练习题①(数据类型+函数+文件操作)

本文所有代码打包在Gitee仓库中https://gitee.com/wx114/Python-Interview-Questions 一、数据类型 第一题(str) 请编写一个Python程序,完成以下任务: 去除字符串开头和结尾的空格。使用逗号(","&#…

axios请求大全

本文讲解axios封装方式以及针对各种后台接口的请求方式 axios的介绍和基础配置可以看这个文档: 起步 | Axios中文文档 | Axios中文网 axios的封装 axios封装的重点有三个,一是设置全局config,比如请求的基础路径,超时时间等,第二点是在每次…

kafka服务介绍

kafka 安装使用管理 Kafka Apache Kafka 是一个开源的分布式事件流平台,主要用于实时数据传输和流处理。它最初由 LinkedIn 开发,并在 2011 年成为 Apache 基金会的顶级项目。Kafka 设计的目标是处理大规模的数据流,同时提供高吞吐量、低延迟…

Java语言程序设计——篇八(1)

🌿🌿🌿跟随博主脚步,从这里开始→博主主页🌿🌿🌿 Java常用核心类 主要内容Object: 终极父类toString( )方法equals( )方法getClass( )方法hashCode( )方法clone( )方法finalize( )方法实战演练 …

8. kubernetes资源——ingress

kubernetes资源——ingress 一、ingress介绍1、作用2、实现方式3、核心组件 二、部署ingress1、下载ingress_1.9.6.yaml文件2、事先导入镜像3、部署ingress 三、通过ingress发布k8s中的服务1、创建服务2、创建ingress规则发布服务3、测试访问 一、ingress介绍 1、作用 ingres…

若依+AI项目开发(二)

后端代码分析 二次开发 开始执行 生成成功 创建子模块

docker安装jenkins,并配置jdk、node和maven

拉取jenkins镜像 docker pull jenkins/jenkins:2.468-jdk21 创建一个文件夹,用于二次打包jenkins镜像 mkdir -p /data/jenkins cd /data/jenkins 提前准备好jdk和maven,并放到/data/jenkins下 由于3.8.x以上版本的maven只支持https协议,我们…

深入理解SQL中的INNER JOIN操作

本文介绍了INNER JOIN的定义、使用场景、计算方法及与其他JOIN的比较。INNER JOIN是关系数据库中常用的操作,用于返回两个表中匹配的行,只有在连接条件满足时才返回数据。本文详细解释了INNER JOIN的语法及其在一对多、多对多关系中的应用,通…

Redis实战---分布式锁

1. 什么是Redis分布式锁? 分布式锁,顾名思义,就是分布式系统中使用的锁,在单体应用中我们使用synchronized、ReentrantLock来解决线程时间的共享资源的访问问题,而在分布式系统中,资源贡献问题已经由线程之…

【Ubuntu】安装 Snipaste 截图软件

Snipaste 下载安装并使用 Snipastefor more information报错解决方案每次启动软件需要输入的命令如下添加开机自启动 下载 下载地址 安装并使用 Snipaste 进入终端输入命令 # 1、进入到 Snipaste-2.8.9-Beta-x86_64.AppImage 所在目录(根据自己的下载目录而定&…

Corsearch 用 ClickHouse 替换 MySQL 进行内容和品牌保护

本文字数:3357;估计阅读时间:9 分钟 作者:ClickHouse Team 本文在公众号【ClickHouseInc】首发 Chase Richards 自 2011 年在初创公司 Marketly 担任工程负责人,直到 2020 年公司被收购。他现在是品牌保护公司 Corsear…