My App
Notes

stable diffusion 基本概念

stable diffusion 基本概念

这篇是fastai第九讲视频资源的笔记, 笔者认为从一个很好理解的角度解释了stable diffusion

the rest of the class is a shit

从一个神奇的函数开始

首先我们想象有函数f, 对于每一张图片, 他能返回"可能是数字"的概率, 比如下图中的x1为数字的概率为0.98, x2为数字的概率为0.4, x3为数字的概率为0.02

现在我们来尝试将x3变得"更像数字", 我们是这样做的, 从x3的(0,0)像素点开始, 尝试增加"一点点"像素值, 查看p`(x3)的变化, 我们可以求每个像素点相对f(x)的梯度!接着对原图片每个像素点减去一个合适的常数c和梯度的乘积.

如果我们把得到的新的图片给函数f检测, 就会发现新图片"更像数字", 和随机梯度下降的思想类似.

为了贴近我们即将阐述的概念, 我需要这样表述上面的做法, 我通过递归计算梯度得到了"合适的常数c和梯度的乘积", 它的形状和原图片是一样的28x28, 我们把他称为x3的噪声图, x3减去噪声图使x3更接近数字图片.

func

构造训练数据

在上一节中, 我们有一个神奇的函数f去预测噪声图, 但是引入一个函数告诉我们这张图片有"多么"像手写数字, 然后再计算梯度这很奇怪, 我们永远无法知道! 参考GAN里的辩别器.

在这一节我们通过一个神经网络直接预测噪声图, 数据集是大量的手写图片, 通过添加大量均值为0方差不同的噪声分布得到"不那么像手写图片"的样本, 训练这个神经网络使它尽可能准确的预测输入图片的噪声图, 输入图片减去噪声图得到"更接近数字图片"的样本.

在最后我们可以从纯噪声开始, 得到"很像手写数字的图片".

nn

VAE

参考下图, 我们的任务是训练一个神经网络, 使输入图片和输出图片完全一致, 上采样和下采样一般通过卷积实现.

当谈论这样做的意义时, 请关注图中红线部分, 我们从64x64x4的特征还原出了原始图像, 那么我们只需要在服务器中保存这个压缩后的特征(latent), 在客户端就可以根据模型共享参数还原出原始图片.

在模型训练完成后, 我们把图中绿色部分称为VAE(Variational autoencoders), 严格意义上来说VAE是一种压缩算法, 帮助我们节省大量的时间和金钱.

VAE

CLIP

接下来我们将理解怎么增加文本嵌入.

对于手写数字任务, 我们在模型中嵌入onehot编码版本的数字. onehot

对于复杂精美的现实世界图片, 我们可以使用CLIP

CLIP

每张图片都有一个text标签, 我们对image和text分别编码, 得到固定长度的一维向量, 我们希望:

  • 标签和图片匹配的嵌入向量尽可能相似, 标签和图片不匹配的嵌入向量尽可能不同.
  • 相似的标签得到相似的文本嵌入, 相似的图片得到相似的图片嵌入.

我们定义的损失函数如上图右表所示, 运用点积, 它们每个嵌入组合都能得到一个分数, 损失函数为蓝色部分减去红色部分(contrastive loss).

重复表述一下我们期待的结果, "a graceful swan", "some beautiful swan", "such a lovely swan", [一张天鹅的照片]得到相似的嵌入向量. 可以理解为在一个高维空间中, 它们的位置非常接近.

补充观点

  1. 记录timestep, 不同时间步添加不同程度(方差, c决定)的噪声, 通过diffusion sampler控制
  2. 新的观点认为在"从一个神奇的函数开始"中提到的c -> LR, diffusion sampler -> optimiser, 是否需要t存疑
  3. perceptual loss代替MSE

thanks

A different way to look at Stable Diffusion

原论文

初印象

High-Resolution Image Synthesis with Latent Diffusion Models

Diffusion Models实现了图片的高保真可控生成, 但是训练和推理消耗大量资源, 本论文通过映射到latent space, 既减小了计算复杂度, 又得到高保真图片. 另外, 通过交叉注意力, 允许可控条件生成.

介绍

在生成高保真图片任务中, likelihood-based的模型通过增加参数量, GAN的训练又很受数据的限制. Diffusion Models快速应用到图像修复上色等任务, 不易mode-collapse, 通过参数共享减小参数量.

分析了一下DM生成高保真图片的问题, 尽管有一些尝试, 在高维度空间上重复计算不可避免. 训练难, 评估难.

实验设计基于这样的观察, 压缩分两个阶段, 第一阶段感知压缩可以大幅减少数据量而图像的失真度增加很慢, 因为主要被移除的是人眼难以观察到的细节和高频信息, 这部分通常由自编码+GAN实现; 第二阶段语义压缩, 当压缩率低到一定程度后, 再想进一步压缩, 失真度会急剧上升. 这是因为此时压缩的不再是难以察觉的细节, 而是图像的核心语义信息. 这部分可以由LDM来处理. 传统的方法即使想去除那些无意义的信息, 也需要在所有像素上进行计算, LDM先用一个轻度的压缩(感知压缩)去除人眼不敏感的细节, 然后在得到的更小, 更紧凑的潜在空间中, 用强大的扩散模型进行训练和生成.

perceptual-and-semantic-compression

编码器只用训练一次就可以反复使用, 甚至是不同的任务. 通过在UNet中引入transformer实现可控生成.

方法

sd-overview

感知型的图片压缩

怎么改进的没看懂, 反正比较了几种压缩方法他们更优.

Latent Diffusion Models

解释了Diffusion逐渐去噪的过程, Latent表示的优点.

条件机制

包括跨注意力机制和多模态训练.

Attention(Q,K,V)=softmax(QKTd)V,其中Q=WQ(i)φi(zt),K=WK(i)τθ(y),V=WV(i)τθ(y).\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d}}\right) \cdot V, \text{其中} \\ Q = W_Q^{(i)} \cdot \varphi_i(z_t), \quad K = W_K^{(i)} \cdot \tau_\theta(y), \quad V = W_V^{(i)} \cdot \tau_\theta(y).

实验

潜在空间感知图像压缩, 图像生成, 条件化图像生成, 超分辨率,图像修复

感受

单看论文有点看不下去, 核心机制通过网上资源理解了, 因此不再深入阅读.

On this page