Adding Conditional Control to Text-to-Image Diffusion Models
公众号:EDPJ(添加 VX:CV_EDPJ 或直接进 Q 交流群:922230617 获取资料)
目录
0. 摘要
1. 简介
2.相关工作
2.1. 微调神经网络
2.2. 图像扩散
2.3. 图像到图像的转换
3. 方法
3.1. ControlNet
3.2. 用于文本到图像扩散的 ControlNet
3.3. 训练
3.4. 推断
4. 实验
4.1. 定性结果
4.2. 消融研究
4.3. 定量评价
4.4. 与以前方法的比较
4.5. 讨论
5. 结论
参考
附录
1. 实现细节
1.1 训练参数
1.2 推理参数
2. 消融研究
2.1 消融的架构
2.2 结果
3. 比较
4. 定量评价(见原始附录)
5. 零卷积层的梯度计算
6. 额外结果(见原始附录)
7. 讨论
S. 总结
S.1 主要贡献
S.2 架构和方法
我们提出了 ControlNet,这是一种神经网络架构,可将空间条件控制添加到大型预训练文本到图像扩散模型中。 ControlNet 锁定可用于生产的大型扩散模型,并使用其经过数十亿图像预训练的深度且强大的编码层作为强大的骨干来学习一组不同的条件控制。 神经架构与“零卷积”(零初始化卷积层)连接,参数从零逐渐增长,并确保没有有害噪声会影响微调。 我们使用稳定扩散、使用单个或多个条件、有或没有提示来测试各种条件控制,例如边缘、深度、分割、人体姿势等。 我们证明了控制网络的训练对于小型(<50k)和大型(>1m)数据集都是稳健的。 大量结果表明 ControlNet 可以促进更广泛的应用来控制图像扩散模型。
我们中的许多人都经历过视觉灵感的闪现,我们希望将其捕捉到独特的图像中。 随着文本到图像扩散模型 [54,61,71] 的出现,我们现在可以通过输入文本提示来创建视觉上令人惊叹的图像。 然而,文本到图像模型在对图像的空间组成提供的控制方面受到限制。 仅通过文本提示来精确表达复杂的布局、姿势、形状和形式可能很困难。 生成与我们的心理想象准确匹配的图像通常需要多次反复试验,包括编辑提示、检查生成的图像,然后重新编辑提示。
我们能否通过让用户提供直接指定其所需图像组成的附加图像来实现更细粒度的空间控制?
以端到端的方式学习大型文本到图像扩散模型的条件控制具有挑战性。
本文介绍了 ControlNet,这是一种端到端神经网络架构,可学习大型预训练文本到图像扩散模型(我们实现中的稳定扩散)的条件控制。
我们的实验表明,ControlNet 可以通过各种条件输入来控制稳定扩散,包括 Canny edges、Hough lines、用户涂鸦、人体关键点、分割图、形状法线、深度等(图 1)。
总之,
微调神经网络的一种方法是直接使用额外的训练数据继续训练它。 但这种方法可能会导致过度拟合、模式崩溃和灾难性遗忘。 广泛的研究集中于开发避免此类问题的微调策略。
超网络(HyperNetwork)。
适配器(Adapter)。
附加学习(Additive Learning)。
低秩适应 (Low-Rank Adaptation,LoRA)。通过学习低秩矩阵参数的偏移来防止灾难性遗忘 [31],这是基于对许多过度参数化模型驻留在低内在维度子空间中的观察 [2, 47]。
零初始化层。
图像扩散模型。
控制图像扩散模型。
条件 GAN [15, 34, 62, 89, 92, 96, 97, 98] 和 Transformer [13, 19, 67] 可以学习不同图像域之间的映射,例如
操纵预训练的 GAN 可以处理特定的图像到图像任务,例如,
ControlNet 将附加条件注入神经网络的块中(图 2)。 在这里,我们使用术语网络块来指代一组神经层,这些神经层通常组合在一起形成神经网络的单个单元,例如 resnet 块、conv-bn-relu 块、多头注意力块,transformer 块等。假设 F(·; θ) 是这样一个经过训练的神经块,其参数为 θ,将输入特征图 x 转换为另一个特征图 y,如下所示
在我们的设置中,x 和 y 通常是 2D 特征图,即 x ∈ R^(h×w×c)。
为了将 ControlNet 添加到这样的预训练神经块中,我们锁定(冻结)原始块的参数 θ,同时将该块克隆到具有参数 θ_c 的可训练副本(图 2b)。 可训练副本采用外部条件向量 c 作为输入。 当这种结构应用于稳定扩散等大型模型时,锁定的参数保留了用数十亿图像训练的生产就绪模型,而可训练的副本使用这种大规模预训练模型来建立一个深度、稳健和强大的骨干来处理不同的输入 条件。
可训练副本连接到具有零卷积层的锁定模型,表示为 Z(·;·)。 具体来说,Z(·;·) 是一个 1 × 1 卷积层,权重和偏差都初始化为零。 为了构建 ControlNet,我们使用两个零卷积实例,参数分别为 θ_z1 和 θ_z2。 然后完整的 ControlNet 计算
其中 yc 是 ControlNet 块的输出。 在第一个训练步骤中,由于零卷积层的权重和偏置参数都初始化为零,因此等式 2 中的 Z(·;·) 项均计算为零,并且
这样,当训练开始时,有害噪声就无法影响可训练副本中神经网络层的隐藏状态。 此外,由于 Z(c;θz1) = 0 并且可训练副本还接收输入图像 x,因此可训练副本功能齐全,并保留大型预训练模型的功能,使其能够作为进一步学习的强大骨干。 零卷积通过消除初始训练步骤中作为梯度的随机噪声来保护该主干网。 我们在补充材料中详细介绍了零卷积的梯度计算。
我们使用稳定扩散 [71] 作为示例来展示 ControlNet 如何向大型预训练扩散模型添加条件控制。
ControlNet 结构应用于 U-Net 的每个编码器级别(图 3b)。 特别是,我们使用 ControlNet 创建 12 个编码块和 1 个稳定扩散中间块的可训练副本。 12个编码块有4种分辨率(64×64、32×32、16×16、8×8),每一个复制3次。 输出被添加到 U-Net 的 12 个跳跃连接和 1 个中间块。 由于稳定扩散是典型的 U-Net 结构,因此这种 ControlNet 架构可能适用于其他模型。
我们连接 ControlNet 的方式在计算上是高效的——由于锁定的副本参数被冻结,因此在最初锁定的编码器中不需要进行梯度计算来进行微调。 这种方法可以加快训练速度并节省 GPU 内存。 根据在单个 NVIDIA A100 PCIE 40GB 上的测试,与不使用 Control-Net 优化稳定扩散相比,使用 Control-Net 优化稳定扩散仅需要大约 23% 的 GPU 内存和每次训练迭代的 34% 的时间。
图像扩散模型学习逐步对图像进行去噪并从训练域生成样本。
给定输入图像 z0,图像扩散算法逐渐向图像添加噪声并生成噪声图像 z_t,其中 t 表示添加噪声的时间。 给定一组条件,包括时间步 t、文本提示 c_t 以及特定于任务的条件 c_f,图像扩散算法用下式学习网络 ϵ_θ 来预测添加到噪声图像 z_t 的噪声
其中 L 是整个扩散模型的总体学习目标。 该学习目标直接用于通过 ControlNet 微调扩散模型。
在训练过程中,我们随机将50%的文本提示 c_t 替换为空字符串。 这种方法提高了 ControlNet 直接识别输入条件图像(替代提示)中的语义(例如边缘、姿势、深度等)的能力。
在训练过程中,由于零卷积不会给网络增加噪声,因此模型应该始终能够预测高质量的图像。 我们观察到该模型并不是逐渐学习控制条件,而是突然成功地遵循输入条件图像; 通常优化步骤少于 10K。 如图 4 所示,我们称之为“突然收敛现象”。
我们可以通过多种方式进一步控制 ControlNet 的额外条件如何影响去噪扩散过程。
无分类器引导分辨率加权(Classifier-Free Guidance Resolution Weighting,CFG-RW)。
组合多个 ControlNet。 要将多个条件图像(例如 Canny 边缘和姿势)应用于稳定扩散的单个实例,我们可以直接将相应 ControlNet 的输出添加到稳定扩散模型中(图 6)。 这种组合不需要额外的加权或线性插值。
我们实现具有稳定扩散的 ControlNet 来测试各种条件,包括 Canny Edge [11]、深度图 [68]、法线图 [86]、M-LSD 线 [24]、HED 软边缘 [90]、ADE20K 分割 [95] 、Openpose [12] 和用户草图。 另请参阅补充材料,了解每种调节的示例以及详细的训练和推理参数。
图 1 显示了几种提示设置下生成的图像。 图 7 显示了我们在没有提示的情况下在各种条件下的结果,其中 ControlNet 稳健地解释了不同输入条件图像中的内容语义。
我们通过以下方式研究 ControlNet 的替代结构:
我们提供了 4 种提示设置来测试现实世界用户可能的行为:
用户研究。
与工业模型的比较。
条件重建和 FID 评分。
图 9 展示了基线和我们的方法(稳定扩散 + ControlNet)的视觉比较。 具体来说,我们展示了 PTIT [88]、Sketch-Guided Diffusion [87] 和 Taming Transformers [19] 的结果。 我们观察到 ControlNet 可以稳健地处理不同的条件图像并获得清晰的结果。
训练数据集大小的影响。 我们在图 10 中展示了 ControlNet 训练的稳健性。训练不会因有限的 1k 图像而崩溃,并且允许模型生成可识别的狮子。 当提供更多数据时,学习是可扩展的。
解释内容的能力。 我们展示了 ControlNet 从图 11 中的输入条件图像捕获语义的能力。
转移到社区模型。 由于 ControlNet 不会改变预训练 SD 模型的网络拓扑,因此它可以直接应用于稳定扩散社区中的各种模型,例如 Comic Diffusion [60] 和 Protogen 3.4 [16],如图 12 所示。
ControlNet 是一种神经网络结构,可学习大型预训练文本到图像扩散模型的条件控制。 它复用源模型的大规模预训练层来构建深度且强大的编码器来学习特定条件。 原始模型和可训练副本通过 “零卷积” 层连接,消除训练期间的有害噪声。 大量的实验验证了 ControlNet 可以在单个或多个条件下、有或没有提示的情况下有效地控制稳定扩散。 不同条件数据集上的结果表明,ControlNet 结构可能适用于更广泛的条件,并促进相关应用。
Zhang L, Agrawala M. Adding conditional control to text-to-image diffusion models[J]. arXiv preprint arXiv:2302.05543, 2023.
我们已经使用不同的基于图像的条件训练了多个 ControlNet 模型,这些模型可以以不同的方式控制大型预训练扩散模型。 表 1 列出了概述。
除非另有说明,否则我们使用 7.0 作为默认 cfg 比例。 我们使用 DDIM 作为采样器,并使用 20 个步骤对每个图像进行采样。
我们使用四种提示设置进行实验:
基于这四种基本的提示类型,我们提供了带有提示推导的实验:
由于 Stable Diffusion 依赖 CFG-Scale 来生成高质量图像,而 CFG-Scale 在推理过程中使用“ 负面提示(negative prompt)” 来指导去噪,因此我们使用以下设置:
我们研究了以下消融的架构,如图 1 所示:
我们在图 2、图 3 和图 4 中展示了这项消融研究的结果。我们可以看到,所提出的结构对于不同的提示设置相对稳健。
我们在图 6 中展示了在不使用任何类别指导或提示的情况下对 canny-edge-to-image 进行的比较。比较的方法是 Palette [14]、Taming Transformer [4]、LDM [13]、PITI [20] 以及我们的 Canny 模型。 这些方法是使用相同的 GPU 小时数在同一数据集上实现的。
在图 5 中,我们使用不同的提示设置与的同期工作 T2I-Adapter [10] 进行比较。
我们使用经过训练来控制 Stable Diffusion V1.5 和 Stable Diffusion V2.1 的两种不同模型,在图 7 中与 Stable Diffusion V2 的深度(depth)到图像进行了比较。
我们简要描述零卷积层的梯度计算。 考虑一个 1 × 1 卷积层,其权重为 W,偏差为 B,空间位置为 p,通道索引为 i。 给定一个输入映射 I ∈ R^(h×w×c),前向传播可以写为
由于零卷积层初始化为 W = 0 和 B = 0(即在任何优化步骤之前),因此在 I_(p,i) ≠ 0 的任何地方梯度都会变为
我们看到,虽然零卷积会导致特征项 I 的梯度变为零,但权重和偏差的梯度不受影响。 只要特征 I非零,权重 W 就会在第一次梯度下降迭代中被优化为非零矩阵。 值得注意的是,在我们的例子中,特征项是从数据集中采样的输入数据或条件向量,这自然确保了非零 I。
例如,考虑具有总体损失函数 L 和学习率 β_lr ≠ 0 的经典梯度下降,如果 “外部” 梯度
不为零,我们有
其中 W* 是一个梯度下降步骤后的权重,⊙是Hadamard乘积。 经过这一步,我们有
其中,非零梯度被获得,并且神经网络开始学习。 通过这种方式,零卷积成为一种独特类型的连接层,以学习的方式逐渐将参数从零增长到优化值。
我们在图 8 中展示了 “Canny Edge” 模型的结果。
我们在图 9 中展示了 “Hough 线” 模型的结果。
我们在图 11 中展示了 “HED 边界” 模型的结果。
我们在图 10 中展示了 “用户草图” 模型的结果。
我们在图 12 中展示了 “人体姿势 (Openpifpaf)” 模型的结果。
我们在图 16 中展示了 “语义分割 (COCO)” 模型的结果。
我们在图 15 中展示了 “语义分割 (ADE20K)” 模型的结果。
我们在图 17 中展示了 “法线贴图(Map)” 模型的结果。
我们在图 18 中展示了 “卡通线条画” 模型的结果。
我们展示了基于同一源图像的六种控制类型的结果,包括 Canny Edge、HED、M-LSD Line、Depth、Normal 和 Scribbles,如图 23、图 24、图 25 所示。
图 1 比较了未使用 ControlNet 训练的模型。 该模型的训练方法与 Stability 的深度到图像模型完全相同(向 SD 添加通道并继续训练)。
图 21 显示了训练过程。 我们看到一种 “突然收敛现象”,即模型突然能够遵循输入条件。 当使用 1e-5 作为学习率时,我们已经在训练过程中看到这种情况发生,通常在 5000 到 10000 步之间。
图 22 显示了使用不同数据集规模训练的基于 Canny 边缘的 ControlNet。
图 19 显示,如果扩散过程被掩蔽,则模型可以用于基于笔的图像编辑。
图 26 可以看出,当物体比较简单时,模型可以实现对细节的比较准确的控制。
图 27 显示,当 ControlNet 仅应用于 50% 扩散迭代时,用户可以获得不遵循输入形状的结果。
图 28 显示,当语义解释错误时,模型可能难以生成正确的内容。
图29展示了本文中用于边缘检测、姿态提取等的所有源图像。
本文提出一种神经网络架构 ControlNet,可将条件控制添加到大型预训练文本到图像扩散模型中。
本文使用预训练的 ControlNet 来控制稳定扩散,以 Canny edges、Hough lines、用户涂鸦、人体关键点、分割图、形状法线、深度和卡通线条图为条件。
使用无分类器引导分辨率加权(Classifier-Free Guidance Resolution Weighting,CFG-RW)来提高生成质量。
本文以稳定扩散作为示例(主干)来展示 ControlNet 如何向大型预训练扩散模型添加条件控制,完整架构如图 3 所示。
无分类器引导分辨率加权。 首先将条件图像添加到无分类器引导的条件输出中,然后根据每个块的分辨率将权重 w_i = 64/h_i(其中 h_i 是第 i 个块的大小(分辨率),例如 h1 = 8, h2 = 16, ..., h13 = 64)乘以稳定扩散和 ControlNet 之间的每个连接,从而降低无分类器引导的引导强度。
组合多个 ControlNet。 要将多个条件图像应用于稳定扩散的单个实例,可以直接将相应 ControlNet 的输出添加到稳定扩散模型中。 这种组合不需要额外的加权或线性插值。