图像生成(2):diffusion vae gan

扩散模型

补充 马尔可夫过程

马尔可夫性:系统的下一个状态S(t+1)仅仅与当前状态S(t)有关,与之前状态无关
N阶马尔可夫过程:每个状态依赖于前N个状态
马尔可夫链X在时刻t的状态分布,可以由在时刻(t−1) 的状态分布以及转移概率分布决定
平稳分布:若干个时间步后收敛于平稳分布
在这里插入图片描述

原理,流程

所有图像生成的共同目标都是maximum likelihood或者minimize一种divergence,其中maximum likelihood等价于minimize KL Divergence。diffusion的优化过程是最小化KL散度(KL Divergence),最原始的gan是最小化js散度(JS Divergence),wgan是最小化Wasserstein距离

前向过程

diffusion的前向过程可以看作马尔可夫过程,就是单纯往一张图像中加高斯噪声,最后的xT是服从高斯分布的。(对于多模态而言,只需要把图像改成中间产物latent,latent由文本经过encoder后的特征+噪声或者图像特征组成,后续就是对latent加噪声,再denoise,足够步数后得到去噪的latent后再送入decoder生成。)
在这里插入图片描述
前向过程中的两个特性:
1、重参数,直接采样是无法反向传播的,需要通过下面的公式,使得采样的过程可微
在这里插入图片描述
2、任意时刻的xt都可以由x0和超参 β \beta β得到。

逆向过程
  1. 每个时间步通过xt和t用网络来预测高斯噪声,随后根据公式计算得到该时间步服从的高斯分布的均值.
  2. 得到方差,DDPM中使用untrained常数(根据 β {\beta} β得到),在GLIDE中则是根据网络预测方差.
  3. 根据公式得到q(xt-1|xt),利用重参数得到xt-1.
    (https://zhuanlan.zhihu.com/p/525106459)

ps:对于多模态而言的逆向过程,大部分都一样,只不过多增加了文本向量的输入以及去噪的不是图像是latent
在这里插入图片描述

训练过程

diffusion训练的核心就是去学习t时间步的高斯噪声 z t ˉ {\bar{z_t}} ztˉ z θ {z_\theta} zθ之间的MSE
完整推导可以参考:https://zhuanlan.zhihu.com/p/525106459

区别

在这里插入图片描述

GAN:

给定生成器一个随机噪声,生成一张图片。
判别器给真图或者生成的图判断是否为真图。(01二分类问题)
缺点:
1、训练不稳定,生成器和判别器平衡问题
2、模型多样性低,多样性主要来自于一开始的随机噪声z
3、GAN的生成是一种隐式的生成,是一个网络直接生成的,无法判断服从什么分布,数学上可解释性低
(
1、One of the main limitations is that they can be unstable to train, which can lead to problems with mode collapse or low-quality outputs.
2、Additionally, GANs require careful tuning of hyperparameters and loss functions to achieve good performance, which can be time-consuming and difficult. (这个应该是强调diffusion是self-supervised,相对的GAN需要很仔细地调整训练策略)
3、Finally, GANs operate in discrete pixel spaces, which can limit their ability to generate realistic or high-quality images.
)
区别(待补充):
1、stable diffusion is designed to operate in continuous latent spaces, while GANs operate in discrete pixel spaces
stable diffusion是工作在连续空间,GAN是工作在离散像素空间
(摘自https://neuroflash.com/blog/is-stable-diffusion-a-gan/)
补充个WGan对原始Gan的优化:(完整推导见https://zhuanlan.zhihu.com/p/25071913
原始Gan之所以难训练以及不能把判别器训练太好的原因在于,JS散度存在一个极限距离log2,只要判别器判断生成图与真图没有一点相似,那JS散度永远是一个固定常数,这样就导致梯度为0。相应的改进方法就是取消网络输出的非线性激活(sigmoid),loss不取log。

AE、VAE

AE:给定输入送入编码器得到特征z(bottleneck),z送入解码器希望得到的生成图尽量还原原图
注:主要目的是用来学习特征z,使得特征z能去做后续的任务(分类分割等),主要目的不是生成。因此学到的特征z不是一个概率分布,无法采样,所以不能做生成。
VAE:与AE区别非常大,不再学习bottleneck特征,而是去学习一个高斯分布,学习到的分布可以进行采样然后用于做生成。(比如编码器阶段网络通过FC层直接回归高斯分布的均值和方差,通过均值和方差可以直接生成服从该高斯分布的样本,将样本送入解码器用于生成X‘)
在这里插入图片描述

如图(摘自b站李沐视频)VAE前半部分从x得到z是一个后验概率,学到的distribution就是一个先验分布,后半部分给z生成x’就是likelihood,训练就是maximum likelihood。(这个大体的流程逻辑其实与diffusion一样,只不过两者具体的实现方法还是有很大区别的)由于VAE是从一个分布采样出来的z生成图像,因此多样性比GAN要好很多。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值