[翻译+笔记] 用于视频生成的Diffusion Model

news2024/11/14 6:37:23

这次翻译+笔记的博客是https://lilianweng.github.io/posts/2021-07-11-diffusion-models/

在阅读这篇博客前, 推荐先对Diffusion Model进行了解. 可以看我的笔记: https://blog.csdn.net/wjpwjpwjp0831/article/details/141524088


视频相关的任务向来是比图像更有挑战性, 这是因为视频除了空间域之外, 还有时间域, 并且还要保证时空连续性, 来达到合理的结果. 此外, 对于视频任务来说, 数据也是比较难获取的. 这篇博客从两大类介绍了用于视频生成的Diffusion Model, 一类是从头学习的Generation, 一类是在已经训练好的图像生成的Diffusion Model上进行微调, 或干脆是training-free的.

1. 从头对视频生成进行建模

1.1 参数化&采样

x ∼ q r e a l \mathbf{x} \sim q_{real} xqreal表示从真实的数据分布中采样的样本. 对于加噪过程, 我们每一步都加入高斯噪声, 得到了一系列的中间量: { z t ∣ t − 1 , . . . , T } \{\mathbf{z}_t | t-1, ..., T\} {ztt1,...,T}. 最终我们采样到的噪声应该是接近标准正态分布, 即 q ( z T ) ∼ N ( 0 , I ) q(\mathbf{z}_{T}) \sim \mathcal{N}(0, I) q(zT)N(0,I).

在Diffusion的加噪结论中, 我们可以直接从原始样本 x 0 \mathbf{x}_0 x0得到第 t t t步的加噪样本. 这个分布可以表示为:

q ( z t ∣ x ) = N ( z t ; α t x , σ t 2 I ) q\left(\mathbf{z}_t \mid \mathbf{x}\right)=\mathcal{N}\left(\mathbf{z}_t ; \alpha_t \mathbf{x}, \sigma_t^2 \mathbf{I}\right) q(ztx)=N(zt;αtx,σt2I)

我们考察加噪过程中的任一两个时间步的关系, 对于 0 ≤ s < t ≤ T 0\le s < t \le T 0s<tT, 有:

在这里插入图片描述
我们定义对数信噪比(log SNR)为 λ t = log ⁡ [ α t 2 / σ t 2 ] \lambda_t = \log [\alpha_t^2 / \sigma_t^2] λt=log[αt2/σt2]. 这样定义是合理的, 因为对高斯分布来说, 均值表示信息, 而方差就表示不确定度(噪音). 我们重新整理 q ( z t ∣ z s ) q(\mathbf{z}_t | \mathbf{z}_s) q(ztzs)的方差项:

α t 2 σ s 2 α s 2 σ t 2 = exp ⁡ log ⁡ [ α t 2 / σ t 2 α s 2 / σ s 2 ] = exp ⁡ ( λ t − λ s ) \frac{\alpha_t^2 \sigma_s^2}{\alpha_s^2 \sigma_t^2 } = \exp \log [ \frac{\alpha_t^2 / \sigma_t^2}{\alpha_s^2 / \sigma_s^2}] = \exp ( \lambda_t - \lambda_s ) αs2σt2αt2σs2=explog[αs2/σs2αt2/σt2]=exp(λtλs)

所以:

在这里插入图片描述

所以视频生成的整体范式和图像生成差不多, 只是数据的维度有所区别, 例如, 预测噪声的网络需要从2D UNet变成3D UNet, 详细见后文.

此外, 作者还介绍了一种简化的DDIM的更新方式, 也就是通过角度进行参数化, 这个方式是在论文PROGRESSIVE DISTILLATION FOR FAST SAMPLING OF DIFFUSION MODELS提出的. 这种方式叫做v-prediction, 其中v的意思是速度, 也即latent变量 z t \mathbf{z}_t zt的梯度方向. 通过角度参数化的方式, 实验表明在视频生成中可以减少颜色的偏移(我猜是因为通过同一个角度变量 ϕ \phi ϕ对样本变量 x \mathbf{x} x和噪声变量 ϵ \epsilon ϵ进行了约束, 增加了约束的条件). 下面进行详细的推导.

我们现在不通过log SNR来更新了, 转而考虑定义一个角度量 ϕ t = arctan ⁡ ( σ t / α t ) \phi_t = \arctan(\sigma_t / \alpha_t) ϕt=arctan(σt/αt). 因此, 有 α t = cos ⁡ ϕ , σ t = sin ⁡ ϕ \alpha_t = \cos \phi, \sigma_t = \sin \phi αt=cosϕ,σt=sinϕ. 根据前面的 z t = α t x + σ t ϵ t \mathbf{z}_t = \alpha_t \mathbf{x} + \sigma_t \epsilon_t zt=αtx+σtϵt, 有

z ϕ = cos ⁡ ϕ x + sin ⁡ ϕ ϵ \mathbf{z}_\phi = \cos \phi \mathbf{x} + \sin \phi \epsilon zϕ=cosϕx+sinϕϵ

由于现在右侧是通过 ϕ \phi ϕ进行参数化, 所以 z \mathbf{z} z的下标改为 ϕ \phi ϕ.

我们现在考虑 z \mathbf{z} z的速度, 即梯度方向:

v ϕ ≡ d z ϕ d ϕ = d cos ⁡ ( ϕ ) d ϕ x + d sin ⁡ ( ϕ ) d ϕ ϵ = cos ⁡ ( ϕ ) ϵ − sin ⁡ ( ϕ ) x \mathbf{v}_\phi \equiv \frac{d \mathbf{z}_\phi}{d \phi}=\frac{d \cos (\phi)}{d \phi} \mathbf{x}+\frac{d \sin (\phi)}{d \phi} \epsilon=\cos (\phi) \epsilon-\sin (\phi) \mathbf{x} vϕdϕdzϕ=dϕdcos(ϕ)x+dϕdsin(ϕ)ϵ=cos(ϕ)ϵsin(ϕ)x

然后我们重新整理出 x , ϵ \mathbf{x}, \epsilon x,ϵ z \mathbf{z} z的关系, 以便带入到去噪的迭代式中:

在这里插入图片描述
类似的地, 可以整理出

ϵ = sin ⁡ ( ϕ ) z ϕ + cos ⁡ ( ϕ ) v ϕ \epsilon=\sin (\phi) \mathbf{z}_\phi+\cos (\phi) \mathbf{v}_\phi ϵ=sin(ϕ)zϕ+cos(ϕ)vϕ

我们将上述结果代入到 z ϕ = cos ⁡ ϕ x + sin ⁡ ϕ ϵ \mathbf{z}_\phi = \cos \phi \mathbf{x} + \sin \phi \epsilon zϕ=cosϕx+sinϕϵ:

在这里插入图片描述
然后用积化和差公式, 得到:

z ϕ s = cos ⁡ ( ϕ s − ϕ t ) z ϕ t + sin ⁡ ( ϕ s − ϕ t ) v ^ θ ( z ϕ t ) \mathbf{z}_{\phi_s}=\cos \left(\phi_s-\phi_t\right) \mathbf{z}_{\phi_t}+\sin \left(\phi_s-\phi_t\right) \hat{\mathbf{v}}_\theta\left(\mathbf{z}_{\phi_t}\right) zϕs=cos(ϕsϕt)zϕt+sin(ϕsϕt)v^θ(zϕt)

注意其中的 v ^ θ ( z ϕ t ) \hat{\mathbf{v}}_\theta\left(\mathbf{z}_{\phi_t}\right) v^θ(zϕt)是一个网络, 是用来根据 z ϕ t \mathbf{z}_{\phi_t} zϕt来预测输出, 当然是一个 R d → R d \mathbb{R}^d \to \mathbb{R}^d RdRd的映射. 所以, 按照这种方式理解的话, 更新过程(去噪过程)就是将 z ϕ t \mathbf{z}_{\phi_t} zϕt按照 − v ^ θ ( z ϕ t ) -\hat{\mathbf{v}}_\theta\left(\mathbf{z}_{\phi_t}\right) v^θ(zϕt)的方向, 进行 ϕ s − ϕ t \phi_s-\phi_t ϕsϕt角度的圆周运动, 如下图所示:

在这里插入图片描述
说回到视频生成. 在生成的过程中, 我们第一次可能生成的是帧数比较少的视频, 那么其实我们还需要对其进行空间和时间上采样来获得更精细的视频. 比方说, 我们第一次生成了16帧的视频: x a ∼ p θ ( x ) \mathbf{x}_a \sim p_\theta(\mathbf{x}) xapθ(x), 那么现在就需要根据它扩展到第二个样本 x b ∼ p θ ( x b ∣ x a ) \mathbf{x}_b \sim p_\theta(\mathbf{x}_b | \mathbf{x}_a) xbpθ(xbxa). 这个 x b \mathbf{x}_b xb既可以包含 x a \mathbf{x}_a xa中的部分帧, 也可以是 x a \mathbf{x}_a xa帧间的扩展. 因此, 我们在不训练新的模型(例如预测联合分布的模型)的情况下, 可以用 x a \mathbf{x}_a xa的分布梯度来指导 x b \mathbf{x}_b xb的生成, 如下式:

在这里插入图片描述

1.2 模型架构: 3D UNet和Diffusion Transformer

在**Video Diffusion Model (VDM)**中, 将2D UNet扩展成了3D UNet. 主要是做了以下的变化:

  1. 首先, 将每个2D卷积变成了只提取空间信息的3D卷积, 比如说, 将 3 × 3 3 \times 3 3×3的卷积核, 变成 1 × 3 × 3 1 \times 3 \times 3 1×3×3的卷积核. 1 1 1指的是时间维度, 因此这里只提取空间信息.

  2. 在每个空间注意力块后面, 插入一个时间注意力块, 在张量的第一个维度(时间维)执行注意力. 此外, 在每个时间注意力块中使用相对位置嵌入, 以便网络能够以不需要绝对视频时间概念的方式区分帧的顺序

  3. 对于条件输入, 例如文本特征 c \mathbf{c} c和log SNR λ t \lambda_t λt和输入latent z t \mathbf{z}_t zt一起输入 (一起的方式可能是concat, 待考证). 当然, 作者发现在输入这些condition之前, 先用一个MLP进行处理效果会更好(起到一个对齐作用, 并且增加合理的复杂度).

3D UNet的架构如下所示:

在这里插入图片描述
此外, 还有一个工作, Imagen Video通过若干Diffusion model (7个) 级联的方式来逐步增加分辨率和fps. 主要组成部分如下:

  1. 一个frozen的T5的text encoder. 用于将文本编码作为condition.
  2. 一个基础的video diffusion model, 用于生成最开始的视频. 该model直接在每一帧都执行spatial attention, 然后最后再混合执行temporal attention, 来更好地捕捉时间上的依赖性. 如下图所示:
  3. 一系列的用于时空超分的diffusion model, 包括3个空间超分(SSR)和3个时间超分(TSR). SSR和TSE的condition是加噪的latent z t \mathbf{z}_t zt, 以及原始样本 x 0 \mathbf{x}_0 x0. SSR是通过双线性resize进行上采样, TSR是通过重复帧或者填补空白帧来进行上采样.

在这里插入图片描述
整个流程如下:

在这里插入图片描述
Sora则是利用Diffusion Transformer, 将视频用encoder搞成时空的patch然后输入到DiT当中. DiT的核心设计理念为:

  1. 输入为噪声latent
  2. 将噪声latent打成patch, 例如噪声的size为 ( I , I , C ) (I, I, C) (I,I,C), 则输入的patch序列长度为 ( I / p ) 2 (I/p)^2 (I/p)2.
  3. 此外, 也需要将输入的condition, 例如timestep和class label(类别控制生成的条件下), 进行输入. DiT选用adaLN进行condition和latent的融合. adaLN需要两个参数, 分布是scale参数和shift参数, 表示为 γ , β \gamma, \beta γ,β. γ β \gamma \beta γβ则直接根据condition经过一个MLP得出.
  4. 输出为预测的噪声和方差.

整体结构图如下:

在这里插入图片描述

2. 将Image Diffusion稍加调整来生成视频

还有一种方式是对text to image的diffusion model插入一些temporal的层, 这样的话我们既能保证尽量少的knowledge丢失, 还能降低训练难度.

2.1 在Video Data上进行微调

Make-A-Video这篇工作, 是将一个预训练的图像diffusion model在时间维上进行扩展, 包括三个部分:

  1. 一个base model
  2. 时空卷积层和注意力层来扩展维度
  3. 用于生成高帧率的帧插值网络

整个过程如下式所示:

在这里插入图片描述
Tune-A-Video是一个视频编辑的工作. 它的输入是一个原始视频, 以及一段描述性的文字, 用于目标编辑, 更改背景和风格迁移等.

除了将2D卷积变为3D卷积外, Tune-A-Video 的 U-Net 架构还集成了 ST-Attention(时空注意力)块, 通过查询前几帧中的相关位置来捕获时间一致性.

在这里插入图片描述
Gen-1这篇工作也是面向视频编辑. 两点是它采用了比较新颖的先验信息, 即内容 c \mathbf{c} c和结构 s \mathbf{s} s. 内容表示一个视频的外观和语义, 例如可以用CLIP来encode一个frame得到语义. 结构表示一个视频的纹理或者一些动态的东西, 例如形状, 位置, 目标的变化等等, 例如深度, 或者human pose都可以作为结构信息.

在image diffusion的基础上, Gen-1就是通过增加1D卷积层来拓展时间维信息的. 在训练和推理阶段, 结构信息被concat到加噪完成的latent z t \mathbf{z}_t zt后面, 而语义信息是作为交叉注意力的一部分在去噪过程中融合信息.

在这里插入图片描述
**Stable Video Diffusion (SVD)**是通过在latent diffusion model中每一个空间卷积层的后面都添加时间卷积层来实现视频生成. SVD在数据清洗上做了比较多的工作, 包括借助外部的CoCa, LLM等等对质量不高的帧进行去除.

**space-time UNet (STUNet)**则是更加关注于高质量的时间连续性. 为此, 它希望一口气生成整个时长的视频, 而不是还要多次执行时间超分模块(TSR). 所以STUNet直接对时空都进行下采样, 这样昂贵的计算就可以发生在紧凑的时空latent space中.

STUNet 对预训练的T2I的UNet进行膨胀, 以便能够在时间和空间维度上对视频进行下采样和上采样. 卷积块由预先训练的文本到图像层组成, 然后是分开的时空卷积. 在down sample最大的 级别, 基于注意力的块包含预先训练的文本到图像, 然后是时间注意力. 训练时仅对新添加的层进行微调.

在这里插入图片描述

2.2 Training-free的方法

怎么能做到不再微调直接生成视频? 这就必须要考虑如何让帧间的信息互通了, 或者作为约束. 例如, Text2Video-Zero设计了两个关键的机制:

  1. 在采样的时候, 加入一些运动先验, 也即加入一个向量用以模拟相机的运动方向;
  2. 采用跨帧注意力机制, 计算每一帧相对第一帧的注意力, 来维持上下文, 外观和目标.

整个流程图如下:

在这里插入图片描述
此外, ControlVideo在ControlNet的基础上, 做了以下三点改进:

  1. 基于文本描述 和运动序列, 例如depth map的动态序列
  2. 跨帧注意力: 是所有帧之间都计算, 不是和第一帧计算
  3. 采用了交错帧平滑以减少闪烁效果的机制. 在每个时间步 t 处, 平滑器会对偶数帧或奇数帧进行插值, 以平滑其对应的三帧剪辑
  4. 利用分层采样器在内存限制下启用具有时间一致性的长视频. 长视频被拆分为多个短剪辑, 每个短剪辑都选中了一个关键帧. 该模型预先生成这些关键帧, 并采用完全的跨帧注意力以实现长期连贯性, 并且每个相应的短剪辑都是以关键帧为条件按顺序合成的
    在这里插入图片描述

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

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

相关文章

涉密载体管控系统DW-S402|实现载体全寿命管控

为加强涉密载体使用管控&#xff0c;按照预防为主&#xff0c;强化监督&#xff0c;在满足各级保密规定前提下&#xff0c;方便涉密载体的使用和管理&#xff0c;确保涉密载体保密安全。 现有涉密载体使用过程中&#xff0c;存在手工登记台账耗工耗时、领用情况不直观、违规带…

史上最全Android UI界面设计尺寸!点击收藏

作为一名 UI 设计师&#xff0c;在进行 Android UI 设计之前&#xff0c;首先需要明确 Android 系统与 iOS 系统之间的主要区别。Android 系统是开源的&#xff0c;而 iOS 系统则是不开源的。虽然 Android 系统的开源特性对于交互设计师是有益的&#xff0c;但它也带来了一些挑…

白立新谈命运三重奏:《黑神话:悟空》中的人生思考

文 | 头部财经首席评论员白立新 发布 | 头部财经 top168.com 导语&#xff1a;《黑神话&#xff1a;悟空》中三个悟空形象演绎命运三种属性。老者悟空象征确定性&#xff0c;历经沧桑&#xff0c;蕴含世界法则&#xff1b;玩家操作悟空代表能动性&#xff0c;承载玩家意志影响…

seaborn:一个超炫的数据可视化Python库

我是东哥&#xff0c;专注于分享Python技术的自媒体人。今天&#xff0c;我将带你深入了解一个非常有趣的Python库——Seaborn。无论你是刚入门的Python小白&#xff0c;还是希望提升数据可视化技能的技术小白&#xff0c;相信这篇文章都会对你有所帮助。 项目地址&#xff1a…

数学符号-西格玛

西格玛”是希腊字母&#xff0c;也有念作“西玛”“希玛”等各种读法&#xff0c;符号是∑,英文译音是Sigma, 表示数学中的求和号&#xff0c;是数学中常用的符号&#xff0c;主要用于求多项数的和&#xff0c;用∑表示 ∑下面的小字,如i1表示从i1开始求和 上面的小字&#xf…

【网络世界】网络层

目录 &#x1f308;前言&#x1f308; &#x1f4c1; 网络层 &#x1f4c1; IPV4 &#x1f4c2; 什么是IP地址 &#x1f4c2; 网段划分 &#x1f4c2; 特殊IP &#x1f4c2; 内网和公网 &#x1f4c2; IPV4的危机 &#x1f4c1; IP协议格式 &#x1f4c1; 路由 &#x1f…

【工具篇】高效记忆方法之AnKi工具

&#x1f60a;你好&#xff0c;我是南极。正在变强的路上不断地努力着&#x1f4aa; &#x1f514;今天和大家分享一些记忆的方法&#xff0c;以及推荐了一款用于复习和巩固知识的软件AnKi。 对我们程序员而言&#xff0c;平常学习的东西会比较多&#xff0c;有时呢学的东西会…

气势向前,豪华向上 全新BMW X3长轴距版全球首发,更大体量、更高价值、更多驾趣

X家族的中流砥柱&#xff0c;豪华中型SAV的引领者现代极简主义&#xff0c;原石切割般的型面&#xff0c;塑造纯粹的BMW X辨识度“以驾驶员为中心”和“以简释繁”&#xff0c;打造“中国专属”的精致豪华空间创新不止&#xff0c;驾趣依旧&#xff0c;探索未知的忠实伙伴 &…

Django+Vue二手交易平台的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质创作者&…

钉钉好用吗?类似钉钉的内部知识库有哪些?

在数字化转型的浪潮中&#xff0c;企业对于高效、便捷的知识管理工具需求日益增长。 在企业管理领域&#xff0c;虽然钉钉作为一款功能全面的企业级即时通讯与协作平台&#xff0c;以其强大的知识管理功能受到了广泛认可&#xff0c;但市场上仍有许多其他优秀的知识管理工具可…

《苍穹外卖》电商实战项目(java)知识点整理(P1~P65)【上】

史上最完整的《苍穹外卖》项目实操笔记&#xff0c;跟视频的每一P对应&#xff0c;全系列10万字&#xff0c;涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳&#xff0c;参考这篇&#xff0c;相信会带给你极大启发。 《苍穹外卖》项目实操笔记【中】&#xff1a;P66~P…

phpstorm远程连接阿里云项目

1.安全组 打开端口3306&#xff0c;22 一、.远程连接mysql 1.1新建一个远程连接的用户&#xff08;root用户默认不能远程&#xff0c;不用修改&#xff09; -- 登录到MySQL mysql -u root -p -- 授权远程用户 GRANT ALL PRIVILEGES ON *.* TO 远程用户名% IDENTIFIED BY 远…

ffmpeg视频转切片m3u8并加密videojs播放hls.js播放dplayer播放(弹幕效果)

文章目录 学习链接步骤安装openssl生成一个enc.key文件生成加密串创建enc.keyinfo文件视频切分m3u8文件 web前端查看m3u8视频后台返回enc.key的接口videojs播放m3u8视频 其它videojs切换播放视频hls.js切换播放视频dplayer切换播放视频(弹幕) 学习链接 Java实现视频加密及播放…

redis主从同步

redis 相比于memcached可以永久缓存。 首先停掉mysql源码安装redis 1. 安装redis cd /root/redis-6.2.4 make # 直接make&#xff0c;里面已经配置过了 make install# 安装 cd utils/ ./install_server.sh需要在文件里面注释掉&#xff0c;systemd判断语句 vim install_s…

【GPT】Coze使用开放平台接口-【2】创建工作流-语音伪造检测工作流

在Coze使用开放平台接口-【1】创建插件&#xff0c;我们已经成功创建了开放平台的插件&#xff0c;也创建了对应的工具。本文档就根据创建好的插件&#xff0c;来创建对应的工作流&#xff0c;来让接口能够用起来。 下面直接用现成的插件快商通AI开放平台&#xff0c;来创建语音…

202408830使用python3给BGR3的裸图加上BMP图的文件头

202408830使用python3给BGR3的裸图加上文件头 2024/8/30 20:20 缘起&#xff0c;获取SONY索尼的8530的机芯的4K的BGR3的裸图。可以使用7-yuv打开了。 如果直接可以给这张YUV图加上BMP格式的文件头&#xff0c;就可以直接使用标准的图像处理软件/ACDSee5.0打开了&#xff01; 这…

RISC-V单片机智能落地扇方案

在众多产品中&#xff0c;智能落地扇产品凭借其出色的性能和质量优势&#xff0c;备受消费者青睐。智能落地扇有着卓越的性能和智能化的操作。 RAMSUN提供的智能落地扇方案主控单片机芯片采用RISC-V微处理器&#xff0c;内置高速存储器&#xff0c;最高工作频率可达144MHz&…

【智能算法改进】多策略融合的改进黑猩猩搜索算法及其应用

目录 1.算法原理2.改进点3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】黑猩猩优化算法&#xff08;ChOA&#xff09;原理及实现 2.改进点 改进的 Sine 混沌映射初始化种群 ChoA 种群随机初始化的方法导致种群多样性、均匀性差、容易出现边界聚集现象&#xff0c…

E30.【C语言】练习:sizeof和strlen的习题集(B)

Exercise 4:sizeof 字符串 求下列代码打印结果 #define CRT_NO_WARNINGNESS 1 #include <stdio.h> #include <string.h> int main() {char arr[] "abcdef";printf("%zd\n", sizeof(arr));printf("%zd\n", sizeof(arr 0));printf…

gitee 简单使用

目录 1. github 介绍 2. gitee 介绍 2.1 下载工具 2.2 创建仓库 2.3 clone 远程仓库到本地 2.4 上传代码 2.4.1 add:预添加到本地仓库 2.4.2 commit:提交代码到仓库 2.4.3 push:推送添加操作到远程仓库 3. 问题解决 3.1 文件推送成功&#xff0c;gitee没有绿点 3.2…