目录
在AIGC领域,目前用的最多的就是Stable Diffusion、ControlNet和LoRA三者结合。SD通过加噪和去噪过程生成由ControlNet 提供的condition控制的图片,而LoRA则是以微调的方式,在少量数据训练下得到具有特定表现形式的SD模型。
论文的链接如下:
1.Stable Diffusion:https://arxiv.org/pdf/2112.10752
2.LoRA:https://arxiv.org/pdf/2106.09685
3.ControlNet:https://arxiv.org/pdf/2302.05543
Stable Diffusion(稳定扩散模型)
为什么叫扩散模型?
因为它包含的就是两个过程——前向扩散和反向扩散。
前向扩散就是在一张输入图片上不断加上噪声的过程。如下图,在一张猫的图片上不断加上噪声,在一定步数后它就变成了我们看不出是个什么东西的图片了。
反向扩散则是对噪声图像不断预测噪声并去噪的过程,最后输出我们想要得到的图片。下面是在一张随机噪声图片上逐渐去噪最后生成一个房子的过程。
有了前向扩散和反向扩散,那模型训练的目标也很容易理解,就是把预测的噪声和加入的噪声做回归,让模型能准确地预测出每次加入的真实噪声。
网络结构
SD主要由VAE(变分自编码器)、UNet和CLIP Text Encoder三者组成。如下图可见,整个网络分为三部分——Pixel Space、Latent Space和Conditioning。
Pixel Space中的VAE负责将图像压缩成潜在表示(Latent Representations)以及将潜在表示重建成图像。
Latent Space主要就是使用UNet进行特征级别的去噪过程,其中会进行Attention计算,学习Condition和图片特征的对应关系。
而Conditioning中则会通过预训练的CLIP Text Encoder将文本Prompt编码成Text Embeddings,用于对生成图像进行一定的控制引导。
VAE(Variational Auto-Encoder)
就像上面所介绍的,VAE的主要工作就是负责的图像压缩和重建,所以它其实是一个Encoder-Decoder的结构。
当我们输入一个的图片,Encoder模块会将其编码成的低维Latent特征,其中为下采样率,同样,VAE的Decoder模块有一个相同的上采样率,将低维的Latent特征重建成像素级别的图片。
那么为什么要将图片放在这么一个Latent Space中进行训练呢?
Compared to the high-dimensional pixel space, this space is more suitable for likelihood-based generative models, as they can now (i) focus on the important, semantic bits of the data and (ii) train in a lower dimensional, computationally much more efficient space.
和像素空间相比,潜在空间让生成式模型(也就是Stable Diffusion)更专注于重要的语义信息,并且在更低维度训练,计算效率更高。举个栗子:输入为[3,512,512]的数据压缩成[3,64,64]的Latent Feature,计算量将减少64倍,效率也就大大提升了。
UNet模型
SD中的UNet和我们平时所了解的那个UNet,仅仅只是结构上相同,都是U型网络,而其中各个模块则是完全不同。
既然有了低维的Latent Feature,那就要通过SD中最重要的UNet模型进行预测噪声了。仔细看上面的结构图,SD的UNet架构最重要的就是ResNetBlock和CrossAttentionBlock。ResNetBlock借助残差连接,在将网络搭建地更深的同时,将Time Embedding信息嵌入模型。CrossAttentionBlock将文本的语义信息与图像的语义信息进行Attention计算,增强输入文本Prompt对生成图片的控制。
CLIP Text Encoder
文生图作为Stable Diffusion最重要的能力之一,它的成功离不开CLIP的存在。
CLIP模型是一个基于对比学习的多模态模型,主要包含Text Encoder和Image Encoder两个模型。其中Text Encoder用来提取文本的特征,可以使用NLP中常用的text transformer模型作为Text Encoder;而Image Encoder主要用来提取图像的特征,可以使用CNN/Vision transformer模型(ResNet和ViT等)作为Image Encoder。与此同时,他直接使用4亿个图片与标签文本对数据集进行训练,来学习图片与本文内容的对应关系。
与U-Net的Encoder和Decoder一样,CLIP的Text Encoder和Image Encoder也能非常灵活的切换,庞大图片与标签文本数据的预训练赋予了CLIP强大的zero-shot分类能力。
一般来说,我们提取CLIP Text Encoder模型最后一层特征作为CrossAttention模块的输入,但是开源社区的不断实践为我们总结了如下经验:当我们生成二次元内容时,可以选择提取CLIP Text Encoder模型倒数第二层特征;当我们生成写实场景内容时,可以选择提取CLIP Text Encoder模型最后一层的特征。
LoRA(低秩适应矩阵)
什么是LoRA?
LoRA(LOW-RANK ADAPTATION)是我们用于微调SD模型生成特定风格或内容的重要工具之一。它本质上是对特征矩阵进行低秩分解的一种近似数值分解技术,可以大幅降低特征矩阵的参数量,但是会伴随着一定的有损压缩。
在AI绘画领域,我们可以使用SD模型+LoRA模型的组合微调训练方式,只训练参数量很小的LoRA模型,就能在一些细分任务中取得不错的效果。
LoRA模型的训练逻辑是首先冻结SD模型的权重,然后在SD模型的U-Net结构中注入LoRA权重,主要作用于CrossAttention部分,并只对这部分的参数进行微调训练。
让我们来看公式,对于SD模型的权重,通过加入残差的方式,训练来完成优化过程:
其中,d就是这个参数矩阵的秩,而它又通过低秩分解由两个低秩矩阵的乘积组成,也就是和。
上图就是LoRA模型的训练流程,通常来说,对于矩阵,我们使用随机高斯分布初始化,并对矩阵使用全0初始化,使得在训练初始状态下这两个矩阵相乘的结果为0。这样能够保证在训练初始阶段时,SD模型的权重完全生效。
举个栗子,更清楚地对比参数量的差距:假设原来的是100*1024的参数矩阵,那么参数量为102400,LoRA模型将矩阵拆成了两个矩阵相乘,如果我们设置Rank=8,那么就是100*8的矩阵与8*1024的矩阵做矩阵乘法,参数量为800+8192=8992,整体参数量下降了约11.39倍。
如何使用LoRA?
一般使用webui和comfyui这两个比较多,前者适合SD初学者使用,界面简洁,一键出图;后者比较适合对SD和LoRA较为熟悉的人群,它以工作流的方式,通过结点之间的搭配,达到各种出图效果。
放上两个在线使用的链接:
使用教程可以直接B站搜索视频,很多up主都有很详细的介绍。
ControlNet
张吕敏大神的出名之作!将SD模型推到了一个全新的高度,SD模型内容的生成不再只能依靠图或文本,而是拓展到lineart、canny、openpose、depth等等多种形式,so amazing!
和LoRA类似,ControlNet主要也是在UNet中起作用。具体来说,ControlNet将Stable Diffusion UNet中的Encoder和Middle部分进行复制训练,而Stable Diffusion的权重是固定的,不需要进行梯度计算,而且上图中的zero convolution的权重和偏置都初始化为0,这样一来,在我们开始训练ControlNet之前,所有zero convolution模块的输出都为零,使得ControlNet完完全全就在原有Stable Diffusion底模型的能力上进行微调训练,不会产生大的能力偏差。
聪明的你看到这里肯定会想,既然权重都为0了,那梯度也为0,模型还如何学到东西呢?
下面简单推导一下:
假设ControlNet权重为,以此得到对应梯度的求导:
而如果此时的,我们就会得到:
这就意味着只需一次梯度迭代就可以将变成非零值,然后就得到,这样就能让zero convolution模块逐渐成为具有非零权重的公共卷积层,并不断优化参数权重。
总结
Stable Diffusion + LoRA + ControlNet三巨头的强强联合,形成了一个千变万化的AI绘画“兵器库”。在这个大兵器库中,传统图像处理技术(Canny、Depth、SoftEdge等)再次得到广泛使用,成功“文艺复兴”;传统深度学习技术(人脸识别、目标检测、人体关键点检测、图像分割、图像分类等)也直接过渡到AIGC时代中,成为AI绘画工作流中的重要辅助工具。计算机视觉历史中的沉淀与积累,都在AIGC时代有了相应的位置。
可以这样说,Stable Diffusion是AIGC时代的“YOLO”,Stable Diffusion XL是AIGC时代的“YOLOv3”,LoRA系列模型是AIGC时代的“ResNet”,ControlNet系列模型就是AIGC时代的“Transformer”。
参考链接
深入浅出完整解析Stable Diffusion(SD)核心基础知识 - 知乎 (zhihu.com)