Sora学习(一):Sora技术路径整体认知

前文:最近跟着DataWhale组队学习这一期“Sora原理与技术实战”,本篇博客主要是基于DataWhale成员、厦门大学平潭研究院杨知铮研究员分享的Sora技术原理详解课件内容以及参考网上一些博客资料整理而来(详见文末参考文献),算是对Sora技术路径的发展有个系统性的认识。

Sora是什么

Sora是大火的人工智能公司OpenAI推出的新一代文生视频AI模型,其官网为https://openai.com/sora。Sora的亮点在于:最长支持60s高清视频生成、确保连续画面中人和场景的一致性、根据视频生成视频时具有丝滑视频过渡能力、同一场景多视角/镜头生成能力、支持任意分辨率、宽高比的视频生成,因此秒杀Pika、Runway等同行,在2024年2月份也火爆出拳,OpenAI的技术报告称其为“作为世界模拟器的视频生成模型”(源地址:Video generation models as world simulators)。然而Sora也有许多局限,特别是对物理规律的理解仍然比较有限,例如生成一个玻璃杯摔碎的场景时并未很好表现碎片四溢的物理过程。

Sora的能力可以总结为:文生视频、图生视频和视频生成视频。Sora是通过不同长度、分辨率和长宽比的视频和图像数据共同训练出的一种“文本条件扩散模型”,其中Sora只是模型名统称,底层包含Diffusion model、Transformer等SOTA模型架构。

Sora模型训练

Sora模型架构

Sora整合了自家的GPT和DALL-E模型,其中,GPT-4就是基于Transformer架构的大型神经网络,目前在自然语言处理领域独树一帜,而最新的DALL-E 3是基于文本提示生成图像的图像生成模型。Sora使用了DALL-E 3中的重新标注技术,准备了大量带有文本标题的视频数据,通过训练一个高度描述性的标题模型,为所有视频生成文本标题,来提高文本准确性,改善了视频质量。同时,Sora利用GPT将用户简短的提示转化为更长、更详细的标题,指导视频的生成过程,从而使Sora能够生成高质量的视频,并准确地遵循用户的指示。如下为一张Sora模型训练流程示意图:
Sora模型训练流程图由于Sora未完全开放,目前魔塔社区所推测的Sora模型架构(与Latent Diffusion Model很像)如下:原始数据输入经过视频压缩网络后变成时间和空间上都被压缩的潜在表示,随后在时空潜空间上,基于conditioning训练中的video caption技术所生成视频-文本对的指导,通过Diffusion Transformer(DiT)生成新的视频潜在表示,最后经过解码器映射回像素空间。
Sora architectureSora模型训练一些要点:

  • 类似于大语言模型(LLM)中的基本训练单位为:文本token,图像模型的基本训练单位:图像patch;通过visual encoder将高维度的视频数据(NxHxW帧图像)切分为图像块(spatial temporal patch),从而将视频压缩到一个低维度的spacetime latent space;
  • 图像patch包含时间序列信息和空间像素信息,基于patch的表示有助于模型处理图像局部信息,并能训练具有不同分辨率、持续时间和长宽比的视频和图像;
  • 图像patch将展开为一维向量,并通过einops张量操作库进行操作,从而有效处理图像数据;

扩散模型之DDPM

Sora采用了Diffusion模型中的DDPM (Denoising Diffusion Probabilistic Models)作为图像生成模型。相比GAN来说,Diffusion模型训练更稳定,而且能够生成更多样本,OpenAI的论文《Diffusion Models Beat GANs on Image Synthesis》也证明了Diffusion 模型能够超越GAN。一些主流的文生图像模型如DALL-E 2, stable diffusion以及Imagen都纷纷采用了Diffusion模型用于图像生成。

一般来说,Diffusion模型包含两个过程,均为一个参数化的马尔科夫链 (Markov chain):

  • 前向扩散过程 (diffusion):对一张图像逐渐添加高斯噪音直至变成随机噪音的过程(数据噪声化
  • 反向生成过程 (reverse diffusion):从随机噪音开始逐渐去噪直至生成一张图像,这也是需要求解/训练的部分(去噪生成数据

Diffusion模型与其它主流生成模型的对比如下所示:
generative model overview
目前所采用的Diffusion模型大都是基于2020年的工作《DDPM: Denoising Diffusion Probabilistic Models》。DDPM对之前的扩散模型进行了简化和改进,更加注重对噪声的预测而非直接生成图像,并通过变分推断(variational inference)来进行建模,这主要是因为扩散模型也是一个隐变量模型(latent variable model),相比VAE这样的隐变量模型,扩散模型的隐变量是和原始数据是同维度的,而且扩散过程往往是固定的。

DDPM的优化目标是让网络预测的噪音和真实的噪音一致,其训练过程如下图所示:

  • Training阶段:随机选择一个训练样本 x 0 x_0 x0 -> 从 1 − T 1-T 1T随机抽样一个 t t t -> 随机产生噪音并计算当前所产生的带噪音数据 -> 输入网络预测噪音(红色框所示) -> 计算产生的噪音和预测的噪音的L2损失 -> 计算梯度并更新网络。
  • Sampling阶段:从一个随机噪音开始,并用训练好的网络预测噪音,然后计算条件分布的均值(红色框所示),然后用均值加标准差乘以一个随机噪音,直至 t = 0 t=0 t=0完成新样本的生成(最后一步不加噪音)。

PS:实际的Sampling代码实现和上述过程略有区别(而是先基于预测的噪音生成,并进行了clip处理(范围[-1, 1],原始数据归一化到这个范围),然后再计算均值(这应该算是一种约束,既然模型预测的是噪音,那么我们也希望用预测噪音重构处理的原始数据也应该满足范围要求)
DDPM
扩散模型的核心在于训练噪声预测模型,由于噪声和数据同维度,可以选择采用AutorEncoder架构作为噪声预测模型。DDPM所采用的是一个基于residual模块和self-attention模块的U-Net模型(encoder-decoder架构)。注意,DDPM在各个residual模块中都引入了time embedding(类似于transformer中的position embedding)。

DDPM基于加噪和去噪的图像生成过程可以用一张图形象概括:
DDPM2

Sora关键技术拆解

Sora可以拆分为Visual encoder, Diffusion Transformer和Transformer Decoder三个部分,下面对其分别阐述:

Visual encoder

输入的视频数据可以看成是NxHxW的若干帧图像, 通过Encoder被切分成spatial temporal patch,这些patch最终会被flatten成一维向量,送入diffusion model。其中,这里的patch的定义借鉴了Vision Transformer (ViT)中的patch,一些要点如下:

  • 由于这里的每个样本都是来自输入图像的一个patch,模型对样本在序列中的位置一无所知。因此,图像被连同positional embedding vector一起提供到encoder中。这里需要注意的一点是位置嵌入也是可学习的,所以实际上不需要将硬编码的向量 w.r.t 位置。
  • 将一维(压平)的patches组成一个大矢量,并得到乘以一个embedding矩阵,这也是可学习的,创建embedding patches。将这些与位置向量相结合,输入到transformer中。

对视频进行采样/处理的方法包括:

  • 摊大饼法:帧图像拼接成大图,切成token,此后按ViT方式处理
  • 切块法:对多帧图像切为若干个tuplet,每个tuplet包含时间、宽、高信息,经过spatial-tempral attention直接建模获得有效的视频表征token
    token method

Diffusion Transformer

Sora的主要是Peebles William(直博3年半期间3篇一作论文,非常solid),他于2023年在ICCV上发表了Diffusion Transformer (DiT) 的工作,可以认为:DiT = VAE encoder + ViT + DDPM + VAE decoder,但把DPPM中的卷积U-Net架构换成了transformer。这篇工作是通过结合diffusion model和transformer,从而达到可以scale up model来提升图像生成质量的效果。DiT文章在technical report的reference中给出,由于把图像的scaling技术运用到视频场景也非常直观,因此可以确定是Sora的技术之一。

下图展示了DiT的主要原理,输入是一张256x256x3的图片,对图片做切patch后经过投影得到每个patch的token,得到32x32x4的latent(在推理时输入直接是32x32x4的噪声),结合当前的step t, 输入label y作为输入, 经过N个DiT Block通过mlp进行输出,得到输出的噪声以及对应的协方差矩阵,经过T个step采样,得到32x32x4的降噪后的latent。
DiT architecture

思考与总结

  1. 截止到2024年3月2日,Sora还未完全开放使用,只有内测,现有的中文互联网中所谓“带你玩转Sora”的AI付费课程都是纯纯割韭菜;
  2. Sora文生视频模型可谓是之前许多模型的集大成者,虽然没有公开太多技术细节,但我们可以学习到Sora背后所涉及的一系列模型架构和训练方法(如Transformor, Diffusion模型等);
  3. 要训练一个多模态大模型(LMM),海量训练数据 + 优秀模型架构 + 算力资源都缺一不可,其中算力限制对中国公司发展人工智能提出了挑战;
  4. 作为一家违背“不盈利,造福人类”初衷的微软旗下闭源商业公司(doge),OpenAI是不会透露过多许多技术细节的,包括:如何构建Sora的具体模型、Transformer需要scale up到多大、从头训练到收敛的trick、如何实现训练长达1分钟视频的支持(切断+性能优化?)、如何保证视频实体的高质量和一致性,这些我们都还不完全清楚,需要大量工程实践去摸索。

参考文献

[1] DataWhale开源课程《Sora原理与技术实战》
[2] DataWhale成员优秀笔记分享:sora笔记(一):sora前世今生与技术梗概
[3] 怎么理解今年 CV 比较火的扩散模型(DDPM)? - 小小将的回答 - 知乎
https://www.zhihu.com/question/545764550/answer/2670611518
[4] Ho, J., et al. (2020). “Denoising diffusion probabilistic models.” Advances in Neural Information Processing Systems 33: 6840-6851.
[5] Peebles, W. and S. Xie (2023). Scalable diffusion models with transformers. Proceedings of the IEEE/CVF International Conference on Computer Vision.

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

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

相关文章

【谈一谈】并发编程_锁的分类

【谈一谈】并发编程_锁的分类 Hello!~大家好!~每天进步一点点,日复一日,我们终将问剑顶峰 这里主要是介绍下我们常用的锁可以分为几类,目的是整体框架作用~方便后续的并发文章 说白了,这篇就是开头哈~ 本文总纲: 一.可重入锁和不可重入锁 我们开发中一般用到的都是可重入锁比如…

Photoshop 2023:重塑创意,引领数字艺术新纪元

在数字艺术的浩瀚星空中,Adobe Photoshop 2023(简称PS 2023)如同一颗璀璨的新星,为Mac和Windows用户带来了前所未有的创意体验。这款强大的图像处理软件不仅继承了前作的精髓,更在细节上进行了诸多创新,让每…

运行Python文件时出现‘utf-8’code can‘t decode byte 如何解决?(如图)

如图 亦或者出现“SyntaxError: Non-UTF-8 code starting with \xbb ” 出现这种问题往往是编码格式导致的,我们可以在py文件中的第一行加入以下代码: # codingutf-8或者 # codinggdk优先使用gbk编码 解释一下常用的两种编码格式: utf-…

朱维群将出席用碳不排碳碳中和顶层科技路线设计开发

演讲嘉宾:朱维群 演讲题目:“用碳不排碳”碳中和顶层科技路线设计开发 简介 姓名:朱维群 性别:男 出生日期:1961-09-09 职称:教授 1998年毕业于大连理工大学精细化工国家重点实验室精细化工专业&…

什么是B+树,和B树有什么不同?

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区&#x…

Spring Initializer环境问题

1.基于jdk8与本地 环境准备 1)下载jdk8并安装 2&#xff09;下载maven 3.6.3并解压放入D盘maven目录下&#xff0c;去掉外层 设置阿里源 打开settings.xml,在mirrors标签之内增加&#xff0c;注意粘贴后</id>中的/有可能被删掉&#xff0c;要自己补上 <mirror>&l…

健身房预约小程序制作详细步骤解析

如果你是一位健身爱好者&#xff0c;或者是一位健身教练&#xff0c;你一定知道预约健身的痛苦。传统的预约方式不仅麻烦&#xff0c;而且效率低下。但是&#xff0c;现在&#xff0c;我们可以使用一种神仙工具——乔拓云网&#xff0c;来搭建一个属于自己的健身预约小程序&…

【VTKExamples::PolyData】第四十三期 PolyDataPointSampler

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例PolyDataPointSampler,并解析接口vtkPolyDataPointSampler,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO …

如何使用 CrewAI 构建协作型 AI Agents

一、前言 AI Agents 的开发是当前软件创新领域的热点。随着大语言模型 (LLM) 的不断进步&#xff0c;预计 AI 智能体与现有软件系统的融合将出现爆发式增长。借助 AI 智能体&#xff0c;我们可以通过一些简单的语音或手势命令&#xff0c;就能完成以往需要手动操作应用程序才能…

运维的利器–监控–zabbix–grafana

运维的利器–监控–zabbix–grafana 一、介绍 Grafana 是一个跨平台的开源的度量分析和可视化工具 , 可以通过将采集的数据查询然后可视化的展示 。zabbix可以作为数据源&#xff0c;为grafana提供数据&#xff0c;然后grafana将数据以图表或者其他形式展示出来。zabbix和gra…

基于YOLOv的目标追踪与无人机前端查看系统开发

一、背景与简介 随着无人机技术的快速发展&#xff0c;目标追踪成为无人机应用中的重要功能之一。YOLOv作为一种高效的目标检测算法&#xff0c;同样适用于目标追踪任务。通过集成YOLOv模型&#xff0c;我们可以构建一个无人机前端查看系统&#xff0c;实现实时目标追踪和可视化…

零基础学编程,中文编程工具之进度标尺构件的编程用法

零基础学编程&#xff0c;中文编程工具之进度标尺构件的编程用法 一、前言 今天给大家分享的中文编程开发语言工具 进度条构件的用法。 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载——…

机器人持续学习基准LIBERO系列9——数据集轨迹查看

0.前置 机器人持续学习基准LIBERO系列1——基本介绍与安装测试机器人持续学习基准LIBERO系列2——路径与基准基本信息机器人持续学习基准LIBERO系列3——相机画面可视化及单步移动更新机器人持续学习基准LIBERO系列4——robosuite最基本demo机器人持续学习基准LIBERO系列5——…

Python AI 实现绘画功能(附带源码)

本文我们将为大家介绍如何基于一些开源的库来搭建一套自己的 AI 作图工具。 需要使用的开源库为 Stable Diffusion web UI&#xff0c;它是基于 Gradio 库的 Stable Diffusion 浏览器界面 Stable Diffusion web UI GitHub 地址&#xff1a;GitHub - AUTOMATIC1111/stable-dif…

快速解决maven依赖冲突

我们在开发过程中经常出现maven依赖冲突&#xff0c;或者maven版本不匹配的情况&#xff0c;我们可以使用阿里云原生脚手架来做maven管理&#xff0c;添加需要的组件&#xff0c;然后点击获取代码&#xff0c;就可以获得对应的依赖文件。

【重要公告】对BSV警报系统AS的释义

​​发表时间&#xff1a;2024年2月15日 由BSV区块链协会开发并管理的BSV警报系统&#xff08;Alert System&#xff0c;以下简称“AS”&#xff09;是BSV网络的重要组件。它是一个复杂的系统&#xff0c;主要职能是在BSV区块链网络内发布信息。这些信息通常与网络访问规则NAR相…

C++基于多设计模式下的同步异步日志系统day4

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;C基于多设计模式下的同步&异步日志系统 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 只要内容主要实现了同步日志消息…

Kubernetes的Sevice管理

服务原理: 所有服务都是根据这个服务衍生或者变化出来,根服务---- 服务感知后端靠标签 slelector 标签选择器 kubectl label pods web1 appweb kubectl cluter-info dump | grep -i service-cluster-ip-range 服务ip取值范围 Service 管理: 创建服务: --- kind: Serv…

React富文本编辑器开发(六)

现在&#xff0c;相关的基础知识我们应该有个大概的了解了&#xff0c;但离我们真正的开发出一个实用型的组件还有一段距离&#xff0c;不过不用担心&#xff0c;我们离目标已经越来越近。 以现在我们所了解的内容而言&#xff0c;或许你发现了一个问题&#xff0c;就是我们的编…

CentOS配网报错:network is unreachable

常用命令&#xff1a; 打开&#xff1a; cd /etc/sysconfig/network-scripts/ 修改&#xff1a; vim ifcfg-ens33 打开修改&#xff1a; vim /etc/sysconfig/network-scripts/ifcfg-ens33 保存&#xff1a; 方法1&#xff1a;ESCZZ&#xff08;Z要大写&#xff09; 方…