文本生成视频:从 Write-a-video到 Sora

2024年2月15日,OpenAI 推出了其最新的文本生成视频模型——Sora。Sora 能够根据用户的指令生成一分钟长度的高质量视频内容。这一创新的发布迅速在社会各界引发了广泛关注与深入讨论。本文将围绕本实验室发表于SIGGRAPH AISA 的 Write-a-video和 Sora 展开,讨论基于规则的视频生成方法和基于深度学习的视频生成方法。

Part 1

Write-a-video

视频生成,在图形学里,和story-telling密切相关,我们一直有一个梦想,幼儿园的小朋友讲故事时,能否在大屏幕上实时生成故事的画面?这个问题在20年前,基于视频绘制(Video based Rendering)最热的时候,却是一个技术上不可能实现的难题。2009年,清华大学图形学实验室将这个问题简化为:能否用草图和文字描述一个场景,计算机去自动生成一张高度真实感的照片?这就是Sketch2Photo[1]。 

4ce62150635348528c695cd9328d9b3f.png 图1 基于草图的真实感图像合成

又过了10年,清华大学图形学实验室终于跨越了一步,提出基于规则的视频生成方法Write-a-video[2] ,该方法可以基于视频素材,输入一段文字,输出一段剪辑好、符合文本描述的视频。

Write-a-video是一个通过编辑文本来进行视频剪辑和合成的系统。给定一个主题文本和相关的视频库(该视频库可看做深度学习里的训练数据),生成的视频旨在描绘给定的叙述,提供多样化的视觉内容,并遵循电影摄影指导原则。这个过程涉及三个简单的步骤:1) 用户提供输入,主要是通过编辑文本的形式;2) 工具自动从视频库中搜索语义匹配的候选镜头;3) 优化方法组装剪辑的视频:根据计算摄影学的剪辑准则组装剪辑视频。具体流程如图 1所示。

28f82b816cc94d30a8e541c218253c7d.png 

图 2  Write-a-video 流程示意图

Write-a-video是一种快速的视频生成方法,生成一段数分钟的视频仅需不到10秒,且支持增量文本编辑操作。

Part 2

深度学习技术的演进使视频生成实现突破

最近5年,深度学习技术得到了蓬勃的发展,主要的发展可以总结为以下三个方面:

  • 从对抗生成网络(GAN)到扩散模型(Diffusion model);

  • 从卷积神经网络(CNN)到深度自注意力网络(Transformer);

  • 从小规模训练到大规模训练.

8edbdb60c2a748369664ee4e00df9974.png 

图3  深度学习技术的变革性发展

2.1 从对抗生成网络到扩散模型

采样方法在 Diffusion model出现之前,该领域的早期工作主要植根于 GAN、VQ-VAE和自回归框架。但由于2022年以来Diffusion model的突破性进展,以及其对于大规模分布的拟合能力,以及从文本上扩展到其他模态的能力,扩散模型成为了视频生成的主流选择。

2.2 从卷积神经网络到深度自注意力网络

模型的基础架构在这些年的变化也很大,如Diffusion Model中,早期的工作基本都基于CNN的UNet架构,并且引入部分时空的注意力进行约束如Google提出的Imagen Video利用冻结的T5文本编码器来训练video diffusion model。

随着技术的发展,人们发现动态可扩展的Transformer架构运用在文生图模型或文生视频模型中是非常有意义且有效的,比如,Meta提出的Diffusion Transformer (DiT) 架构利用更长的Transformer生成是十分有效的,在许多指标上都表现出十分良好的可扩展性。

2.3 从小规模训练到大规模训练

随着深度学习技术的不断发展,数据的规模和模型的规模在生成模型中也增长迅速。近些年涌现出一批高分辨率大规模标注视频数据集,如InternVid就有两亿多的720P视频,并且有精细的文本标注。为了适应数据在scale上的增长,模型的规模也随之增长。如stability AI最开始发布的Stable Diffusion只有0.8B的UNet权重,近期最新发布的基于Transformer架构的Stable Diffusion3就拥有8B的权重,扩大了将近十倍。

Part 3

Sora

Sora[3] 是 OpenAI 所发布的最新视频生成模型,其是基于深度学习方法的视频生成模型的代表。根据其技术报告,我们猜测其背后的技术是基于 Transformer 架构的潜空间扩散模型[4]。Sora 的训练分为了两个阶段,第一阶段(如图 2 所示)训练解码器和编码器,第二阶段(如图 4所示)训练潜空间扩散模型来生成视频。

9e2f5fde49a6484faec2b784d448d8bd.png 

图4 Sora第一阶段训练,训练编码器和解码器

305fb7c4757d44e2a3121e47d4965dee.png 

图5 Sora第二阶段训练, 训练潜空间扩散模型

在两阶段的训练完成后,可以生成分钟级别的视频。

Part 4

讨论

虽然基于深度学习的技术目前居于主导地位,但基于规则的方法也有其独到之处,值得我们借鉴。下面从成本、效率、质量和未来方向四个方面进行讨论。

4.1 成本

此处的成本包含了数据成本和训练成本。Sora 的训练需要大量的视频数据,这些视频的数据量至少是以PB 为单位的。如此大量的视频的收集和存储都会占用极大的存储空间。除了数据收集和存储方面带来的巨大开销,Sora的训练成本也是十分昂贵的。根据已有的部分工作推测,Sora的训练成本可能要千卡级别的集群训练数月。对于 Write-a-video 来说,只需要数百个视频即可剪辑生成一段长视频,并且无需训练。

4.2 效率

此处讨论的效率是指生成一段视频所需的时间。根据网友反馈,Sora 生成一段视频需要数分钟甚至几十分钟,而对于 Write-a-video,生成一段视频只需要数秒。从效率来看,Write-a-video代表的基于规则的方法占据优势。

4.3 生成质量

从生成视频的质量上来看,由于 Write-a-video 是对已有视频片段的剪辑,所以其生成的视频是具有三维一致性的。而对于 Sora 而言,其生成的视频是没有三维一致性的。但是,Sora 可以生成原视频库中不存在的视频,但是 Write-a-video 却没有这种能力,只能组合剪辑原视频库的视频片段。

4.4 未来的工作

此处本文主要讨论两个未来可能的工作:1) 长视频生成,2)高效的Sora。

1)长视频生成:Sora 目前可以生成分钟级的视频,那么如何去生成更长的视频片段甚至电影呢?如果计算机可以根据剧本直接生成电影,那将会是一件非常有趣且有意义的事情。生成长视频/电影有两条潜在的技术方案。

第一条技术路线是给 Sora 更多的长视频,让其进行微调,但是建模长视频的难度比建模短视频的难度大很多,并且对算力的要求也更大。

第二条技术路线是使用多个短视频进行拼接,可以使用 Sora 生成多个 ID 一致的短视频片段,将每个片段看成是一个电影镜头,然后使用Write-a-video[2] 进行剪辑,从而拼接出一个长视频;或者基于已有短视频素材库先进行剪辑拼接,再使用Sora微调内容。

2)高效的Sora至关重要:基于我们之前的分析,我们了解到sora在生成视频的过程中耗时较多。为了实现Sora的大规模应用,提升视频生成的效率成为一个迫切需要解决的问题。也许可以从算法优化和系统优化两个方面来着手提高效率。

从算法层面来看,可以探索剪枝算法或者量化算法,在保持生成视频质量的同时,使得整个网络可以更高效地运行;从系统优化的角度出发,可以尝试使用高效的深度学习框架Jittor[5],Jittor已经被证明在大模型训练和推理中有较大的优势,效率提升可达30%以上; 进一步,也可以基于Jittor的元算子融合机制Sora结构中的算子进行专门的硬件优化。

参考文献

  • 1 Tao Chen, Ming-Ming Cheng, Ping Tan, Ariel Shamir, Shi-Min Hu, Sketch2Photo: Internet Image Montage, ACM Transactions on Graphics, 2009, Vol. 28, No. 5, Article No. 124, ACM SIGGRAPH ASIA 2009.  

  • 2 Miao Wang, Guo-Wei Yang, Shi-Min Hu, Shing-Tung Yau, Ariel Shamir, Write-a-video: computational video montage from themed text, ACM Transactions on Graphics, 2019, 38(6): 177:1-177:13. 

  • 3 https://openai.com/research/video-generation-models-as-world-simulators

  • 4 William Peebles, Saining Xie, Scalable diffusion models with transformers, Proceedings of the IEEE/CVF International Conference on Computer Vision, 2023, 4195-4205.

  • Shi-Min Hu, Dun Liang, Guo-Ye Yang, Guo-Wei Yang & Wen-Yang Zhou, Jittor: a novel deep learning framework with meta-operators and unified graph execution, Science China Information Science,  2020, Vol. 63, Article No. 222103, 1-21.  

  1.  

 

 

 

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

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

相关文章

8核16G服务器多少钱?2024年腾讯云8核16G轻量服务器性能测评

腾讯云8核16G轻量服务器CPU性能如何?18M带宽支持多少人在线?轻量应用服务器具有100%CPU性能,18M带宽下载速度2304KB/秒,折合2.25M/s,系统盘为270GB SSD盘,月流量3500GB,折合每天116.6GB流量&…

真实案例分享:MOS管电源开关电路,遇到上电冲击电流超标

做硬件,堆经验。 分享一个案例:MOS管电源开关电路,遇到上电冲击电流超标,怎么解决的呢? 下面是正文部分。 —— 正文 —— 最近有一颗用了挺久的MOSFET发了停产通知,供应链部门找到我们研发部门&#xff0c…

Pycharm与Anaconda安装

网址: Pycharm:https://www.jetbrains.com/pycharm/ Anaconda:https://www.anaconda.com/download/ 官网下载速度太慢可以选择到清华源下载:https://repo.anaconda.com/archive/ 一:Anaconda安装 安装: …

Building Systems with the ChatGPT API

Building Systems with the ChatGPT API 本文是 https://www.deeplearning.ai/short-courses/building-systems-with-chatgpt/ 这门课程的学习笔记。 文章目录 Building Systems with the ChatGPT APIWhat you’ll learn in this course Language Models, the Chat Format and…

【C++ vector 类】

1. 标准库中的vector类 vector 类 的介绍: 注意: 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样,vector 也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是…

长度为n的数组a初始值全为0,目标是把数组a变为数组b(1<=bi<=n), 可以进行任意次操作:选择长度为k的数组c,(1<=ci<=n且两两不同)

对于1<i<k, 把 a[c[i]] 改为c[i % k 1]。给定n&#xff0c;k和数组b&#xff0c;判断能否得到数组b。 题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #d…

消息服务--Kafka的简介和使用

消息服务--Kafka的简介和使用 前言异步解耦削峰缓存1、消息队列2、kafka工作原理3、springBoot KafKa整合3.1 添加插件3.2 kafKa的自动配置类3.21 配置kafka地址3.22 如果需要发送对象配置kafka值的序列化器3.3 测试发送消息3.31 在发送测试消息的时候由于是开发环境中会遇到的…

STM32按键控制LED蜂鸣器光敏联动

GPIO输入模式下的硬件和电路 以下为不同类型传感器电路图 硬件电路讲解 上面两种接线方式表示按键按下时是低电平&#xff0c;下面两种接线方式表示按键按下时引脚是高电平默认使用上面两种方式比较多。 C语言知识回顾 不同的数据类型 &#xff1a; char short int long longl…

Linux(Ubuntu)中安装vscode

①首先去vscode的官网下载.deb文件 网址&#xff1a;https://code.visualstudio.com/docs/?dvlinuxarm64_deb 注&#xff1a;如果linux端无法打开网页下载文件&#xff0c;可以在Windows端下载好用WinSCP传输到Linux。下载前注意下你的系统架构是arm还是amd&#xff0c;系统…

AHU 数据库 实验五

【实验名称】 实验5 数据库的数据更新与视图管理 【实验目的】 1. 熟悉数据更新操作的概念与操作类型&#xff1b; 2. 熟练掌握INSERT、UPDATE、DELETE语句的基本语法&#xff1b; 3. 熟练运用INSERT、UPDATE、DELETE语句实现数据的插入、修改与删除…

CentOS/Fedora/Ubuntu/Debian 系统 wget 命令

wget 是云服务器安装环境和面板常用下载命令。下载软件或从远程服务器下载备份到本地服务器&#xff0c;也可以使用 wget 把文件下载到云服务器上。 VPS wget 命令最常用使用方法如下&#xff1a; 安装 wget 一般来说 wget 命令是系统自带的&#xff0c;方面安装环境和面板&…

多维时序 | Matlab实现BiGRU-Mutilhead-Attention双向门控循环单元融合多头注意力机制多变量时序预测

多维时序 | Matlab实现BiGRU-Mutilhead-Attention双向门控循环单元融合多头注意力机制多变量时序预测 目录 多维时序 | Matlab实现BiGRU-Mutilhead-Attention双向门控循环单元融合多头注意力机制多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.多维时序 …

族群争霸休闲养成小游戏

​游戏概述&#xff1a; 在一个由自然力量支配的幻想世界中&#xff0c;狼族与羊族的战争永无止境。 人族在两者之间寻求和平&#xff0c;建立起坚固的城墙&#xff0c;同时捕捉狼与羊来增强自身实力。 神族则在幕后观察&#xff0c;偶尔以神技介入战场&#xff0c;影响战局…

复盘-word

word-大学生网络创业交流会 设置段落&#xff0c;段后行距才有分 word-选中左边几行字进行操作 按住alt键进行选中 word复制excel随excel改变&#xff08;选择性粘贴&#xff09; 页边距为普通页边距定义 ##### word 在内容控件里面填文字&#xff08;调属性&#xff09…

JavaScript使用

文章目录 一、JavaScript简介二、JavaScript引入方式1、内部脚本2、外部脚本 三、JavaScript基础语法1、书写语法&输出语句2、变量&数据类型3、运算符4、流程控制语句&函数 四、JavaScript对象1、Array2、String3、自定义对象 五、BOM1、Window2、History3、Locati…

扩展CArray类,增加Contain函数

CArray不包含查找类的函数&#xff0c;使用不便。考虑扩展CArray类&#xff0c;增加Contain函数&#xff0c;通过回调函数暴露数组元素的比较方法&#xff0c;由外部定义。该方法相对重载数组元素的“”符号更加灵活&#xff0c;可以根据需要配置不同的回调函数进行比较 //类型…

C语言————字符函数与字符串函数

在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了⽅便操作字符和字符串&#xff0c;C语⾔标准库中提供了⼀系列库函数&#xff0c;如追加&#xff0c;拷贝&#xff0c;替换等等接下来我们就学习⼀下这些函数&#xff0c;并且自实现。 gets 这个指令大家…

十七、enumerate函数的用法

enumerate() 函数是 Python 内置函数之一&#xff0c;用于同时返回可迭代对象的索引和对应的值。 它的语法结构如下&#xff1a; enumerate(iterable, start0) iterable: 表示一个可迭代的对象&#xff0c;如列表、元组、字符串等。start: 可选参数&#xff0c;表示索引起始…

校招春招秋招,HR是如何筛选简历的?

一份简历在HR的眼中最多能停留15秒钟。 如果15秒内HR没有决定要通知你做在线测评&#xff0c;那么这事就算过去了。 那么问题来了&#xff0c;如果在15秒内&#xff0c;让HR对你产生兴趣&#xff1f; 1、简历布局 人在浏览信息的时候&#xff0c;习惯性的是从上往下&…

The display: inline property prevents width from having an effect.

The display: inline property prevents width from having an effect. Try setting display to something other than inline. ---------------------------------- display: inline 不支持元素的 width 或 height 属性&#xff0c;若要元素 width 或 height 生效&#xff0c;…