早期SD模型控制生成方法

文章目录

简介

Stable Diffusion系列模型出现,极大推动了扩散模型、AI图片生成技术发展,但由于生成结果可控性差使得其主要流行于各种社区,难以直接应用于生产,不能实际落地。随着技术发展,模型基础能力越来越强,生成可控性也越来越好,但即使如今的Flux、SD3、MJ、GPT-4o等各系列模型中也没有完全解决此问题。在SD模型初期出现过各种提高控制性生成的方法,本文档对其中使用较广泛的三个进行简短说明。

Controlnet

Controlnet这个名字传递的信息就很明确,其主要是用于"控制",虽然基础模型的能力已经迭代了好几轮,但模型的控制能力才是决定模型能否广泛应用的重中之重。Controlnet在SD1.5时代出现,一直延续到现在的Flux、SD3.5时代,其使得图片生成不再是抽卡和疲于修改提示词的玄学,可以说该技术极大程度上推广了图片生成模型的发展。

图1 Contorlnet抽象示意图

图1通过简洁的示意图清晰的展示了Controlnet的思想,为了在原始模型的基础上添加新的控制能力,其将原始模型权重冻结,保持原始模型通过训练拥有的能力,然后在旁路复制原始模型权重构建一个可训练的支路,该支路因为是原始模型的备份,其具有在大量图片数据上训练后的先验知识,是一个强大的特征提取器。新支路接受额外的控制图片数据,通过零初始化的卷积层与原始支路链接实现额外条件注入。

记训练好的原始模型为 F ( ⋅ , Θ ) \mathcal{F}(\cdot,\mathbb{\Theta}) F(⋅,Θ),其中 Θ \mathbb{\Theta} Θ表示模型参数,其功能时将输入 x x x映射为输出 y y y,即 y = F ( x , Θ ) y=\mathcal{F}(x,\mathbb{\Theta}) y=F(x,Θ)。在图片生成模型中, x 、 y x、y x、y均为对应图片的2D特征map,即 x ∈ R h × w × c x \in \mathbb{R}^{h \times w \times c} x∈Rh×w×c。图1(b)中可训练的备份支路以额外的条件向量 c c c为输入, zero convolution \text{zero convolution} zero convolution记为 Z ( ⋅ ; ⋅ ) \mathcal{Z}(\cdot;\cdot) Z(⋅;⋅),是权重和偏置初始化为0的 1 × 1 1\times1 1×1卷积,备份支路与主支路通过两个 zero convolution \text{zero convolution} zero convolution链接,最终Controlnet的输出为:
y c = F ( x , Θ ) + Z ( F ( ( x + Z ( c ; Θ z 1 ) ) , Θ c ) ; Θ z 2 ) (1) y_c=\mathcal{F}(x,\mathbb{\Theta})+\mathcal{Z}(\mathcal{F}((x+\mathcal{Z}(c;\mathbb{\Theta}_{z1})),\mathbb{\Theta}c);\mathbb{\Theta}{z2}) \tag1 yc=F(x,Θ)+Z(F((x+Z(c;Θz1)),Θc);Θz2)(1)

训练开始时,因为 zero convolution \text{zero convolution} zero convolution的权重和偏置均为0,故 y c = y y_c=y yc=y。这种方式避免有害噪声影响可训练备份模块中的原始能力,保证了其通过预训练得到的能力。通过零初始化层,ControlNet 实现了 "保留预训练能力" 和 "添加新控制功能" 的平衡,这也是其能高效适配多种图像生成任务的关键之一。

上述是从抽象层面对Contorlnet进行了一个解释,但实际应用到扩散模型中还是有一些区别,Controlnet在SD1.5、SD2.1模型中的应用架构图如图2所示。SD1.5、SD2.1模型中噪声预测模块是典型的Unet结构,针对前12层下采样编码层和中间层构建可训练备份支路,剩下的12等上采用解码层不构建备份支路,而是直接使用 zero convolution \text{zero convolution} zero convolution实现数据流转。扩散模型是在隐空间,在主支路中这一步是通过训练好的VAE模型实现,笔者猜测是因为使用的控制图片往往是canny图、深度图、姿势图等非常规图片,故Controlnet论文并没有直接使用预训练的VAE模型进行控制图片的特征提取,而是使用一个额外的有四层卷积层构建的模块 ϵ ( ⋅ ) \epsilon(\cdot) ϵ(⋅)提取控制特片的特征 c f c_f cf,该模块与其他模块联合训练。

图2 SD1.5/SD2.1 Controlnet架构图

Controlnet模型训练时,原始图片特征为 z 0 z_0 z0,通过 t t t步加噪后为 $z_t

$。在一些给定条件,如时间步 t t t、文本提示词 c t c_t ct、额外控制图片特征 c f c_f cf,训练损失为: L = E z 0 , t , c t , c f , ϵ ∈ N ∼ ( 0 , 1 ) [ ∣ ∣ ϵ − ϵ θ ( z t , t , c t , c f ) ∣ ∣ 2 2 ] (2) \mathcal{L}=\mathbb{E}{z_0,t,c_t,c_f,\epsilon \in \mathcal{N} \sim (0,1)}[||\epsilon-\epsilon{\theta}(z_t,t,c_t,c_f)||^2_2] \tag2 L=Ez0,t,ct,cf,ϵ∈N∼(0,1)[∣∣ϵ−ϵθ(zt,t,ct,cf)∣∣22](2)

训练过程中以50%的概率随机将 c t c_t ct替换为空字符串,此方式可能增强Controlnet直接识别图片图像中的语义信息能力,使其能够替代提示词的作用。Controlnet可同时支持多种不同的unit以不同的控制图片类型作为条件,无需额外的权重调整或线性插值。

T2I-Adapter

T2I-Adapter论文作者认为仅靠文本提示词不能完全发挥预训练扩散模型的知识和能力,其开发T2I-Adapter用于挖掘文生图扩散模型的能力实现精细化控制生成。通过训练轻量级的adapter模块,使用外部控制信息与模型内部知识进行对齐。基于不同的条件信息可训练多种adapters,实现对生成结果的色彩、结构等方面的控制、编辑效果。同时还具备良好的组合性和泛化性。T2I-Adapter架构图如图3所示,其是一个可以注入额外控制信息的网络模块,具有以下优点:

  • 即插即用:不影响预训练模型的性能;
  • 简单小巧:仅77M参数,模型体积约300M,训练成本低;
  • 灵活:可基于空间色彩控制、构图控制等各种控制条件训练多种adapters;
  • 组合性好:可轻松组合多个适配器以实现多条件控制;
  • 泛化性好:训练后可应用于基础架构一致的所有模型

图3 T2I-Adapter架构图

在SD系列模型中使用预训练的CLIP模型将条件文本转换为tokens序列 y y y,在Unet中的每一层通过交叉注意力计算将 y y y引入去噪过程,该过程可用以下公式表达:
{ Q = W Q ϕ ( Z t ) ; K = W K τ ( y ) ; V = W V τ ( y ) A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d ) ⋅ V (3) \begin{cases} \mathbf{Q} = \mathbf{W}_Q \phi(\mathbf{Z}_t); \quad \mathbf{K} = \mathbf{W}_K \tau(\mathbf{y}); \quad \mathbf{V} = \mathbf{W}_V \tau(\mathbf{y}) \\ Attention(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = softmax\left(\frac{\mathbf{Q}\mathbf{K}^T}{\sqrt{d}}\right) \cdot \mathbf{V} \end{cases} \tag3 {Q=WQϕ(Zt);K=WKτ(y);V=WVτ(y)Attention(Q,K,V)=softmax(d QKT)⋅V(3)

其中 ϕ ( ⋅ ) , τ ( ⋅ ) \phi(\cdot),\tau(\cdot) ϕ(⋅),τ(⋅)是可学习的嵌入层; W Q , W K , W V W_Q,W_K,W_V WQ,WK,WV是可学习的映射矩阵。通过此种方式引导的文本信息在图片生成过程中不能提供有效的结构引导,在复杂的场景下导致随机、不稳定的结果;T2I-Adapater认为这不是模型性能的问题,而是文本提供的信息没有与模型内部知识对齐。


图4 T2I-Adapter详细架构图

图4详细展示了T2I-Adapter和SD模型的整体架构图,SD模型参数是冻结的,左下角标识火焰的模块就是多种adapters,具体结构对应右下角;不同的adapters可直接通过可调节的权重 ω i \omega_i ωi组合应用。每个adapter由四个特征提取块和三个下采样块组成。每个特征提取块由一个卷积层和两个残差块组成,用于提取 F c k F^k_c Fck,最终得到多尺度条件特征 F c = { F c 1 , F c 2 , F c 3 , F c 4 } F_c=\{F^1_c,F^2_c,F^3_c,F^4_c\} Fc={Fc1,Fc2,Fc3,Fc4};其中每个子项的维度和Unet中的中间特征 F e n c = { F e n c 1 , F e n c 2 , F e n c 3 , F e n c 4 } F_{enc}=\{F^1_{enc},F^2_{enc},F^3_{enc},F^4_{enc}\} Fenc={Fenc1,Fenc2,Fenc3,Fenc4}对应维度子项的维度相同,应用时就是在每个尺度上将 F c i , F e n c i F^i_c,F^i_{enc} Fci,Fenci相加,可由以下公示表示:
F c = F A D ( C ) F ^ e n c i = F e n c i + F c i , i ∈ { 1 , 2 , 3 , 4 } \begin{align*} F_c &= \mathcal{F}{AD}(C) \tag4 \\ \hat{F}^i{enc}&= F^i_{enc} + F^i_c,\quad i \in \{1,2,3,4\} \tag5 \end{align*} FcF^enci=FAD(C)=Fenci+Fci,i∈{1,2,3,4}(4)(5)

其中 C C C是条件输入, F A D \mathcal{F}{AD} FAD是T2I-Adapter。将多个不同控制类型的adapters组合,只需将公示(4)改为以下公示:
F c = ∑ k = 1 K ω k F A D k ( C k ) (6) F_c=\sum^K
{k=1}\omega_k \mathcal{F}^k_{AD}(C_k) \tag6 Fc=k=1∑KωkFADk(Ck)(6)

与Controlnet训练相同,T2I-Adapter训练时将预训练的SD模型权重冻结,只更新adapter模块参数。每个训练样本是一个三元组,包括原始图片 X 0 X_0 X0、条件图 C C C、文本提示 y y y。首先通过编码器将原始图片 X 0 X_0 X0嵌入到潜在空间中得到 Z 0 Z_0 Z0。然后,从 [ 0 , T ] [0,T] [0,T]中随机采样一个时间步 t t t,并向 Z 0 Z_0 Z0添加相应的噪声,得到 Z t Z_t Zt。完整的训练损失函数如下:
L A D = E Z 0 , t , F c , ϵ ∈ N ∼ ( 0 , 1 ) [ ∣ ∣ ϵ − ϵ θ ( Z t , t , τ ( y ) , F c ) ∣ ∣ 2 2 ] (7) \mathcal{L}{AD}=\mathbb{E}{Z_0,t,F_c,\epsilon \in \mathcal{N} \sim (0,1)}[||\epsilon-\epsilon_{\theta}(Z_t,t,\tau(y),F_c)||^2_2] \tag7 LAD=EZ0,t,Fc,ϵ∈N∼(0,1)[∣∣ϵ−ϵθ(Zt,t,τ(y),Fc)∣∣22](7)

论文作者将DDIM推理采样阶段均匀分为初期、中期和后期,在三个阶段分别添加条件信息,结果显示在中期和后期添加引导对生成结果几乎没有影响,如图5所示;这表明生成结果的主要内容在采样初期就已确定。因此,如果时间步 t t t从后期区间采样,训练过程中的引导信息就会被忽略。

图5 DDIM三阶段引入条件信息生成结果对比

为了加强adapter的训练效果,采用非均匀采样来提高 t t t落在采样初期的概率,故使用三次函数,即 t = ( 1 − ( t T ) 3 ) × T , t ∈ U ( 0 , T ) t=(1−(\frac{t}{T})^3)×T,\quad t\in U(0,T) t=(1−(Tt)3)×T,t∈U(0,T),作为 t t t的分布。图 6 对比了均匀采样与三次采样的效果,包括颜色引导和关键点姿态引导的情况。可以发现, t t t的均匀采样存在引导效果较弱的问题,在颜色控制方面尤为明显,而三次采样策略能够改善这一缺陷。

图6 不同采样效果对比

IP-Adapter

受Controlnet和T2I-Adapter的启发和鼓舞,IP-Adapter的开发人员相信可以能在不改变原始预训练扩散模型的前提下,通过极小的训练需求,将图片作为prompt,通过额外的网络将条件引入预训练扩散模型,实现可控的图片生成,即Image Prompt技术,与Text Prompt对应,这也是IP-Adapter名称由来。

IP-Adapter开发者认为之前一些方法可以被视为具备图像提示能力的方式,但生成的图像仅在部分程度上忠实于提示图像。其结果往往比经过微调的图像提示模型差,更不用说与从头开始训练的模型相比了,主要问题在于文本到图像扩散模型的交叉注意力模块。预训练扩散模型中交叉注意力层的键(key)和值(value)投影权重是为适配文本特征而训练的。因此,将图像特征与文本特征合并后输入交叉注意力层,仅能实现图像特征与文本特征的对齐,但这可能会丢失一些特定于图像的信息,最终导致利用参考图像进行的生成只能达到粗粒度的可控性(例如,图像风格)。

Controlnet中条件信息是通过 zero convolution \text{zero convolution} zero convolution引入Unet模块、T2I-Adapter中是直接将条件信息与Unet模块的中间特征相加,而IP-Adapter不同,其粒度更细,聚焦在交叉注意力模块。IP-Adapter将Unet交叉注意力模块中的文本特征、图像特征解耦,对于扩散模型 UNet 中的每个交叉注意力层,额外添加一个仅用于处理图像特征的交叉注意力层。在训练阶段,仅对新添加的交叉注意力层的参数进行训练,而原始的 UNet 模型保持冻结状态。

结果表明,仅具有 22M 参数的IP-Adapter,其生成性能可与从文本到图像扩散模型完全微调得到的图像提示模型相媲美。更重要的是,IP-Adapter展现出卓越的泛化能力,且与文本提示兼容。借助 IP-Adapter,各类图像生成任务都能轻松实现。IP-Adapter除了极强的可复用性和灵活性外,其还可与 ControlNet 等其他可控适配器兼容,从而轻松实现图像提示与结构控制的结合;得益于解耦交叉注意力策略,图像提示与文本提示能够兼容,进而实现多模态图像生成。

图7 IP-Adapter架构图

如图7所示,其中为红色的训练模块就是IP-Adapter,由两部分组成,分别是从图像中提取图像特征的图像编码器和将图像特征嵌入预训练扩散模型中的交叉注意力模块。与文本特征提取一样,图像特征提取直接使用预训练的CLIP模型的图像编码器,该部分权重冻结;然后采用一个小型可训练的投影网络,由一个线性层和一个层归一化组成,将图像嵌入投影为长度为 N 的特征序列(IP-Adapter论文中 N=4),图像特征的维度与预训练扩散模型中文本特征的维度相同。

待补充...

相关推荐
飞哥数智坊1 分钟前
AI编程实战:Cursor突然收费封禁?用Trae开发一个写作助手(前端篇)
人工智能·trae
淦暴尼3 分钟前
通俗易懂神经网络:从基础到实现
人工智能·深度学习·神经网络
数据饕餮5 分钟前
Pytorch深度学习框架实战教程03:Tensor 的创建、属性、操作与转换详解
人工智能·pytorch·深度学习
AndrewHZ6 分钟前
【图像处理基石】什么是小波变换?
图像处理·人工智能·深度学习·计算机视觉·cv·小波变换·ai小波变换
我宿孤栈18 分钟前
自动驾驶仿真领域常见开源工具
人工智能·开源·自动驾驶
Ronin-Lotus30 分钟前
深度学习篇---矩阵
人工智能·深度学习·矩阵
Zhangzy@1 小时前
(保姆级)Windows11安装GPU版本Pytorch2.3、CUDA12.6
服务器·人工智能·pytorch·视觉检测
Codebee1 小时前
OneCode 3.0 全链路交互解析:从事件驱动到 AI 注解协同
人工智能·低代码
mwq301231 小时前
AI Prompt提示词基本原则与核心技巧
人工智能
mwq301232 小时前
使用Ollama本地部署DeepSeek大模型指南
人工智能