AIGC视频生成模型:ByteDance的PixelDance模型
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍ByteDance的视频生成模型PixelDance,论文于2023年11月发布,模型上线于2024年9月,同时期上线的模型还有Seaweed(论文未发布)。
🌺优质专栏回顾🌺:
- 机器学习笔记
- 深度学习笔记
- 多模态论文笔记
- AIGC—图像
文章目录
- 论文
- 摘要
- 引言
- 输入
- 训练和推理时的数据处理
- 总结
- 相关工作
- 视频生成
- 长视频生成
- 方法
- 模型架构
- 潜在扩散架构
- 图像指令注入
- 训练和推理
- 实验
- 两种生成模式
- 更多应用
- 草图指令
- 零样本视频编辑
- 结论
论文
论文:https://arxiv.org/pdf/2311.10982
项目:https://makepixelsdance.github.io/
摘要
目前的视频生成方法主要侧重于文本到视频的生成,这样生成的视频片段往往动作极少。作者认为,仅依赖文本指令进行视频生成是不够且并非最优的。
在本文中,作者介绍了PixelDance,这是一种基于扩散模型的新颖方法,它将视频生成的第一帧和最后一帧的图像指令与文本指令相结合。
这并不是首例提出依赖文本指令进行视频生成是不够的论文,在Meta的Emu Video中也提到了,但是两者的生成策略略有不同:
- Emu Video根据输入文本提示生成图像;之后再基于图像和文本的强条件生成视频。
- 输入的内容包括,文本,作为视频第一帧的图像,作为视频最后一帧的图像。
Emu Video模型的实现参考历史文章:AIGC视频生成明星——Emu Video模型
引言
输入
作者提出了一种新颖的视频生成输入
,其输入包括三部分:
- 文本指令;
- 视频片段的第一帧引入图像指令。第一帧的图像指令描绘了视频片段的主要场景。
- 视频片段的最后一帧引入图像指令。最后一帧的图像指令(在训练和推理中可选使用)描绘了片段的结尾,并为生成提供了额外的控制。
这种方法还可以创建更长的视频
,在这种情况下,模型会被多次应用,前一个片段的最后一帧将作为后续片段的第一帧指令。
训练和推理时的数据处理
相比于其他模型提出使用高度描述性的文本注释以更好地遵循文本指令。图像指令使用真实视频帧,更加直接和易于获取。
PixelDance是一种基于潜在扩散模型的视频生成方法,以 <文本,第一帧,最后帧>指令为条件。
文本指令由预训练的文本编码器编码,并通过交叉注意力机制集成到扩散模型中。
图像指令由预训练的VAE编码器编码,并与扰动后的视频潜在表示或高斯噪声连接,作为扩散模型的输入,如下所示:【在下节“方法”中会详细介绍】。
-
第一帧
- 在训练中,使用(真实)第一帧来强制模型严格遵循指令,保持连续视频片段之间的连续性。
- 在推理中,这个指令可以来源:
- 从文本到图像(T2I)模型中获得;
- 由用户提供。
-
最后一帧
- 在训练中,我们有意避免鼓励模型完全复制最后一帧指令,因为在推理中很难提供完美的最后一帧,在最后一帧的处理上,作者开发了三种技术:
- 第一,在训练中,最后一帧指令是从视频片段的最后三帧(真实帧)中随机选择的。
- 第二,我们向指令中引入噪声,以减少对指令的依赖并提高模型的鲁棒性。
- 第三,在训练中,我们以一定的概率(例如25%)随机丢弃最后一帧指令。
- 在推理中,用户可以使用基本的图像编辑工具创建这种指令。模型能够适应用户提供的粗略草图作为指导,而不需要提供完美的最后一帧。简单而有效的推理采样策略如下(最后一帧指令的影响可以通过T来调整。):
- 在前T步去噪步骤中,利用最后一帧指令引导视频生成朝着期望的结束状态发展。
- 在剩余的步骤中,丢弃该指令,使模型能够生成更具时间连贯性的视频。
- 在训练中,我们有意避免鼓励模型完全复制最后一帧指令,因为在推理中很难提供完美的最后一帧,在最后一帧的处理上,作者开发了三种技术:
总结
作者在文中说明了其主要贡献可以总结如下:
- 提出了一种基于扩散模型的新颖视频生成方法PixelDance,它将第一帧和最后一帧的图像指令与文本指令相结合(还可以生成长视频,这一点是最重要的)。
- 为PixelDance开发了训练和推理技术,这不仅有效地提高了生成视频的质量,而且为用户提供了对视频生成过程更多的控制。
- 在公开数据上训练的模型在生成具有复杂场景和动作的高动态视频方面表现出色,为视频生成设定了新的标准。
相关工作
视频生成
扩散模型在逼真的文本到图像生成方面取得了显著进展,其表现出比GAN更强的鲁棒性,并且与基于Transformer的模型相比需要更少的参数。潜在扩散模型被提出通过在压缩的低维潜在空间中训练扩散模型来减轻计算负担。
对于视频生成,以往的研究通常在预训练的文本到图像扩散模型的2D UNet中添加时间卷积层和时间注意力层【如Gen-1和Emu Video等】。尽管这些进展通过集成超分辨率模块为高分辨率视频的生成铺平了道路,但生成的视频具有简单、动作极少的特点。
最近,视频编辑领域取得了显著进展,特别是在保持视频原始结构和运动的同时进行内容修改方面,但存在下面的问题:
- 寻找合适的参考视频进行编辑非常耗时。
- 限制了创作的范围,因为它排除了合成全新内容(例如,一只北极熊走在长城上)的可能性。
长视频生成
长视频生成是一项更具挑战性的任务,它要求连续的视频片段之间无缝过渡,并且场景和角色具有长期一致性。通常有两种方法:
- 自回归方法采用滑动窗口,以前一个片段为条件生成新的片段。自回归方法由于时间上的误差累积容易导致质量下降。
- 分层方法首先生成稀疏帧,然后插值中间帧。需要长视频进行训练,由于在线视频中频繁的镜头变化,这些长视频很难获得。
在本文中,PixelDance以自回归的方式生成连续的视频片段,并且在合成长期一致的帧方面比现有模型表现更优。同时,我们提倡用户积极参与生成过程,就像电影导演一样,以确保生成的内容与用户的期望紧密一致。
方法
本文试图让模型专注于学习视频内容的动态变化,以生成具有丰富动作的视频。将第一帧和最后一帧的图像指令与文本指令相结合用于视频生成,并且我们有效地利用公开视频数据进行训练。我们将在本节详细阐述模型架构和量身定制的训练和推理技术。
模型架构
潜在扩散架构
论文中使用变分自动编码器(VAE)在潜在空间中进行去噪训练,以减轻计算负担。同时采用广泛使用的2D UNet作为扩散模型,它由一系列空间下采样层和一系列带有跳跃连接的空间上采样层构成。它由两个基本块组成:
- 2D卷积块
- 2D注意力块。
通过插入时间层将2D UNet扩展为3D变体,实现如下:
- 在2D卷积层之后添加沿时间维度的1D卷积层;
- 在2D注意力层之后添加沿时间维度的1D注意力层(
双向自注意力机制
)。
Runway的Gen-1和Meta的Emu Video也是如此实现的。
该模型进行图像和视频联合训练,以在空间维度上保持高保真的生成能力。对于图像输入,1D时间操作被禁用。
图像输入主要涉及两类:训练时的图像指令输入以及联合训练时的普通图像输入。
我们使用预训练的CLIP文本编码器对文本指令进行编码,并通过UNet中的交叉注意力层将嵌入文本注入,其中隐藏状态作为查询,文本作为键和值。
图像指令注入
将第一帧和最后一帧的图像指令与文本指令相结合。在训练中,使用真实视频帧作为指令,这很容易获得。图像指令首先使用VAE将它们编码到扩散模型的输入空间中,得到 f f i r s t f^{first} ffirst和 f l a s t f^{last} flast 。最终的图像条件构建为: c i m a g e = [ f f i r s t , P A D s , f l a s t ] ∈ R F × C × H × W c^{image }=\left[f^{first }, PADs, f^{last }\right] \in \mathbb{R}^{F × C × H × W} cimage=[ffirst,PADs,flast]∈RF×C×H×W
其中 P A D s ∈ R ( F − 2 ) × C × H × W PADs \in \mathbb{R}^{(F-2) ×C ×H ×W} PADs∈R(F−2)×C×H×W 。然后,条件 c i m a g e c^{image} cimage与噪声潜在表示 z t z_t zt沿通道维度连接,作为扩散模型的输入。
训练和推理
图3:展示了PixelDance的训练过程。原始视频片段和图像指令(位于红色和绿色框中)被编码为 z z z和 c i m a g e c^{image} cimage ,然后在添加不同噪声进行扰动后,沿着通道维度进行拼接。
训练过程如上图所示。
第一帧指令:训练中使用真实的第一帧,使模型在推理中严格遵循第一帧指令。
最后一帧指令:有意避免鼓励模型完全复制最后一帧指令。因为在推理时,预先无法获得真实的最后一帧,模型需要适应用户提供的粗略草图作为指导,以生成时间连贯的视频。为此,引入了三种技术来选择最后一帧指令:
- 第一,我们从视频片段的最后三帧真实帧中随机选择一帧作为训练的最后一帧指令。
- 第二,为了提高鲁棒性,我们用噪声扰动图像指令的编码潜在表示 c i m a g e c^{image} cimage 。
- 第三,在训练中,我们以概率 η \eta η随机丢弃最后一帧指令,将相应的潜在表示替换为零。
在第三种技术中,作者还提出了一种简单而有效的推理技术。在推理过程中,在总共T步去噪步骤的前 τ \tau τ步中,应用最后一帧指令来引导视频生成朝着期望的结束状态发展,在后续步骤中丢弃该指令,以生成更合理且时间连贯的视频:
x ~ θ = { x ^ θ ( z t , f f i r s t , f l a s t , c t e x t ) , i f t < τ x ^ θ ( z t , f f i r s t , c t e x t ) , i f τ ≤ t ≤ T \tilde{x}_{\theta}=\left\{\begin{array}{ll} \hat{x}_{\theta}\left(z_{t}, f^{first }, f^{last }, c^{text }\right), & if t<\tau \\ \hat{x}_{\theta}\left(z_{t}, f^{first }, c^{text }\right), & if \tau \leq t \leq T \end{array} \right. x~θ={x^θ(zt,ffirst,flast,ctext),x^θ(zt,ffirst,ctext),ift<τifτ≤t≤T
τ \tau τ决定了模型对最后一帧指令的依赖程度,调整 τ \tau τ将实现各种应用。例如,我们的模型可以在没有最后一帧指令的情况下(即 τ = 0 \tau = 0 τ=0)生成高动态视频。此外,我们在推理中应用无分类器引导,它混合了模型在有文本提示和无文本提示条件下的分数估计。
实验
参照论文原文
两种生成模式
第一种是基础模式(Basic Mode)【和Emu Video 一样】,用户只需要提供一张指导图片+文本描述,PixelDance 就可以生成有高度一致性且有丰富动态性的视频,其中指导图片可以是真实图片,也可以利用现有的文生图模型生成,如下所示:
第二种是高级魔法模式(Magic Mode),给了用户更多发挥想象力和创造力的空间。在这种模式下,用户需要提供两张指导图片+文本描述,可以更好地生成更有难度的各种炫酷特效镜头,如下所示:
更多应用
草图指令
我们提出的方法可以扩展到其他类型的图像指令,如语义图、图像草图、人体姿态和边界框。为了证明这一点,我们以图像草图为例,使用图像草图作为最后一帧指令对PixelDance进行微调。结果如图10的前两行所示,表明一个简单的草图图像能够指导视频生成过程。
零样本视频编辑
PixelDance无需任何训练即可执行视频编辑,这通过将视频编辑任务转化为图像编辑任务来实现。如图10的最后一个示例所示,通过编辑给定视频的第一帧和最后一帧,PixelDance生成了与用户视频编辑期望一致的时间连贯视频。
结论
在本文中,作者提出了一种基于扩散模型的新颖视频生成方法PixelDance,它将第一帧和最后一帧的图像指令与文本指令相结合。作者还为该方法开发了专门的训练和推理技术。主要在WebVid - 10M上训练的PixelDance在合成具有复杂场景和动作的视频方面表现出卓越的熟练度,为视频生成设定了新的标准。
尽管我们的方法取得了显著成果,但仍有进一步改进的空间:
- 首先,模型可以从高质量的开放域视频数据训练中受益。
- 其次,在特定领域对模型进行微调可以进一步增强其能力。
- 第三,结合概述视频关键元素和动作的注释文本可以提高与用户指令的匹配度。
- 最后,PixelDance目前仅包含15亿参数,为未来的扩展提供了机会。未来的工作将对这些方面进行进一步研究。
相关文章:

AIGC视频生成模型:ByteDance的PixelDance模型
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍ByteDance的视频生成模型PixelDance,论文于2023年11月发布,模型上线于2024年9月,同时期上线的模型还有Seaweed&…...

python远程获取数据库中的相关数据并存储至json文件
1. conn中的5个变量的含义: ① Driver:数据库驱动程序,我使用的是SQL Server数据库。 ② Server:数据库所在的服务器地址。 ③ Database:要连接的数据库的名称。 ④ UID:登录 SQL Server 数据库的用户名…...

Kubernetes v1.28.0安装dashboard v2.6.1(k8s图形化操作界面)
准备工作 Kubernetes v1.28.0搭建教程请参考:Kubernetes v1.28.0集群快速搭建教程-CSDN博客 查看当前集群nodes都是ready状态 查看当前pods都是running状态 下载并修改配置文件 下载 recommended.yaml ,下载好之后,进入文件编辑 下载地址…...

详解三种常用标准化:Batch Norm、Layer Norm和RMSNorm
在深度学习中,标准化技术是提升模型训练速度、稳定性和性能的重要手段。本文将详细介绍三种常用的标准化方法:Batch Normalization(批量标准化)、Layer Normalization(层标准化)和 RMS Normalization&#…...

linux+docker+nacos+mysql部署
一、下载 docker pull mysql:5.7 docker pull nacos/nacos-server:v2.2.2 docker images 二、mysql部署 1、创建目录存储数据信息 mkdir ~/mysql cd ~/mysql 2、运行 MySQL 容器 docker run -id \ -p 3306:3306 \ --name mysql \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/…...

如何实现gitlab和jira连通
将 GitLab 和 Jira 集成起来可以实现开发任务与代码变更的联动,提高团队协作效率。以下是实现两者连通的详细步骤: 1. 确保必要条件 在进行集成之前,确保以下条件满足: 你有 GitLab 和 Jira 的管理员权限。Jira 是 Jira Cloud 或…...

利用ML.NET精准提取人名
在当今信息爆炸的时代,文本处理任务层出不穷,其中人名提取作为基础且重要的工作,广泛应用于信息检索、社交网络分析、客户关系管理等领域。随着人工智能不断进步,ML.NET作为微软推出的开源机器学习框架,为开发者提供了…...

Node.js的解释
1. Node.js 入门教程 1.1 什么是 Node.js? 1.1.1 Node.js 是什么? Node.js 是一个基于 JavaScript 的开源服务器端运行时环境,允许开发者用 JavaScript 编写服务器端代码。与传统的前端 JavaScript 主要运行在浏览器端不同,Nod…...

Macos下交叉编译安卓的paq8px压缩算法
官方没有android的编译方法,自己编写脚本在macos下交叉编译. 下载源码: git clone https://github.com/hxim/paq8px.git 稍旧的ndk并不能编译成功,需要下载最新的ndkr27c, 最后是使用clang来编译。 编译build.sh export ANDROID_NDK/Vol…...

如何在data.table中处理缺失值
📊💻【R语言进阶】轻松搞定缺失值,让数据清洗更高效! 👋 大家好呀!今天我要和大家分享一个超实用的R语言技巧——如何在data.table中处理缺失值,并且提供了一个自定义函数calculate_missing_va…...

从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑
文章目录 从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑一 参考二 安装三 启动准备大模型文件 四 数据集(关键)!4.1 Alapaca格式4.2 sharegpt4.3 在 dataset_info.json 中注册4.4 官方 alpaca_zh_demo 例子 999条数据, 本机微调 5分…...

SQL-leetcode—1164. 指定日期的产品价格
1164. 指定日期的产品价格 产品数据表: Products ---------------------- | Column Name | Type | ---------------------- | product_id | int | | new_price | int | | change_date | date | ---------------------- (product_id, change_date) 是此表的主键(具…...

[Day 15]54.螺旋矩阵(简单易懂 有画图)
今天我们来看这道螺旋矩阵,和昨天发的题很类似。没有技巧,全是循环。小白也能懂~ 力扣54.螺旋矩阵 题目描述: 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: …...

HTTP 配置与应用(不同网段)
想做一个自己学习的有关的csdn账号,努力奋斗......会更新我计算机网络实验课程的所有内容,还有其他的学习知识^_^,为自己巩固一下所学知识,下次更新校园网设计。 我是一个萌新小白,有误地方请大家指正,谢谢…...

Quartus:开发使用及 Tips 总结
Quartus是Altera(现已被Intel收购)推出的一款针对其FPGA产品的综合性开发环境,用于设计、仿真和调试数字电路。以下是使用Quartus的一些总结和技巧(Tips),帮助更高效地进行FPGA项目开发: 这里写目录标题 使用总结TIPS…...

VSCode下EIDE插件开发STM32
VSCode下STM32开发环境搭建 本STM32教程使用vscode的EIDE插件的开发环境,完全免费,有管理代码文件的界面,不需要其它IDE。 视频教程见本人的 VSCodeEIDE开发STM32 安装EIDE插件 Embedded IDE 嵌入式IDE 这个插件可以帮我们管理代码文件&am…...

Golang并发机制及CSP并发模型
Golang 并发机制及 CSP 并发模型 Golang 是一门为并发而生的语言,其并发机制基于 CSP(Communicating Sequential Processes,通信顺序过程) 模型。CSP 是一种描述并发系统中交互模式的正式语言,强调通过通信来共享内存…...

HTML 文本格式化详解
在网页开发中,文本内容的呈现方式直接影响用户的阅读体验。HTML 提供了多种文本格式化元素,可以帮助我们更好地控制文本的显示效果。本文将详细介绍 HTML 中的文本格式化元素及其使用方法,帮助你轻松实现网页文本的美化。 什么是 HTML 文本格…...

我谈《概率论与数理统计》的知识体系
学习《概率论与数理统计》二十多年后,在廖老师的指导下,才厘清了各章之间的关系。首先,这是两个学科综合的一门课程,这一门课程中还有术语冲突的问题。这一门课程一条线两个分支,脉络很清晰。 概率论与统计学 概率论…...

五、华为 RSTP
RSTP(Rapid Spanning Tree Protocol,快速生成树协议)是 STP 的优化版本,能实现网络拓扑的快速收敛。 一、RSTP 原理 快速收敛机制:RSTP 通过引入边缘端口、P/A(Proposal/Agreement)机制等&…...

基于Java Web的网上房屋租售网站
内容摘要 本毕业设计题目为《基于Java Web的网上房屋租售网站》,是在信息化时代下充分利用互联网对传统房屋租售方式进行创新,在互联网上进行房屋租售突破了传统方式的局限性。对于房屋租售的当事人都提供了极大的便利。本稳针对了实际用户需求…...

Pyside6(PyQT5)中的QTableView与QSqlQueryModel、QSqlTableModel的联合使用
QTableView 是QT的一个强大的表视图部件,可以与模型结合使用以显示和编辑数据。QSqlQueryModel、QSqlTableModel 都是用于与 SQL 数据库交互的模型,将二者与QTableView结合使用可以轻松地展示和编辑数据库的数据。 QSqlQueryModel的简单应用 import sys from PySid…...

git常用命令学习
目录 文章目录 目录第一章 git简介1.Git 与SVN2.Git 工作区、暂存区和版本库 第二章 git常用命令学习1.ssh设置2.设置用户信息3.常用命令设置1.初始化本地仓库init2.克隆clone3.查看状态 git status4.添加add命令5.添加评论6.分支操作1.创建分支2.查看分支3.切换分支4.删除分支…...

【优选算法】7----三数之和
来了来了,他来了,又是学习算法的一天~ 今天的嘉宾是中等难度的算法题----三数之和! ------------------------------------------begin------------------------------------ 题目解析: 哇趣!又是给了一个数组&#…...
分子动力学模拟里的术语:leap-frog蛙跳算法和Velocity-Verlet算法
分子动力学模拟(Molecular Dynamics Simulation,简称MD)是一种基于经典力学原理的计算物理方法,用于模拟原子和分子在给定时间内的运动和相互作用。以下是关于分子动力学模拟的一些核心术语和概念: 定义系统&am…...

2025年数学建模美赛:A题分析(1)Testing Time: The Constant Wear On Stairs
2025年数学建模美赛 A题分析(1)Testing Time: The Constant Wear On Stairs 2025年数学建模美赛 A题分析(2)楼梯磨损分析模型 2025年数学建模美赛 A题分析(3)楼梯使用方向偏好模型 2025年数学建模美赛 A题分…...

利用 SoybeanAdmin 实现前后端分离的企业级管理系统
引言 随着前后端分离架构的普及,越来越多的企业级应用开始采用这种方式来开发。前后端分离不仅提升了开发效率,还让前端和后端开发可以并行进行,减少了相互之间的耦合度。SoybeanAdmin 是一款基于 Spring Boot 和 MyBatis-Plus 的后台管理系…...

996引擎 - 前期准备-配置开发环境
996引擎 - 前期准备 官网搭建服务端、客户端单机搭建 开发环境配置后端开发环境配置环境 前端开发环境配置环境 后端简介前端简介GUILayoutGUIExport 官网 996传奇引擎官网 所有资料从官网首页开始,多探索。 文档: 996M2-服务端Lua 996M2-客户端Lua 搭…...

Tensor 基本操作4 理解 indexing,加减乘除和 broadcasting 运算 | PyTorch 深度学习实战
前一篇文章,Tensor 基本操作3 理解 shape, stride, storage, view,is_contiguous 和 reshape 操作 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started Tensor 基本使用 索引 indexing示例代码 加减…...

【Uniapp-Vue3】request各种不同类型的参数详解
一、参数携带 我们调用该接口的时候需要传入type参数。 第一种 路径名称?参数名1参数值1&参数名2参数值2 第二种 uni.request({ url:"请求路径", data:{ 参数名:参数值 } }) 二、请求方式 常用的有get,post和put 三种,默认是get请求。…...