突然发现之前整理的makedown有必要放在博客里面,这样不同的设备之间可以直接观看达到复习的效果.
GAN
G和D不断的博弈提高自己。GAN的优点是保真度比较高,缺点是多样性比较低。
(auto-encoder)AE,DAE、VAE、VQVAE
输入x,经过编码器生成,低维度的特征Z(叫bottleneck),然后经过解码器得到图像x‘,训练的目标函数是希望x’能重建之前的x。
Bottleneck Layers 是DenseNet 中的一种特殊的layer,它使用1 x 1 卷积来减少输入特征图的数量,从而提高计算效率。
AU用于无监督学习,学习没有数据标签的数据,学习对高维数据的低维表示(降维)。
denosing auto encoder:DAE、mask AE掩码自编码器
原图x经过程度的打乱得到Xc,然后输入到编码器,训练的目标函数是希望x’能重建原图的x。
VAE
学习一个高斯分布均值和方差,例如加一个FC(全连接)层,然后采样一个特征Z。这样在训练完之后编码器就可以不要了,直接在高斯噪声里面随机抽样一个样本给解码器生成照片X。
全连接层 Fully Connected Layer 一般位于整个卷积神经网络的最后,负责将卷积输出的二维特征图转化成一维的一个向量,由此实现了端到端的学习过程(即:输入一张图像或一段语音,输出一个向量或信息)。全连接层的每一个结点都与上一层的所有结点相连因而称之为全连接层。由于其全相连的特性,一般全连接层的参数也是最多的
q(z|x):给定x生成z的过程:后验概率
q(x|z):给定先验分布z预测x。
为什么在图像生成中VAE的多样性比GAN多呢?因为VAE是学习一个分布,在分布中随机生成特征Z,所以多样性要多一些。
VQ-VAE:vector quantised量化
分布不好学,不预测分布了,使用codebook代替,codebook是8192个向量,可以理解为是聚类中心,比如8192个聚类中心。使用特征图f的向量和codebook里面的向量作对比,找到最接近的聚类中心,把聚类中心的编码存到Z的矩阵里面,比如把Z里面编号为1在codebook里面对应编号为1的向量拿出来当做fq,即为新的特征图fq
为什么叫量化后的特征呢?因为fq是可控的,永远是从codebook里面拿出来的,不是随机生成的。
codebook是一个固定的学习得来的。论文用学到的codebook做一个prior(pixel CNN)用来做生成的任务。pixel CNN其实是auto regressive自回归的模型。
自回归模型AR还有什么?Open家的GPT系列。
自回归模型: 统计上一种处理时间序列的方法,用同一变数例如x的之前各期,亦即x1至xt-1来预测本期xt的表现,并假设它们为一线性关系。 因为这是从回归分析中的线性回归发展而来,只是不用x预测y,而是用x预测x(自己)
OpenAI把pixel CNN换成GPT,这就是DALL E的由来。
首先是图像文本对,然后把VQVAE的codebook直接拿来用生成特征,然后将文本特征和图像特征直接连接起来,变成序列,然后将序列扔给GPT,让GPT模型去预测一个。推理的过程只需要文本,然后得到文本特征,然后GPT中自回归的生成图像。
DALLE生成的很多图片怎么选择呢,使用CLIP把生成的图片排位,与文本最贴切的图片挑出来。
扩散模型
扩散模型来自于热力学的一个概念,高密度物质到低密度物质扩散,最终达到趋于平衡的状态。例如在屋子里面喷香水,整个屋子都香了
前向过程:X0不断的加噪声(高斯噪声),每一步加一点,直到最后XT达到平衡的状态,比如0-1正态分布。
反向过程:输入是一个随机噪声Z,训练一个网络,能够根据这个噪声一点一点恢复回来,到最初的图像,从而完成图像生成。
大部分的扩散模型用的是U-Net但也可以用其他的。
反向过程:这个过程是一个Markov Chain(马尔科夫链https://www.bilibili.com/video/BV1mY411J7u9/?spm_id_from=333.788&vd_source=bc5f7e4259c737be2c0ca390d620bfde
这个过程可以理解为,我们根据 xt 作为输入,预测高斯分布的均值和方差,再基于预测的分布进行随机采样得到 xt−1 。通过不断的预测和采样过程,最终生成一张真实的图片。
扩散模型引导生成的三种做法
区别:它们分别是用显式分类器引导生成的做法,用隐式无分类器引导的做法和用 CLIP 计算跨模态间的损失来引导生成的做法。
Classifier-Guidance: Diffusion Models Beat GANs on Image Synthesis
Classifier-Free: Classifier Free Diffusion Guidance
DiffusionCLIP: Text-Guided Diffusion Models for Robust Image Manipulation
有分类器引导是通过分类器添加类别信息的,无分类器引导省略了分类器,需要让模型的输入接收类别信息,所以重新训练了一个支持类别信息的模型。训练好后,模型提供类似有分类器引导的梯度。
扩散模型部分代码:https://blog.csdn.net/shan_5233/article/details/128529230?spm=1001.2014.3001.5501
DDPM
原始的扩散模型用Xt预测Xt-1,DDPM预测的是从Xt到Xt-1的噪声,上面右图,思想和resnet差不多。time embeding用来告诉unet到了扩散模型的第几步,为什么要time embeding?原因是,比如怎么根据不同的输入生成不同的输出,希望unet网络一开始生成粗糙的轮廓,最后希望学到一些高频的特征,但其实所有的unet都是共享参数的,所以需要time embeding提醒模型到什么步骤了,控制输出粗糙一点还是细致一点。
不停的计算目标函数完成训练。loss是计算噪声的差值。fz是unet网络结构。Z是前向过程中加的噪声是已知的。
DDPM的改进版本
把添加噪声的方式改了,从线性的到余弦的。
diffusion model beats GAN
把模型加大加宽,增加自注意力头的数量。
使用了classifier guide引导模型,加快反向的速度。y是引导信息
引导信息可以是分类器、clip、图像特征级别的、图像像素级别的
GLIDE:classifier free guided
输出是两个,一个是有条件引导,一个是无条件引导,然后计算他们的差值
DALLE2
作用:文生图,生成不存在的图片。根据文本编辑图片,例如在原图中添加东西。图生图(生成同一种风格的图片);图像内插;
DALLE2=CLIP+GLIDE(基于扩散模型的文生图方法)
层级式Hierarchical:先生成一个64x64的图片,然后利用一个模型上采样生成 256x256,然后在利用一个模型上采样生成 1024x1024。
CLIP Latents:先训练好一个CLIP模型,找到图片和文本对之间的这种相连关系
然后使用DALLE2的两阶段模型,一个是prior先验模型,一个是解码器decoder。本质上是用clip指导扩散模型。其中的解码器是扩散模型,prior模型也是扩散模型。
扩散模型:概率分布模型,在分布里面采样,所以相比于GAN具有更好的多样性(原创性)。
DALLE 模型的原理
首先输入图像和文本对训练CLIP,然后CLIP模型是锁住的:训练好之后不会在进行微调和训练了。进一步去走两阶段这个流程。
两阶段的数学原理
给定文本y预测图片x,等价于给定一个文本y生成x和图像特征zi,因为clip锁定了,也就是图像z和图像zi是一一对应的关系。根据链式法则,将概率写成后面的形式。P(zi|y)就是给定文本生成图像特征也就是prior这个过程,P(x|zi,y),给定文本和图像特征生成图像x是decoder。
Prior怎么训练实现文本特征到图像特征的呢?
用上面的图像特征作监督,监督文本特征生成图像特征,这样就可以保证生成的图像特征不会太离谱。
decoder是升级版的GLIDE模型。