当前位置: 首页 > article >正文

WeThinkIn | 从图像到视频:浅谈Video Diffusion Models背后的底层原理

本文来源公众号“WeThinkIn”,仅用于学术分享,侵权删,干货满满。

原文链接:从图像到视频:浅谈Video Diffusion Models背后的底层原理

写在前面

Rocky最新发布Stable Diffusion 3和FLUX.1系列模型的深入浅出全维度解析文章,点击链接直达干货知识:https://zhuanlan.zhihu.com/p/684068402。

前言

最近一段时间恰好在推进手上的一个做视频生成相关的课‍‍题,也是对视频扩散模型(Video Diffusion Models)这一领域有了颇多认识。其中,视频扩散模型的很多设计都还要从图像扩散模型的时代讲起。作为一个见证Stable Diffusion诞生,到入行可控图像生成领域,到产出自己第一篇diffusion model相关的工作,再到目前产出第二个diffusion相关的视频工作的在读博士生,某种程度上可以说是见证了video diffusion models发展的历程。

说到视频生成这件事,真正让这个话题走进大家的视野的,其实还是今年年初Sora的首次亮相。Sora的亮相带火了两个东西——一个是Diffusion Transformer,另一个则是text-to-video generation这件事。至今时隔Sora亮相已经过去了足足八个月之久,视频生成领域的卷度貌似没有我们想象中的那样夸张。「夸张」这个标准我们可以用2022年到2024年,基于diffusion model的图像生成技术论文来对比,根据我自己的GitHub调研仓库结果显示,2022年相关的文章发表数量是40篇左右,而2023年更是来到了夸张的60篇。那么同样是基于diffusion model,为什么视频生成技术发展会相对于图像慢呢?

GitHub调研仓库详见链接:

文生图(https://github.com/AlonzoLeeeooo/awesome-text-to-image-studies)、

视频生成(https://github.com/AlonzoLeeeooo/awesome-video-generation)、

图像修复(https://github.com/AlonzoLeeeooo/awesome-image-inpainting-studies)

深度学习首要关注的是数据,那么对于视频生成也是同样。视频数据,本质上可以看成是一堆具有时序连续性的图片组成,其数据结构本身让图像跟视频之间存在一种递进关系;同时,「时序连续性」这件事情,决定了视频是比图像更高维的数据——多了一个时间维度

从上面这两点出发,如果我们想直接将图像生成的技术搬到视频领域的话,最直接的办法就是把现在「力大飞砖」的思路用进来。然而,这样的思路很容面临两个问题:一是视频数据很难能找到像LAION这种规模的数据集,在数据上很容易给模型训练造成瓶颈。虽然说现在已经有诸如WebVid-10M、Panda-70M这种million数量级的数据集,但在质量、数量、多样性上恐怕还是难以跟LAION媲美;二是视频数据天然比图像数据多上一个维度,因此在算力需求上的要求只会更高。拿Stable Diffusion举例的话,恐怕128张A100是不够的——但是,从现实的角度上来看,也很难有这样的单位能有能力承载起大于A100张GPU的训练负荷了。

那么既然重头训练不行,很自然的一个想法就是在微调中寻找解决方案。前面说到,视频数据本身跟图像之间存在很强的关系,视频的每一帧都可以看作是一张图像,并且,相邻的视频帧之间是存在时序上的连续性的

这样的数据结构天然为处理视频数据带来了多种思路,比如说一种方法是用3D卷积的方式,处理五维度张量形式的视频数据(B, C, T, H, W) ;另一种方法则是将视频本身看成一个batch的图像,这个batch中的相邻的每两张图都具有时序连续性,这样的数据结构其实跟图像是保持一致的,也就是说它是一个四维度的张量形式(B=T, C, H, W) 。事实上这两种处理方式早在其他的一些视频任务,例如optical flow estimation、VOS等等早起有所普及。

基于第二点的方式,我们很容易就能将视频数据与现有的图像生成网络联系起来。这样一来,微调的起始点也有了,下一步要解决的就是「怎么微调」的问题。

「怎么微调」的问题

聊到微调,就不得不提起Parameter-Efficient Fine-Tuning(PEFT) 这件事。事实上在SD和LLM的发展带动下,PEFT已经成为了目前DL研究者的一个必备技能,而越来越多的工作都开始摈弃传统全参微调的做法,这件事情对于视频生成也不例外。

而PEFT方法中,颇有代表性的主要有两个方法,一个就是大名鼎鼎的Low-RAnk Adaptation(LoRA),这个相信大家都已经是再熟悉不过了;另一个就是adapter。笔者最早接触adapter类方法,还是在2023年的LLaMA-adapter。想法其实很简单,就是在原有的LLaMA中加入少量的Transformer layers(adapters),然后在新数据(例如多模态、instruction数据)上训练,训练过程中仅更新这些adapter层的模型参数。其实无论是LoRA还是adapter的做法,主要思想都是希望模型在微调过程中不会发生「灾难性遗忘」的问题,在保持原有预训练模型参数正常运作的前提下,通过新数据微调的方式将模型适应到新的下游任务上去

LLaMA-Adapter的方法流程图

当然,对于视频生成的方法,主体思想肯定也是类似的——既要能保持原有模型(SD)的生成能力,又要能通过微调让生成模型具备生成「相邻帧之间具有时序连续性」的结果。这样一来,从理论层面上来看,微调视频生成模型很好地解决了视频数据数量、多样性,以及时间维度上引入的问题。下面我们就从一些具体的工作入手,看一下现有的video diffusion models提供的解决方案。

Align Your Latents

Align Your Latents发布于CVPR 2023的《Align your Latents: High-Resolution Video Synthesis with Latent Diffusion Models》(https://arxiv.org/pdf/2304.08818)的一文中,这篇工作主要想做的事情就是基于image diffusion models去做一个视频生成模型。

Align Your Latents的头图

Align Your Latents中提出的Temporal Video Fine-Tuning

具体的做法在Align Your Latents中被命名为Temporal Video Fine-Tuning,而这张图展示的则是Temporal Video Fine-Tuning达到的预期效果。其中,左图中展示的是原来的Image LDM,给定一个batch的生成过程,可以看到模型输出的结果应该是对应text prompt下多个不同的图像,这些图像之间并没有一致性;右图中展示的是经过视频数据微调之后的Video LDM,可以看到微调之后的模型能够生成沿着batch维度具有时序一致性的图片,将这些图片组合成一个视频的不同帧,其实也就是视频。

Align Your Latents中的temporal layers

那么前文说到,Image LDM只具备处理图像(四维张量)的能力,而生成视频我们自然需要模型能够处理视频(五维张量),具体应该怎么做呢? Align Your Latents中的做法则是在原来的U-net结构中引入temporal layers。这里我们可以看到,temporal layers中主要包含两个核心网络层,一个是3D卷积,一个是temporal attention。显然这两者都具备处理五维张量的能力,具体做法是将spatial layer的输出(四维张量)先变形成五维张量的形式,随后输入3D卷积层,再变换回四维张量的形式,与spatial layer的输出做一次线性加权的残差连接;Temporal attention部分则是将batch、height、width三个维度整合成一个维度,然后围绕temporal和channel维度做attention运算,最后再变形回四维张量的形式做残差加权。

值得注意的是,普通的spatial attention是对形状为 [(b t) c (h w)] 的张量做attention运算。

这样一来,通过模型在具有时序一致性的视频数据在微调,更新这些新加入的temporal layer的模型权重,便能够让模型生成通一个batch中具有时序一致性的图片,也就是视频了。很可惜的是Align Your Latents的代码没有开源,但是Temporal Video Fine-Tuning的思路以及temporal layers的设计确实为后续的很多follow-up work带来了很好的启发

Latte

Latte是2024年1月挂在arXiv上的一篇工作,大半年时间已经积攒了59的引用,原文出自《Latte: Latent Diffusion Transformer for Video Generation》。

Latte中提供的几种模型变式

从标题中我们不难看出,Latte想做的其实是video版本的Diffusion Transformer,其网络结构图也是跟Diffusion Transformer长得非常像,(a)和(b)的变式大体上只是spatial和temporal信息处理的先后顺序,(c)则是在(a)的基础上加入了残差连接和layer normalization,(d)则通过多个branch的方式先做attention,再将attention的结果相互融合。

Latte中的patch embedding

另外值得注意的是,Latte中使用的并非SD中的VAE用于视频表征,而是使用了patch embedding的方式进行表征,这一点也是与OpenAI年初放出的Sora不约而同。但由于Latte这篇工作仅在一些经典数据集,例如UCF101、Taichi-HD、FaceForensics、SkyTimelapse上验证了可行性,而并非在文生视频等场景上验证。好在Open-Sora团队参考的是Latte的codebase,感兴趣的朋友可以移步他们官方仓库

Tune-A-Video

Tune-A-Video发表于ICCV 2023,距离今天已经有将近600的引用量,原文出自《Tune-A-Video: One-Shot Tuning of Image Diffusion Models for Text-to-Video Generation》。相信很多人知道Tune-A-Video都是因为这张过目不忘的头图。

Tune-A-Video的头图

玩梗归玩梗,回到文章本身。Tune-A-Video真正意义上让one-shot fine-tuning这件事成为了可能。什么是one-shot fine-tuning呢?顾名思义,就是每个视频训练一个网络权重。总体的思路也就可以从下面这张流程图看出:

Tune-A-Video的流程图

Tune-A-Video的做法是想通过学习一个网络权重,来学习一个视频帧与帧之间的一致性。进而在模型推理的时候,结合DDIM inversion拿到的init latents,通过改变text prompt来实现editing的效果,总体上可以理解为通过一个per-video model weights来实现了motion transfer

Tune-A-Video的微调和推理过程

从上图我们可以看到Tune-A-Video的做法同样是往U-net中加入adapter的方式,让adapter从视频数据的训练中学习到帧间一致性。具体来说,Tune-A-Video提出来一个叫做ST-Attn的注意力模块,从名字不难看出,这里的「ST」指的应该就是「Spatial-Temporal」。

Tune-A-Video中提出的ST-Attn

我们可以从Tune-A-Video的结果看到,edit之后的物体与原视频之间仅仅是语义上的差别,而这个差别则是由text prompt控制的。即使如此,one-shot形式的video fine-tuning需要不少的时间,据笔者亲测,实际每个视频需要大约15分钟左右的时间,所以在efficiency上还有待商榷。但尽管如此,也不影响Tune-A-Video仍然是一个非常棒的工作

AnimateDiff

最后要分享的一篇工作是AnimateDiff,AnimateDiff发表于ICLR 2024,出自《AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning》一文。

AnimateDiff的头图

AnimateDiff的提出,很大程度奠定了text-to-video generation的基础。因为AnimateDiff真正意义上提出了一套具有普适价值的微调范式,换句话说,通过AnimateDiff方式微调出来的diffusion model模型权重,能够像SD那样根据text prompt生成不一样的视频结果

AnimateDiff的微调范式

具体的做法AnimateDiff提出了三个阶段:(1)第一阶段主要是考虑到视频帧与自然图像之间可能存在一定的domain gap,例如motion blur这样的artifacts,因此引入了LoRA去缓和这一问题;(2)第二阶段是AnimateDiff的核心点,做法其实跟前面三篇工作的思路相同,通过插入adapter和视频数据的训练,让模型能够具备处理视频数据的能力,这里AnimateDiff主要采用的是attention-based的adapter形式;(3)第三阶段则是进一步给motion module配置了LoRA权重,让模型在特定模态的视频上做进一步适应。

其他更多关于AnimateDiff的解析,感兴趣的朋友欢迎移步我的往期想法及回答:

  • 初入视频生成领域,一个很直观的想法是,是不是视频生成都依赖于图像生成?毕竟没有图片就没有视频?(https://www.zhihu.com/question/660851573/answer/3553193180)

  • 5min论文速递丨AnimateDiff (https://www.zhihu.com/pin/1809734693031116801)

结语

做了也有将近半年的视频任务,给我的第一感觉就是——很卷,但又没有那么卷。视频数据由于其天然的时序特性,天然就比图像数据有着更多需要考虑的地方,实际上手才发现,很大一部分时间都在研究怎么样才能保证好生成视频的temporal consistency,而不是像以前做图像任务那样,堆参数量堆数据就能搞定很多问题。不过在「力大飞砖」不凑效的大背景下,视频任务也诞生了很多非常elegant的工作,例如TokenFlow、FLATTEN、AnyV2V等等。改天有机会了再专门出一期专题聊聊video editing这件事,今天就先到这儿吧。

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。


http://www.kler.cn/news/364913.html

相关文章:

  • 微信小程序性能优化 ==== 合理使用 setData 纯数据字段
  • 基于springboot企业微信SCRM管理系统源码带本地搭建教程
  • 飞睿智能超宽带UWB音频传输模块,超低延迟数据传输,实时音频声音更纯净
  • Android Audio基础——音频流重采样(十三)
  • 闯关leetcode——206. Reverse Linked List
  • Android Gradle
  • Servlet实现博客系统
  • 谷歌新政来袭!涉及社交、通信、实用工具等类型应用
  • Linux网络安全
  • Markdown流程图的简单使用
  • Footprint Analytics 现已支持 TRON 链上数据分析
  • Markdown语法详解及常见的使用场景
  • 华企盾【运维利器】PowerShell自动磁盘清理脚本代码
  • 地理空间智能与人工智能:开启未来地图的智慧之门
  • 怎么选择独立站SEO效果好的wordpress模板
  • ​灵动微主流家电市场电机解决方案
  • 青少年编程能力等级测评CPA C++ 四级试卷(1)
  • ElasticSearch集群搭建
  • YOLOv11[基础]】热力图可视化实践② | 视频版 | 输入为视频文件
  • 数据结构6——树与二叉树
  • day9:自有服务与防火墙
  • 离线配置安装mysql5.7主从同步数据库配置手册-亲测完美
  • 10月第4周AI资讯
  • 看图识谭教授的概念性错误:曲线Δy=切线dy
  • [每周一更]-(第120期):Lua入门学习指南及示例
  • webView 支持全屏播放