【学习日记week10】LDM,DALL-E2基于扩散模型的生成方式,以及跨模态生成

LDM(Latent Diffusion Model)CVPR2022

在学习文生图之前,还需要学习一下LDM,LDM将图像生成的过程变得更加语义可解释了,并且后续有了基于LDM的生成模型stable diffusion model。比较创新的是,这个工作首次引入了VQ的思想。

摘要与介绍

Diffusion model在图像生成领域取得了很大的成功,但是,扩散模型因为完全是在像素级别进行训练,一个好的DMs需要很大的计算资源来进行训练和推理。本质上还是自回归模型,训练和推理的复杂性都很高。为了解决这个问题,本文的团队提出将DM的训练应用在一个用AE提前训练好的潜在空间中,达到了速度和细节保持的一个平衡点。

Contribution

  1. 本文提出了一种潜在表示空间上进行diffusion的方法,能够计算复杂度,提高训练和推理速度
  2. 相比于其他的空间压缩方法能够有更加细节的生成效果(文章中主要和基于自回归transformer的DALL-E以及基于VQ的VQ-GAN进行了对比实验)
  3. LDM在图像生成,修复,超分辨率上都有不错的效果
  4. 本文海提出了基于cross- attention的多模态训练方法,使其可以应用在文生图,为stable diffusion的提出打下了基础。

方法介绍

整体框架

模型的整体框架如下,因为整个工作的创新点都是基于引入了潜在空间学习的思想,所以需要构建一个autoencoder,即左边的 E \mathcal E E D \mathcal D D,在预训练好的AE框架下,绿色的部份均为潜在空间。潜在空间中,仍然是在做diffusion的操作,但是是对这个潜在空间内的向量做diffusion。简单来说,就是将原本高维空间直接做diffusion的过程,变为先将数据降维压缩,然后在低维空间上进行操作

读的时候的疑问:这样做和autoencoder方法的差别是什么?本身我觉得diffusion model强的地方就是它可以实现精确的像素级生成,如果不用diffusion直接做原本数据的生成而是做低维空间上的生成,难道不会因为autoencoder做的压缩操作导致细节出现损失吗?
这个问题通过学习VQGAN解决了

framework

图像感知压缩

什么是图像感知压缩

之前的扩散模型中,并没有这个部份而是在直接的像素空间上 进行训练,而图像感知压缩就是通过引入类似VAE这种自编码器,来对原本的图像进行处理,忽略高频信息从而进行降维。这也是LDM实现推理的加速的主要原因。(其实看完了主要就是利用了VQ,感知器判定这一部份影响不是特别大)

和VQGAN一样,LDM 也采用了两阶段的训练,先用预训练好图像压缩表示VQGAN(这里有个问题:是否包含Transformer部份?没有这个部份decoder怎么生成高质量图像?)来将其放入潜在空间,然后基于生成任务再训练一个diffusion model。

这里还有一个问题,作者采用的Auto Encoder其实有两种,一种是VQ的方法,一种用的是传统VAE的方法,后者怎么用我暂且还没搞清楚,虽然VAE同样能够降采样(重看一下代码吧!)
原文中作者的说法是一个是KL-regularization,一个是VQ-regularization

LDM

DM

扩散模型上周进行过详细描述和推导,这里直接从目标函数入手。DM的目标函数是利用了噪声和预测噪声之间的MSE损失: L D M = E x , ϵ ∼ N ( 0 , 1 ) , t [ ∥ ϵ − ϵ θ ( x t , t ) ∥ 2 2 ] L_{DM}=\mathbb E_{x,\epsilon\sim\mathcal N(0,1),t}\left[\Vert\epsilon-\epsilon_\theta(x_t,t)\Vert_2^2\right] LDM=Ex,ϵN(0,1),t[ϵϵθ(xt,t)22]
其中,训练时t是随机在1~T之间进行采样的。

在潜在表征上进行生成建模

在训练好的 E \mathcal E E D \mathcal D D的基础上,可以在去掉高频特征的低维潜在空间上进行学习。这样做有两个好处:一是可以关注更加重要的数据的语义性的信息;二是可以更加高效的进行学习。(确实,如果去掉一些对图像本身语义信息无关的高频特征,对于图像显著特征的学习更加有意义。在多模态中,这种压缩方法也可以更好的用于处理高分辨率图像,可以同时有效率和效果的提升!)

和VQGAN,DALLE1不同的是,本文并没有直接依赖于自回归的transformer来在压缩的离散潜在空间中进行输出,而是利用了图像特有的归纳偏置(局部性和平移不变性的特征,用人话讲就是用了卷积神经网络的结构来学习),基本的结构是UNet的结构
L L D M = E E ( x ) , ϵ ∼ N ( 0 , 1 ) , t [ ∥ ϵ − ϵ θ ( z t , t ) ∥ 2 2 ] L_{LDM}=\mathbb E_{\mathcal E(x),\epsilon\sim\mathcal N(0,1),t}\left[\Vert\epsilon-\epsilon_\theta(z_t,t)\Vert_2^2\right] LLDM=EE(x),ϵN(0,1),t[ϵϵθ(zt,t)22]
在这里 ϵ θ \epsilon_\theta ϵθ是基于时间条件的UNet。前馈的过程参数是固定的,所以 z t z_t zt可以直接通过 E \mathcal E E得到,然后从 p ( z ) p(z) p(z)的采样结果会直接通过 D \mathcal D D进行解码。

条件机制

生成任务不仅仅需要讨论如何进行好的生成,条件生成更是重要的任务。也就是说生成需要基于label, p ( z ∣ y ) p(z|y) p(zy),实现起来的方法就是再加一个label embedding,实现一个 ϵ θ ( z t , t , y ) \epsilon_\theta(z_t,t,y) ϵθ(zt,t,y)

具体实现的方法,本文在训练条件生成的UNet骨干网络中加入了cross attention机制:
CA
其中 φ i ( z t ) ∈ R N × d ϵ i φ_i(z_t)\in\mathbb R^{N\times d_\epsilon^i} φi(zt)RN×dϵi是UNet中间层输出的展平表示.
最终有
L L D M = E E ( x ) , ϵ ∼ N ( 0 , 1 ) , t [ ∥ ϵ − ϵ θ ( z t , t , y ) ∥ 2 2 ] L_{LDM}=\mathbb E_{\mathcal E(x),\epsilon\sim\mathcal N(0,1),t}\left[\Vert\epsilon-\epsilon_\theta(z_t,t,y)\Vert_2^2\right] LLDM=EE(x),ϵN(0,1),t[ϵϵθ(zt,t,y)22]

DALL-E 2(文章:Hierarchical Text-Conditional Image Generation with CLIP Latents)

DALL-E 2是在VQGAN和LDM之前提出来的,但是因为这是一个主要面向多模态文生图的工作,而虽然我最近一直在看生成模型的内容,但是最终还是要为多模态服务,所以本周的第二个论文阅读就选择做dalle2的相关工作。

DALL-E 2的产生背景是基于CLIP以及diffusion model的,具体来讲,用的是ddim的扩散模型+CLIP(不是预训练,当然openai训练个自己任务特定的CLIP也是轻轻松松了)。训练的过程是两阶段的,第一阶段是学习一个先验,基于文本生成一个图像的embedding;第二阶段,利用扩散模型学习一个基于embedding生成图像的decoder。比较有意思的是,本工作在最小程度牺牲图像的逼真度和文本语义相似性的条件下提高图像的多样性,这也使得Dalle2可以生成保持语义和风格的变体。

基本架构

训练模式
这不仅是结构的基本架构,也是训练的基本结构:

  1. CLIP的训练:训练一个文本编码器,利用对比学习损失直接训练,用于学习一个语义能够对齐的文本编码
  2. 图像生成模型的训练:基于文本的编码,利用一个prior模型,将文本embedding转化为图像编码,然后再通过一个decoder来生成图像。

方法描述

用公式来描述,首先训练的时候有多模态输入 ( x , y ) (x,y) (x,y),其中x代表图像,y代表图像描述。经过CLIP产生的各自的embedding有 z i , z t z_i,z_t zi,zt(图文嵌入)。这样的话,条件生成的学习过程可以表示为两部分:

  1. 学习一个先验 P ( z i ∣ y ) P(z_i|y) P(ziy),基于条件y去用CLIP生成一个 z i z_i zi
  2. 学习一个docoder P ( x ∣ z i , y ) P(x|z_i,y) P(xzi,y),基于embedding,以及(optional的)y的条件进行对图片嵌入的解码
    和到一起就有
    P ( x ∣ y ) = p ( x , z i ∣ y ) = P ( x ∣ z i , y ) P ( z i ∣ y ) P(x|y)=p(x,z_i|y)=P(x|z_i,y)P(z_i|y) P(xy)=p(x,ziy)=P(xzi,y)P(ziy)(第一个等式成立,因为 z i z_i zi x x x决定的)

decoder

解码器部份采用的是一个GLIDE的变体,这里稍微讲一下GLIDE:

GLIDE:classifier guidance

这里会审视一下扩散模型的发展过程(在提点方面,速度方面可以参考ddim和ldm这些工作)更详细的可以参考这篇文章:
https://zhuanlan.zhihu.com/p/449284962
这是在扩散模型提升的过程中提出来的,为了让扩散模型效果变好,提出了classifier guided diffusion,通过一个classifier来帮助模型的训练:在训练的过程中,增加了一个新的分类器。这个分类器通过对 x t x_t xt输入进行分类,计算梯度后,利用梯度进行引导学习。经过了classifier guidance,扩散模型效果高于了GAN。之后guided diffusion就开始发展,于是提出了基于CLIP的guidance,基于图文综合的guidance等等,提出采用引导函数,对生成的图进行一个学习的引导。

注意:在这种guidance下,不需要classifier的梯度和扩散模型一起训练,而是两个独立的模块,扩散模型先进性训练(训练出图像分布)后,再学习一个classifier(单独训练的分类器),在生成的时候,同时基于扩散模型和classifier来进行推理。

简单的从分布的角度来看,可以表示为
μ ^ θ ( x t ∣ y ) = μ θ ( x t ∣ y ) + s ⋅ Σ θ ( x t ∣ y ) ∇ x t log ⁡ p ϕ ( y ∣ x t ) \hat\mu_\theta(x_t|y)=\mu_\theta(x_t|y)+s\cdot\Sigma_\theta(x_t|y)\nabla_{x_t}\log p_\phi(y|x_t) μ^θ(xty)=μθ(xty)+sΣθ(xty)xtlogpϕ(yxt)

其中 μ , Σ \mu, \Sigma μ,Σ是均值和方差, θ , ϕ \theta,\phi θ,ϕ是参数, s s s是一个常数,具体的计算过程如下(图源b站up:mardinff的组会记录视频https://www.bilibili.com/video/BV1MP4y1R7DJ,侵删)
guidance 推导
采样过程综合有:
sampling

GLIDE:classifier-free guidance

前面的引导如引导函数等,都是建立在一个分类器上的,利用分类器的中间层特征图构建的损失梯度以及分类结果损失梯度来做引导来进行学习。但是这种方法有两个问题,一是训练成本因为需要分类器变高了(需要训练单独的分类器),二是分类器如果有偏差会导致结果出现大问题,三是很容易通过分类器网络进行对抗攻击。

GLIDE其实是classifier-free guidance的一个效果比较好的实现(本身数学理论推导方面没有什么创新),这里直接讲classifer-free guidance以及粗略讲一下GLIDE的实现。首先classifier-free guidance中,直接通过一个既可以接受有条件又可以接受无条件的骨干网络UNet,来生成噪声。基本的想法是直接将原本的guidance变成一个和t一样的embedding,然后融合到UNet网络架构中,生成的噪声图的修改如下,其中 ∅ \empty 代表无条件,而 s s s是一个超参数,表示引导的程度。
在这里插入图片描述
这里直接从噪声的层面来实现了这个引导,公式的推导如下
GLIDE公式推导
embedding的生成不细讲,跟timestep的embedding有些类似,但是对于文本模态的embedding,cls的embedding和timestep的类似,而其余位置上的嵌入,则是将其加到了attention模块中,这里不讲具体实现。

GLIDE可以结合DDPM一起用,相当于一个DDPM的拓展,也可以配合DDIM来用。回到DALLE2,DALLE2用的就是利用CLIP的guidance,放在了GLIDE里,至于高分辨率图像生成,采用的是超分辨率的模型来进行生成(不细看了)

prior

prior其实就是在特征空间下的一个生成,可以通过扩散模型或者自回归模型进行训练。但文章这部份讲的特别特别的乱,基本上能说的就只有目标函数不需要再在噪声层面来写了,因为是特征到特征的生成,所以目标函数直接用生成的特征来和目标的特征算MSE就行(注意一下由于有guidance,所以 f θ f_\theta fθ中是包含了文本模态的特征的)
在这里插入图片描述

扩散模型结语

其实如果直接在这个赛道上的模型架构上卷,意义并不是特别大,到后期基本上就是开始堆方法堆算力然后不断迭代。openai这几个工作都有种力大砖飞的感觉。学了这么一段时间感觉比较有意思的是VQGAN的降维思想和应用,即LDM的工作,LDM中的latent space是很灵活的,可以根据不同的做法,来实现不同需求的生成模型。上周师兄给我分享了CVPR23的一个基于巨量的多任务图像数据集进行序列化训练出来的大视觉模型LVM,就是VQGAN的一个很好的应用,因为师兄讲过了这里只写一下title是《Sequential Modeling Enables Scalable Learning for Large Vision Models》。


有趣,强有力,会跟进一些,但不会死磕这个了,下周开始回归跨模态检索的调研(最近哈希的工作有些新的),以及视觉推理和视频推理的一些初步调研了。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值