论文阅读笔记-ControlNet

阅读论文《Adding Conditional Control to Text-to-Image Diffusion Models》时的笔记。

该文被收录于ICCV 2023期刊中。

代码地址:https://github.com/lllyasviel/ControlNet

摘要

提出模型:ControlNet,向 text2image 的大型扩散模型施加控制条件。

重新使用扩散模型深度和健壮的编码层。

控制条件:边缘edge、深度、分割segmentation、人体姿势。这些条件可以组合起来。

在小型(< 50K)和大型数据集(>1M)上都表现出了良好效果。

一、介绍

问题:原有扩散模型通过文本提示生成复杂图像很困难。包括布局、姿势、形状和形式等。

能够使用附加图像来实现更精细的空间控制吗?

提到了Image2Image Diffusion。(但下面直接转到Text2Image了)

采用空间掩码、图像编辑指令、通过微调的个性化等实现对text2image模型的控制。

a wider variety of problems like depth-to-image, pose-to-image, etc., require end-to-end
learning and data-driven solutions

以端到端的方式学习大型文本到图像扩散模型的条件控制是具有挑战性的。

问题:一些特殊情况下的数据集较小(<100K),难以训练得到稳定的模型。会导致过度拟合和灾难性的遗忘。

ControlNet:端到端的。 学习内容:文本到图像扩散模型的条件控制(?)

通过锁定参数并制作其编码层的可训练副本来保持大型模型的质量和能力

将大型预训练模型视为学习各种条件控制的强大支柱,可训练副本和原始锁定模型用零卷积层连接,将权重初始化为零,以便它们在训练过程中逐渐增长。保证了在训练开始时不会将有害噪声添加到大扩散模型的深层特征中,并保护了可训练副本中的大规模预训练骨干不会受到此类噪声的破坏。

ControlNet可以通过各种条件输入得到稳定的生成图像。边缘、Houg、涂鸦、人体关键点、分割地图、形状法线、深度等。同时ControlNet在不同大小的训练集上都有鲁棒的效果。

总结:

(1) ControlNet,通过微调将空间局部化的输入条件添加到预先训练的文本到图像的扩散模型中

2)提出了预先训练的控制网络来控制稳定的扩散,条件包括Canny边、Hough线、用户涂鸦、人体关键点、分割地图、形状法线、深度和卡通线条画

3)通过与几种替代体系结构的对比实验验证了该方法,并对不同任务中先前的几个baseline进行了研究。

二、相关工作

2.1 微调神经网络

如何微调神经网络?

最简单的方法:用额外数据集训练,但会带来不少问题。所以目前聚焦于策略的寻找。

超级神经网络(HyperNetwork):源于NLP,通过训练一个小的递归神经网络来影响较大的神经网络的权重。该技术后面被应用到Diffusion中。具体可参加下面这篇文章。

深入解析Stable Diffusion(四)——Hypernetworks原理与实践-百度开发者中心 (baidu.com)

Adapter:通过模块嵌入将预训练好的Transformer转为其他任务。广泛应用于incremental learning 和 domain adaptation。最近Adapter在VIT与VIT-Adapter中也取得了良好成果。

Addictive Learning:通过线性地混合冻结模型和添加的网络的输出来学习额外的功能

LoRA:Low-Rank Adaption,通过学习参数与低阶矩阵的偏移量来防止灾难性遗忘。

Zero-initialized Layer:结合ControlNet,在扩散模型中对卷积层的初始权值进行缩放以改进训练(但是ControlNet不是这篇论文提出来的东西吗?)。ProGan[36]、StyleGan[37]和Noise2Noise中也讨论了对初始卷积层权重进行处理。

2.2 图像扩散模型

经典的图像扩散模型:Latnet Diffusion Model(LDM)在潜在图像空间[19]中执行扩散步骤。

文本到图像:通过预先训练的语言模型(如CLIP)将文本输入编码为潜在向量,从而获得图像生成结果。

其它经典模型:DALL-E2,Stab Diffusion

控制图像扩散模型:实现个性化。

一些方法:MakeAScene分割编码、SpaText映射掩码、GLIGEN学习注意力层的参数。

2.3 图像到图像

Conditional GANs 与 Transformer 可以学习不同图像域之间的映射。

其它示例:Taming Transformer、StyleGANs……

三、介绍ControlNet

ControlNet:一种神经网络体系架构,(空间局部化的、特定于任务的)图像条件来增强大型预先训练的文本到图像扩散模型。

3.1节中介绍ControlNet的基本结构,然后在3.2节中描述如何将ControlNet应用于Diffusion稳定扩散。3.3介绍training过程,3.4节说明推理过程中的额外考虑因素,例如多个ControlNet。

3.1 ControlNet结构

特定名词:网络块 Network block,神经网络组合起来的一系列特定层,如resnet block,transformer block。

设神经网络块的参数为Θ,将输入特征映射x变换为另一特征映射y,公式如下所示:
$$
y=F(x;\theta)
$$
其中,xy都是2d feature maps,参数为 h×w×c,height,width,channels.

如何添加ControlNet:冻结参数 $\theta$,同时复制该neural block 到有参数$\theta_c$的可训练副本

可训练副本连接到具有零卷积层的锁定模型,表示为$Z(·;·)$。具体来说,$Z(·;·)$是一个1×1卷积层,权重和偏置都初始化为零。

简单来说,ControlNet会保留并固定原始模型参数,在旁侧增加一个模块分支,该分支的参数基于原始模型参数初始化,并在模块前后增加 zero convolution(1x1 卷积,weight 和 bias 由 0 初始化)层。

复制了就意味着在优化之前不会对深层神经特征造成任何影响。任何神经网络块的能力、功能和结果质量都得到了保留。

ControlNet对比

3.2 Stable Diffusion with ControlNet

Stable Diffusion本质上是由一个UNet,一个Encoder,一个middle-block和一个skip-connected decoder组成。

Stable Diffusion中,编码器和解码器都包含12个块,完整模型包含25个块,包括一个中间块。

在25个块中,8个块是上下采样卷积层,其他17个块是主块,每个块包含4个resnet层和2个Vision Transformer(ViT)。每个ViT又会包含几个交叉注意和自我注意机制。文本提示使用 CLIP 文本编码器进行编码。

ControlNet实例

ControlNet结构适用于U-net的每个编码器级别。稳定扩散是一个典型的U型网络结构,这种ControlNet架构可能适用于其他模型。

该论文连接ControlNet的方式很高效,由于锁定的复制参数被冻结,在最初锁定的编码器中并不需要梯度计算来进行微调。

同时该方法可以加快训练速度并节省 GPU 内存。在单个 NVIDIA A100 PCIE 40GB 上进行测试时,使用 ControlNet 优化稳定扩散在每次训练迭代中仅多约 23% 的 GPU 内存和多 34% 的时间。

图像扩散模型学习渐进地对图像进行去噪,并从训练域生成样本。去噪过程可以发生在像素空间或从训练数据编码的潜在空间中(ldm?)

目前的Stable Diffusion广泛采用的方法是latent images。latent空间中的图像已被证明可以稳定训练过程。在处理过程中,Stable Diffusion使用类似于VQ-GAN 的预处理方法将512 × 512图像转换为64 × 64 的latent图像。

先将512 × 512的输入大小转换为64 × 64的特征空间向量(与Stable Diffusion大小相匹配),再使用卷积核4 × 4和2 × 2步幅的四个卷积层的小型网络E(由ReLU激活,分别使用16、32、64、128个通道,用高斯权重初始化,并与完整模型联合训练),将图像空间$c_i$编码为特征空间向量$c_f$,$c_f$紧接着就会被传递给ControlNet.

个人理解:感觉事实上就仅仅是应用ControlNet到Diffusion的U-Net上……

3.3 训练过程

给定输入图像$z_0$,图像扩散算法逐渐将噪声添加到图像并产生噪声图像$z_t$,t是噪声添加次数。

给的条件包括时间步长t、文本提示$c_t$ (不同于上文的图像空间) 以及特定于任务的条件$c_f$。然后噪声预测网络 $\epsilon_\theta$ 会预测噪声。(和最初始的diffusion model 没啥区别……)

训练过程中会随机将50%的文本提示$c_t$替换为空字符串。这种方法增加了ControlNet直接识别输入条件图像中的语义的能力。

训练过程中,零卷积不会给增加噪声,因此模型始终能够预测高质量的图像。但模型并没有逐渐学习控制条件,而是突然成功地跟随输入条件图像。通常在不到10 K的优化步骤中,称为“突然收敛现象”。

突然收敛

3.4 推断

如何进一步控制ControlNet的额外条件?

无分类器指导分辨率加权(?)Stable Diffusion 靠Classifier-Free Guidance (CFG) 生成高质量图像,CFG的公式是 $\epsilon_{prd} = \epsilon_{uc} + β_{cfg}(\epsilon_{c} − \epsilon_{uc})$ 。

$\epsilon_{prd}$:模型的最终输出 $\epsilon_{uc}$:无条件输出 $\epsilon_{c}$:条件输出 $β_{cfg}$:用户指定的权重。

通过ControlNet添加条件图像时,可以同时添加到上面的无条件输出和条件输出部分。

在一些特殊情况下,即使没有提示词prompt时,将其添加到无条件输出和条件输出将完全删除CFG指导;仅使用条件输出也可以使得到的结果非常好。

论文给出的解决方案是首先将条件图像添加到条件输出,然后根据每个块的分辨率$w_i = 64/h_i$,将权重$w_i$乘以SD和ControlNet之间的每个连接,其中$h_i$是第i个块的大小,如$h_1$ = 8,$h_2$ = 16,…,$h_{13}$ = 64。

多个ControlNet:要应用多个调节图像添加到稳定扩散的单个实例,可以直接将相应ControlNet的输出添加到稳定扩散模型,如下图。这种合成不需要额外的加权或线性插值。

多个条件的组合。这里展示了同时使用深度和姿势

复现可参考博客:Adding Conditional Control to Text-to-Image Diffusion Models——【代码复现】_controlnet代码复现-CSDN博客

四、实验部分

最终实验结果如下图所示。

实验结果

下图是有提示情况下生成的一系列图像。

with prompts

下图是无提示,有条件生成的一系列图像。

with conditions without prompts

在测试部分,作者团队提出了4个提示设置来测试现实的可能行为,分别是无提示、提示不充分、改变语义的冲突提示、完美提示。

作为对照组的轻量级 ControlNet-lite 不够强大,无法解释条件图像,并且在不足和无提示条件下失败。

ControlNet与轻量级 ControlNet-lite 差异对比如下图:
两种网络的对比差异

质量评估

作者团队对20个未见过的手绘草图进行采样,并将每个草图实施5种采样方法:PIPT [88]的草图模型、使用默认边缘引导比例(β = 1.6)的草图引导扩散(SGD)、使用相对较高的边缘引导比例(β = 3.2)的SGD、ControlNet-lite、ControlNet。

我们让12位用户对这20组5个结果分别按照“显示图像的质量”和“对草图的保真度”进行排名。通过这种方式,我们获得了100个结果质量排名和100个条件保真度排名。我们使用平均人类排名(AHR)作为偏好度量。结果证明 ControlNet效果是最好的。

同时,使用Frechet Inception Distance(FID)[28]来测量使用不同分割条件方法随机生成的512×512图像集的分布距离,结果同样证明 ControlNet效果是最好的。

五、总结

ControlNet是一种神经网络结构,它可以学习大型预训练文本到图像扩散模型的条件控制。

结合代码精讲:

注:huggingface社区上的ControlNet与官方源码并不一致,以官方源码为准。

在官方源码中,比较关键的代码是cldm.py,位于cldm\cldm.py下,主要的类是ControlledUnetModel、ControlNet、ControlLDM类。

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

请我喝杯咖啡吧~

支付宝
微信