基于Difussion图像、视频生成综述

news2024/11/16 20:30:03

2024年大年初七(02.16)OpenAI 发布视频生成模型 Sora 在各大平台转疯了,和2022年发布ChatGPT3.5时一样的疯狂。在开工第一天,我就去官网上看了 Sora 的技术报告,遗憾的是,在这份技术报告中只披露了一些模型思想和效果展示,对于算法细节介绍的不多。一些大佬对此做了一些解读,提到最多的是 DiT (Scalable Diffusion Models with Transformers)这篇论文。直接讲 DiT 没有相关的知识铺垫难免有点像论文解读,为此本篇博文从Diffusion说起,梳理近几年来图像、视频生成相关的进展。对于理解不准确或者有误的地方,还需要多多交流讨论。

一、开山鼻祖(Diffusion)

随着深度学习的发展,图像生成一直是AI相关领域的研究热点,例如 GAN、VAE 等模型。2020年Jonathan Ho等人提出 DDPM 算法(Denoising Diffusion Probabilistic Models),这是一种基于扩散模型的图像生成算法。所谓的扩散,可以简单的理解为物体从有序到无序,最后到稳定的过程,比如一滴墨水滴入到水中逐渐变成一个均匀分布的水溶液。
红墨水扩散图 https://www.zhihu.com/question/310398434/answer/582993535 那么以此类比,一滴墨水扩散到均匀无序的状态就像是一个图像从清晰变成噪声的过程,就像下图中石原里美姐姐笑容逐渐消失的过程。

石原里美笑容消失假设扩散过程就是马尔可夫过程(可以简单理解为:未来的状态或分布只与当前的状态有关,与过去的状态无关),扩散过程的逆过程符合高斯分布。从石原里美小姐姐笑容消失这个例子中理解就是,左起第三张图的状态只与第二张图有关,与第一张图有关
在DDPM这篇论文中,将扩散过程分成两个部分,一个是前向过程,一个是反向过程。前向过程就是图像加噪的过程(下图中从右往左)反向过程就是去噪的过程(下图中从左到右)。
前向过程与反向过程

1.1 加噪过程

对于加噪过程的马尔可夫过程如公式(1)所示:
q ( x t ∣ x t − 1 ) = N ( x t ; 1 − β t x t − 1 , β t I ) (1) q(x_t|x_{t-1})=N(x_t;\sqrt{1-β_t}x_{t-1},β_tI) \tag{1} q(xtxt1)=N(xt;1βt xt1,βtI)(1)
其中 1 − β t \sqrt{1-β_t} 1βt 表示 t 时刻下的样本权重, β t β_t βt表示噪声的权重(正态分布)。用 z z z表示噪声,服从正态分布,将 α t = 1 − β t α_t=1-β_t αt=1βt α t ˉ = ∏ i = 1 T α i \bar{α_t}=\prod_{i=1}^Tα_i αtˉ=i=1Tαi带入计算,可得:
x t = α t x t − 1 + 1 − α t z t − 1 = α t α t − 1 x t − 2 + 1 − α t α t − 1 z ˉ t − 2 = . . . = a ˉ t x 0 + 1 − α ˉ t z \begin{align} x_t &=\sqrt{α_t}x_{t-1}+\sqrt{1-α_t}z_{t-1} \tag{2} \\ &=\sqrt{α_tα_{t-1}}x_{t-2}+\sqrt{1-α_tα_{t-1}}\bar z_{t-2} \tag{3} \\ &=...=\sqrt{\bar a_t}x_0+\sqrt{1-\bar α_t}z \tag{4} \end{align} xt=αt xt1+1αt zt1=αtαt1 xt2+1αtαt1 zˉt2=...=aˉt x0+1αˉt z(2)(3)(4)
从这样的推理来看, x t x_t xt可以由 x 0 x_0 x0和噪声得到,即:
q ( x t ∣ x 0 ) = N ( x t ; a ˉ t x 0 , ( 1 − α ˉ t ) I ) (5) q(x_t|x_0)=N(x_t;\sqrt{\bar a_t}x_0,(1-\bar α_t)I) \tag{5} q(xtx0)=N(xt;aˉt x0,(1αˉt)I)(5)
其中上式(3)中的 z ˉ t − 2 \bar z_{t-2} zˉt2 是什么呢?其实是 z t − 1 , z t − 2 z_{t-1},z_{t-2} zt1,zt2的加权求和,两个独立的正态分布相加之后还是一个正态分布。公式里面为了简化表示成一个正态分布了。
那么这一大推公式推导的目的是什么? 加噪的过程可以看成是马尔可夫过程,当前状态都取决于上一步的状态,现在推导发现,从 x 0 x_0 x0可以直接计算出来 x t x_t xt,这样就简单很多了呀!想象一下,石原姐姐的微笑,你一次就能让她消失,是不是会惊喜! 不用按照马尔可夫过程训练一个样本要迭代 T T T 次。

1.2 去噪过程

去噪过程也就是从噪声中恢复数据,这个过程要比加噪声复杂很多。在加噪声的时候,我们已知t-1时刻的图像,已知噪声分布,那么加上一个噪声的权重就可以得到加噪之后 t 时刻的图像; 反过来的话,我们只知道 t 时刻加噪之后的图像,不知道 t − 1 t-1 t1 时刻的原图和 t − 1 t-1 t1 时刻增加的噪声,这样就比较难搞了。 或许可以学习一个网络模型 f f f 用来预测增加的噪声,即 z t − 1 = f ( x t ) z_{t-1}=f(x_t) zt1=f(xt) 【默认 x t x_t xt= α t x t − 1 + 1 − α t z t − 1 \sqrt{\alpha_t}x_{t-1} + \sqrt{1-\alpha_t}z_{t-1} αt xt1+1αt zt1】,但是这样训练过程会非常复杂。想象一下:对于一个样本,需要迭代 t 个时间步,每迭代一个时间步都需要把 t-1 时刻的图像、 t-1 时刻添加的噪声以及 t 时刻的结果记录下来,然后拿过来去训练模型预测噪声。这样模型训练时需要先扩散到 t 时间步,然后训练一次 t-1 时间步,复杂度会非常高,如果 T 比较大更是增加了训练的难度。有人问了,上一节中推导可以直接从 x 0 x_0 x0 得到 x t x_t xt, 那么有没有什么方法可以从 x t x_t xt 得到 x t − 1 x_{t-1} xt1 呢? 也就是求解 x t − 1 = h ( x t , x 0 ) x_{t-1}=h(x_t,x_0) xt1=h(xt,x0), 即求 q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0),其实是可以的。注意:这里把 x 0 x_0 x0 当做已知变量,为什么已知呢?因为它就是原图呀。

t-1时刻的数据可以表示为与上面的推导类似 [2],即:
q ( x t − 1 ∣ x t , x 0 ) = q ( x t − 1 , x t , x 0 ) q ( x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 , x 0 ) q ( x t , x 0 ) = q ( x t ∣ x t − 1 , x 0 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) = q ( x t ∣ x t − 1 ) q ( x t − 1 ∣ x 0 ) q ( x t ∣ x 0 ) \begin{align} q(x_{t-1}|x_t,x_0)&=\frac{q(x_{t-1},x_t,x_0)}{q(x_t,x_0)} \tag{6} \\ &=\frac{q(x_t|x_{t-1},x_0)q(x_{t-1},x_0)}{q(x_t,x_0)} \tag{7} \\ &=\frac{q(x_t|x_{t-1},x_0)q(x_{t-1}|x_0)}{q(x_t|x_0)} \tag{8} \\ &=\frac{q(x_t|x_{t-1})q(x_{t-1}|x_0)}{q(x_t|x_0)} \tag{9} \end{align} q(xt1xt,x0)=q(xt,x0)q(xt1,xt,x0)=q(xt,x0)q(xtxt1,x0)q(xt1,x0)=q(xtx0)q(xtxt1,x0)q(xt1x0)=q(xtx0)q(xtxt1)q(xt1x0)(6)(7)(8)(9)
其中 q ( x t − 1 ∣ x 0 ) q(x_{t-1}|x_0) q(xt1x0)就是公式(1)的扩散过程, q ( x t ∣ x 0 ) q(x_t|x_0) q(xtx0)就是公式(5), 带入一通操作(我也没有算明白,哈哈哈 ),对于 t 时刻:
q ( x t − 1 ∣ x t , x 0 ) = N ( x t − 1 ; μ ~ ( x t , x 0 ) , β ~ t I ) (10) q(x_{t-1}|x_t, x_0)=N(x_{t-1};\tilde \mu(x_t,x_0),\tilde \beta_{t}I)\tag{10} q(xt1xt,x0)=N(xt1;μ~(xt,x0),β~tI)(10)
其中:
β ~ t = 1 − α ˉ t − 1 1 − α ˉ t β t , μ ~ t ( x t , x 0 ) = α ˉ t − 1 β t 1 − α ˉ t x 0 + α t ( 1 − α ˉ t − 1 ) 1 − α ˉ t x t (11) \tilde \beta_t=\frac{1-\bar \alpha_{t-1}}{1-\bar \alpha_t} \beta_t ,\tilde \mu_t(x_t,x_0)=\frac{\sqrt{\bar \alpha_{t-1}\beta_t}}{1-\bar\alpha_t}x_0+\frac{\sqrt{\alpha_t}(1-\bar\alpha_{t-1})}{1-\bar\alpha_t}x_t\tag{11} β~t=1αˉt1αˉt1βt,μ~t(xt,x0)=1αˉtαˉt1βt x0+1αˉtαt (1αˉt1)xt(11)
从公式(4)可以得到:
x 0 = 1 α ˉ t ( x t − 1 − α ˉ t z ) (12) x_0=\frac{1}{\sqrt{\bar\alpha_t}}(x_t-\sqrt{1-\bar\alpha_t}z)\tag{12} x0=αˉt 1(xt1αˉt z)(12)
μ ~ t ( x t , t ) = 1 α t ( x t − β t 1 − α ˉ t z ˉ t ) (13) \tilde\mu_t(x_t,t)=\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{\beta_t}{\sqrt{1-\bar\alpha_t}}\bar z_t)\tag{13} μ~t(xt,t)=αt 1(xt1αˉt βtzˉt)(13)
到了这里局势明朗了, q ( x t − 1 ∣ x t , x 0 ) q(x_{t-1}|x_t,x_0) q(xt1xt,x0)可以直接由 x t x_t xt 和 后面的噪声 z z z 决定了。那么反向扩散的推理就有了:
x t − 1 = u ~ t + β ~ t z t = 1 α t ( x t − 1 − α t 1 − α ˉ t z ˉ t ) + 1 − α ˉ t − 1 1 − α ˉ t β t z t ( x t , t ) \begin{align} x_{t-1}&=\tilde u_t+\tilde \beta_tz_t \tag{14} \\ &=\frac{1}{\sqrt{\alpha_t}}(x_t-\frac{1-\alpha_t}{\sqrt{1-\bar\alpha_t}}\bar z_t) + \frac{1-\bar \alpha_{t-1}}{1-\bar \alpha_t}\beta_tz_t(x_t,t) \tag{15} \end{align} xt1=u~t+β~tzt=αt 1(xt1αˉt 1αtzˉt)+1αˉt1αˉt1βtzt(xt,t)(14)(15)
好了,说到这里优雅的理论推理就结束了,从这里可以看到当有了 x t x_t xt通过 z ˉ t \bar z_t zˉt就能得到 x t − 1 x_{t-1} xt1了。那么怎么去计算或者估计 z ˉ t \bar z_t zˉt呢,直接用神经网络来预测就好(既然算不出来,就学出来,嗯哼!!)。

1.3 模型的训练与推理

对于模型的训练,简单来说就是对图像进行加噪声,然后通过 UNet去预测的噪声。由公式(4-5)中推理证明了,时间 t 时刻的样本可以通过一次加噪实现,然后模型去预测这个噪声(如下图左图)。采样过程就是输入一个正态分布的噪声,然后迭代 T T T次,逐步预测 x t , x t − 1 , x t − 2 , . . . , x 1 , x 0 x_t,x_{t-1},x_{t-2},...,x_1,x_0 xt,xt1,xt2,...,x1,x0 (如下图右图)。
Denoising Diffusion Probabilistic Models中训练与采样过程

1.3.1 预测噪声?预测 x 0 x_0 x0?

论文中提出的方法是预测噪声,那么有人问了,预测噪声这么抽象,能不能直接预测 x 0 x_0 x0 呢?其实也是可以的,论文的源码里面实现是预测的噪声(DDPM源码中通过噪声预测原图代码)。pytorch版本里面实现可以直接预测 x 0 x_0 x0 (链接),还有预测 v v v (链接)。
对于预测噪声或者 x 0 x_0 x0有什么区别呢?
(1)如果预测噪声,对于一个batch中采样不同的时间步,损失优化时会平等对待;
(2)如果预测 x 0 x_0 x0,由于时间步的关系,不同的时间步下噪声的权重不同,相当于时间步越大,权重越大。

1.4 模型分析

从训练过来看,就是预测一个图像中的噪声,然后把噪声恢复出来(或者恢复出清晰度更高的图);采样的过程就是一步步从带有噪声的图像中恢复原图。那么能不能直接从噪声中恢复出原图呢(这里是不是类似于VAE中的Decoder)?理论上应该可行。猜测通过这样一步步的恢复,效果可能会比较好,另外也降低了模型学习的难度。

二、崭露头角(LDM)

Diffusion 中提出使用UNet 预测噪声的方式来实现图像生成,在图像生成中需要迭代 T T T 个时间步。由于每次迭代都需要过一遍 UNet 网络,当 T T T比较大时,将会非常耗时;另外,Diffusion 无法控制生成的图像,只能随机生成。LDM (High-Resolution Image Synthesis with Latent Diffusion Models)从两个方面解决这些问题:
(1)通过编码器、解码器将图像降维到更低的尺度(下图中左边红色区域),然后再基于扩散模型进行训练(下图中中间绿色区域);
(2)增加条件控制模块(下图中右边模块),可以将图像、文本等特征注入到 UNet 中,指导图像生成。
LDM模型结构

2.1 图像编码

对于图像编码部分,将使用 E \Epsilon E作为编码器, D D D 作为解码器,有:
x ~ = D ( z ) = D ( E ( x ) ) (16) \tilde x=D(z)=D(\Epsilon(x)) \tag{16} x~=D(z)=D(E(x))(16)
其中 x ∈ R H ∗ W ∗ 3 , z ∈ R h ∗ w ∗ c x∈R^{H*W*3},z∈R^{h*w*c} xRHW3,zRhwc, 下采样的倍数为 2 的次方。论文中提到两种视频编码模块,一种的VQ-GAN,一种是 KL

未完待续~

参考文献(相关论文的引用直接在正文中贴上了论文名称及链接,可以直接点击跳转):
[1] https://zhuanlan.zhihu.com/p/563543020 (前面讲的关于GAN、VAE等模型的对比讲的好)
[2] https://zhuanlan.zhihu.com/p/663880249 (反向过程中问题说明讲的好)

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

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

相关文章

文库配置异步转换(宝塔)| 魔众文库系统

执行以下操作前提前进入网站根目录,如 cd /www/wwwroot/example.com执行 artisan 命令前请参照 开发教程 → 开发使用常见问题 → 如何运行 /www/server/php/xxx/bin/php artisan xxx 命令 步骤1,生成数据库队列表迁移文件 在执行该步骤前,请…

记一次农业工程学报投稿流程与感悟

经过数段时间的实验与熬夜,终于得出一个比较满意的结果,本想着第一篇先随便发一个试试投稿流程,但是经过老师修改后非让投农业工程学报,然后在网上查了一些信息后有点害怕,大致都是在说周期长,审稿慢等等 …

GPT-4、PaLM-2等AI模型对黑人or女性存在偏见?丨AI偏见的案例和应对

生成式 AI(Generative AI)以其卓越的能力在模仿和理解人类智能方面不断突破界限,展现出令人瞩目的潜力。但与此同时,AI 系统在提供这些创新服务的过程中,有时也会暴露出一些问题,尤其是在文化和种族方面的偏…

基于java+SpringBoot+Vue的房屋租赁系统设计与实现

基于javaSpringBootVue的房屋租赁系统设计与实现 开发语言: Java 数据库: MySQL技术: Spring Boot JSP工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 房源浏览模块:展示可租赁的房源信息,用户可以根据条件筛选房源。 预约看房模块&#…

docker 安装redis报错:can not init background jbos

启动redis,发现一直再重启 docker run -d --name redis -p 6379:6379 --restartalways redis:6.2.6 --requirepass "123456" 查看日志,发现job没启动 docker logs 47f6572a779c 尝试了一堆解决办法。。。最后发现尝试安装了redis6.2.6版本&a…

算法第三十九天-验证二叉树的前序序列化

验证二叉树的前序序列化 题目要求 解题思路 方法一:栈 栈的思路是「自底向上」的想法。下面要结合本题是「前序遍历」这个重要特点。 我们知道「前序遍历」是按照「根节点-左子树-右子树」的顺序遍历的,只有当根节点的所有左子树遍历完成之后&#xf…

Linux:进程终止和等待

一、进程终止 main函数的返回值也叫做进程的退出码,一般0表示成功,非零表示失败。我们也可以用不同的数字来表示不同失败的原因。 echo $?//打印最近一次进程执行的退出码 而作为程序猿,我们更需要知道的是错误码所代表的错误信息&#x…

探索7个MAMP本地开发环境的高效替代软件

什么是本地开发环境 本地开发环境是Web开发环境中的一种类型,它是指开发者自己的计算机上配置的一套用于开发和测试网站或应用程序的软件集合。这套环境使得开发者可以在本地计算机上构建和测试网站,而无需实时部署到服务器。 创建本地开发环境有两种方…

Python实现【坦克大战】+源码分享

写在前面: 坦克大战,这款经典的电子游戏,无疑是许多80后和90后心中不可磨灭的童年记忆。它不仅仅是一款游戏,更是那个时代科技娱乐方式的缩影,见证了电子游戏行业的起步与发展。 在那个电脑和网络尚未完全普及的年代…

云备份day04

📟作者主页:慢热的陕西人 🌴专栏链接:C云备份项目 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 主要内容介绍了文件工具了类的实现 文章目录 云备份day041.文件…

00-armv8/armv9中断系列详解-序言

快速链接: 【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 1、序言 带着问题去学习,关于异常/中断的一些思考: (1)、在如下的一个大系统种,cpu正在optee os中运行,突然来了一个想给Linux Kernel处理的中…

JS与Python函数在语法的区别

区别 标题语法:Python使用缩进来表示代码块,而JavaScript使用大括号{}。 Python函数定义: def my_function():# 函数体JavaScript函数定义: function myFunction() {// 函数体 }标题参数传递:Python支持位置参数、…

海外代理IP购买指南:住宅IP代理VS.数据中心代理IP

在选择海外IP代理服务时,您将面临一个关键的问题:是选择住宅代理IP还是数据中心代理IP?这两者之间存在着根本性的不同,涉及到性能、隐私和成本等方面的考虑。住宅代理IP通常来自真实的住宅网络连接,更难被检测到。数据…

【蓝桥杯-读数据】

蓝桥杯-读数据 P8598 [蓝桥杯 2013 省 AB] 错误票据 P8598 [蓝桥杯 2013 省 AB] 错误票据 这道题本身很简单&#xff0c;最大的难点在于读入数据。 #include<bits/stdc.h> using namespace std; #define int long long const int N 2e5 10; int a[N]; signed main()…

Bigtable [OSDI‘06] 论文阅读笔记

原论文&#xff1a;Bigtable: A Distributed Storage System for Structured Data (OSDI’06) 1. Introduction Bigtable 是一种用于管理结构化数据的分布式存储系统&#xff0c;可扩展到非常大的规模&#xff1a;数千台服务器上的数据量可达 PB 级别&#xff0c;同时保证可靠…

如何明确的选择IT方向?

一、明确目标 作为初学者&#xff0c;先树立自己目标&#xff0c;找到自己感兴趣的IT行业&#xff0c;IT行业分很多种&#xff0c;听的最多次的无非不就是web前端工、程序员、后端、大数据、网络运维等。学习知识也是为了找到更好的工作&#xff0c;所以我建议先去boss直聘、五…

xshell7连接ubuntu18.04

&#x1f3a1;导航小助手&#x1f3a1; 1.查看ubuntu IP2.开启openssh-server3.静态IP设置4.Xshell连接 1.查看ubuntu IP 输入下面命令查看IP ifconfig -a可以看到网卡是ens33&#xff0c;IP为192.168.3.180。 2.开启openssh-server 1、执行下句&#xff0c;下载SSH服务 s…

【AI+视频】只要一张图片就能生成跳舞视频的几种方案

今天下班休闲之余刷了会D音&#xff0c; 接连刷到美女跳舞的几个视频。 仔细一看&#xff0c;这些不都是AI制作的么。 前几天写过一篇关于 【AI视频】pixverse一款免费的文生视频、图生视频工具&#xff0c; 这里介绍 图片生成跳舞视频 的 几种方案。 写这个的主要原因&…

PPP-B2b星历下载

目前做PPP-B2b研究比较多&#xff0c;其中PPP-B2b需要北斗的CNAV星历下载链接为&#xff08;例如2024.04.05对应的2024年第097天&#xff09;&#xff1a;数据下载http://www.csno-tarc.cn/datacenter/ephemeris

传道难-授业更难-解惑难上加难

传道授业解惑 困境 工作所在地所遇到的事情&#xff0c;大部分并非缺少知识&#xff0c;也并非缺少努力&#xff0c;从某种角度上来看&#xff0c;其实是资源匮乏。 比如预算经费&#xff1a; 来源网络&#xff0c;需要可以自行查找。 但是很多学校的经费预算都不到两位数&a…