【论文阅读】ControlNet: Adding Conditional Control to Text-to-Image Diffusion Models

文章介绍了一种名为ControlNet的技术,它允许在大型预训练文本-图像扩散模型中加入空间条件控制,通过微调和零卷积设计,实现了在保持模型生成能力的同时添加额外条件信息,且对数据需求和计算资源要求较低。
摘要由CSDN通过智能技术生成

ControlNet: 为文本到图像扩散模型添加条件控制。

paper:https://arxiv.org/pdf/2302.05543.pdf

code:https://github.com/lllyasviel/ControlNet

目录

1. 介绍

3. 方法

3.1. ControlNet

3.2 ControlNet for Text-to-Image Diffusion

3.3. Training

3.4 Inference

4. 实验

5. 问题


提出 ControlNet,用于将空间条件控制添加到大型预训练的文本-图像扩散模型中。通过让用户提供附加图像(例如边缘图,人体姿势骨架,分割图,深度等),来实现更细粒度的空间控制。也可以通过微调,将空间局部化的输入条件添加到预训练的文本到图像扩散模型中。

 图1:用学习条件控制稳定扩散。ControlNet允许用户添加Canny边缘(上)、人体姿势(下)等条件,以控制大型预训练扩散模型的图像生成。默认结果使用提示“高质量,详细和专业的图像”。用户可以给出提示。

1. 介绍

要加入额外的condition,最简单粗暴的方法就是根据不同的condition重新fine tune预训练的大模型,但是这常常需要比较多的数据和较多的计算资源。例如数据量过小的话容易导致过拟合并破坏预训练好模型的表达能力。那么我们应该怎么在避免上述问题的前提下,实现保持预训练模型【强大的生成能力】的同时【加入额外的条件信息】呢?

本文提出在预训练大模型的基础上加上一个ControlNet,ControlNet负责学习将额外的条件信息映射进参数固定的预训练大模型中。如图1所示,左边的灰色模块就是预训练好的stable diffusion,它的参数是固定不变的。对于ControlNet,它包含与stable diffusion模型一致的Encoder Block和Middle Block,并且初始化的参数是从预训练好的大模型中拷贝过来的。ControlNet的参数是需要训练fine tune的。fine tune完的ControlNet可以将额外的condition信息映射到参数固定的stable diffusion中。由于stable diffusion模型参数一致保持不变,它将维持强大的生成能力,而且不会因为fine tune的数据集太小而出现过拟合的问题。

整体思想:保留并固定原始大模型参数,在旁侧增加一个模块分支,该分支的参数基于原始模型参数初始化,并在模块前后增加 zero convolution(1x1 卷积,weight 和 bias 由 0 初始化)层。好处是当 ControlNet 应用于某些神经网络块时,在任何优化之前,它不会对深层神经特征造成任何影响。任何神经网络块的能力、功能和结果都得到保留,进一步的优化都将与微调一样快。


3. 方法

3.1. ControlNet

ControlNet通过操作神经网络块的输入条件,来进一步控制整个神经网络的行为。

“网络块”,指的是一组经常使用的单元组合在一起,构建神经网络的神经层,例如“resnet”块、“conv-bn-relu”块、多头注意力块等。

以2D特征为例,给定一个特征图 ,一个具有一组参数Θ的神经网络块F(⋅;Θ)将 x 转换为另一个特征图 y,形状为 y=F(x;Θ)。如图:

将原始参数和新参数称为“锁定副本”和“可训练副本”。动机是避免在数据集较小时过拟合,并保持从数亿张图像中学习到的大型模型的质量。

神经网络块通过“零卷积”连接,即使用零进行初始化的 1×1 卷积层,包括权重和偏置。用 Z(⋅;⋅)表示零卷积操作,用两个参数实例 Θz1​,Θz2​ 组成ControlNet结构。应用零卷积时,训练的第一步是用锁定副本的信息。零卷积通过在初始训练步骤中将随机噪声消除为梯度,从而保护了网络的主干。

原始网络:

Θ代表neural network block的参数, y表示经过neural network block后的特征。添加了control后, 网络变为

在初始化训练的时候, zero convolution的weight和bias会被初始化为0, 因此ControlNet具有以下的特点:

实际上是为了让初始化的时候添加了ControlNet的模型和原始的模型效果是一样的, 后续再慢慢finetune。可以简化成下面的表达式:

yc是加上ControlNet的输出, 而是原始的输出, 模型初始化时两者是相等的。

 在对网络块应用ControlNet之前,它不会对深层神经特征产生任何影响。任何神经网络块的能力、功能和结果质量都完全保留,任何进一步的优化将变得与微调一样快速(与从头开始训练这些层相比)。

3.2 ControlNet for Text-to-Image Diffusion

本节以Stable Diffusion 为例,介绍了如何使用ControlNet来控制具有任务特定条件的大型扩散模型。

Stable Diffusion是一个在数十亿张图像上训练的大型文本-图像扩散模型,本质上是个U-Net,包括一个编码器、一个中间块和一个跳连解码器。编码器和解码器都有12个块,完整的模型包含25个块。在这些块中,有8个块是下采样或上采样的卷积层,17个块是主要块,每个块包含四个ResNet层和两个ViT。每个ViT包含几个交叉注意力。文本使用CLIP进行编码,扩散时间步使用位置编码进行编码。

Stable Diffusion 模型结合 ControlNet 的形式如下

  • 输入图片参考 VQ-GAN 的方式,由 512x512 预处理到 64x64,以进行稳定训练
  • Condition 会通过四层的卷积层(4x4kernel,2x2stride) 同样由 512x512 处理到 64x64

由于原始权重被锁定,训练时不需要在原始编码器上进行梯度计算。这可以加快训练速度并节省GPU内存,因为可以避免原始模型上一半的梯度计算。使用ControlNet 训练稳定的扩散模型只需要在每次训练迭代中增加大约 23% 的GPU内存和 34% 的时间(在单个Nvidia A100 PCIE 40G上测试)。

1.为什么在可训练副本上训练会更快?是可以选择一部分的参数进行训练吗?比如选择锁定encoder block3,是只计算encoder3到decoder3之间的参数,外面的block1、2保持不变吗?

2.训练完这个副本之后,是通过零卷积,将这个副本和原始模型再连接起来吗?

3.这种ControlNet是不是只能作用于这种U型结构的网络?


3.3. Training

给定一个图像 z0​,扩散算法逐渐向图像添加噪声,产生一个带有噪声的图像  zt​,其中 t 表示添加噪声的次数。当 t 足够大时,图像逼近纯噪声。给定时间步长 t、文本提示 ct​ 以及任务特定条件 cf​,图像扩散算法学习一个网络 θ 来预测添加到噪声图像 zt 中的噪声:

L是整个扩散模型的总体学习目标。和原始的stable diffusion是一样的, 是每次生成噪声和实际噪声的差值。区别在于加入了ControlNet新加的控制条件cf。其他的参数都和stable diffusion一样, zt代表噪声图片, t 代表迭代次数, ct 代表text prompt。

在训练过程中,随机将50%的文本提示ct替换为空字符串。这有助于ControlNet从输入条件图中识别语义内容,例如Canny边缘图或人工涂鸦等。因为当SD模型看不到提示时,编码器倾向于从输入控制图中学习更多的语义,作为提示的替代。

改进ControlNet训练的策略

特别是在计算设备非常有限的极端情况下(例如笔记本电脑)或计算能力非常强大的情况下(例如有大规模GPU的计算集群上)。

Small-Scale Training:部分中断ControlNet和稳定扩散之间的连接可以加速收敛。即把上图中 ControlNets 和 Stable Diffusion 网络的连接断开,只连接 Middle Block 可以提升训练速度 1.6 倍(RTX 3070TI笔记本GPU上测试)。当模型的结果和条件之间有关联时,可以重新连接这些断开的连接,进一步的训练,精确控制。
Large-Scale Training:大规模训练,是既有强大的计算集群(至少8个Nvidia A100 80G或同等),又有大数据集(至少100万个训练图像对)的情况。这通常适用于数据容易获取的任务,例如Canny检测到的边缘图。在这种情况下,由于过拟合的风险相对较低,可以首先训练 ControlNets 足够多的迭代次数(通常超过50k步),然后解锁SD的所有权重,并将整个模型作为一个整体进行联合训练。将原始U-Net模型中的被冻结参数的decoder部分也参与模型训练。得到更加针对特定问题的模型。


3.4 Inference

提供了几种使用不同基于图像的条件来控制大规模扩散模型的ControlNet实现。

    Canny边缘:使用Canny边缘检测器(使用随机阈值)获取了300万个边缘-图像标题对。该模型在Nvidia A100 80G上进行了600个GPU小时的训练。基础模型是稳定扩散1.5。
   

    Canny边缘(改变):对上述Canny边缘数据集的图像分辨率进行了排序,并采样了包含1,000、10,000、50,000、500,000个样本的子集。我们使用相同的实验设置来测试数据集规模的影响。显然训练数据越大效果越好

    Hough线:我们使用基于学习的深度霍夫变换从Places2中检测直线,然后使用BLIP生成标题。我们获得了60万个边缘-图像-标题对。我们使用上述Canny模型作为起始检查点,并在Nvidia A100 80G上进行了150个GPU小时的训练。

    HED边界:我们使用HED边界检测从互联网上获取了300万个边缘-图像-标题对。该模型在Nvidia A100 80G上进行了300个GPU小时的训练。基础模型是稳定扩散1.5。

    用户草图:我们使用HED边界检测和一组强大的数据增强方法(随机阈值、随机屏蔽一定百分比的草图、随机形态变换和随机非极大值抑制)从图像中合成人类涂鸦。我们从互联网上获取了50万个涂鸦-图像-标题对。我们使用上述Canny模型作为起始检查点,并在Nvidia A100 80G上进行了150个GPU小时的训练。注意,我们还尝试了一种更“类似人类”的合成方法,但该方法比简单的HED方法慢得多,我们没有注意到明显的改进。

    人体姿势:我们使用基于学习的姿势估计方法从互联网上“找到”人类,使用一个简单的规则:具有人体的图像必须至少检测到整个身体关键点的30%。我们获得了8万个姿势-图像-标题对。注意,我们直接使用可视化的带有人体骨架的姿势图像作为训练条件。该模型在Nvidia RTX 3090TI上进行了400个GPU小时的训练。基础模型是稳定扩散2.1。

    人体姿势: 我们使用基于学习的姿势估计方法在上述Openpifpaf设置中找到互联网上的人类,使用相同的规则。我们获得了20万个姿势-图像-标题对。注意,我们直接使用可视化的带有人体骨架的姿势图像作为训练条件。该模型在Nvidia A100 80G上进行了300个GPU小时的训练。其他设置与上述Openpifpaf相同。

4. 实验

4.1 消融实验

8(b)用高斯权值初始化的标准卷积层替换零卷积,来研究ControlNets的替代结构

8(c)用单个卷积层替换每个块的可训练副本,称之为ControlNet-lite。

提出了4种提示设置来测试现实世界用户可能的行为:(1)无提示;(2)提示不够,没有完全覆盖调理图像中的对象,如本文默认的提示“高质量、详细、专业的图像”;(3)改变条件反射图像语义的冲突提示;(4)描述必要内容语义的完美提示.

结果:轻量级的ControlNet-lite(图8c)不够强大,无法解释条件图像,并且在不充分和没有提示的条件下失败。当替换零卷积时(图8b),ControlNet的性能下降到与ControlNet-lite大致相同,这表明在微调期间可训练副本的预训练骨干被破坏。

更多的应用,下面的图展示的是把原图的一部分mask掉, 然后随便画几笔草图, 生成的图就是没mask掉的部分结合草图的完成效果。

5. 问题

  1. 1.为什么在可训练副本上训练会更快?刚开始训练ControlNet时,用的还是原始模型的参数吧,是因为可以选择一部分的网络块进行训练吗?比如选择锁定encoder block3,是只计算encoder3到decoder3之间的参数,而block1、2保持不变吗?
  2. 2.训练完副本块之后,如何将副本块和原始模型再连接起来,将学习到的额外的条件信息映射进参数固定的预训练大模型中?
  3. 3.为什么要在在副本前后添加零卷积?将权重和偏置初始化为零,不会导致梯度消失、局部最优解的问题吗?训练一个step参数就变化了,初始化zero或者non-zero很重要吗?
  4. 4. 这种ControlNet是不是只能作用于这种U型结构的网络?是否可以扩展到transformer之类的结构?

总结:ControlNet用于为大规模预训练的文本到图像扩散模型学习条件控制。改进很简洁, 只需要较小的数据集就可以用作训练(50k, 相比diffusion model亿级别的确实小不少)。用的计算资源较少, 并且做一些参数调整后甚至可以在笔记本上做训练。ControlNet在stable diffusion中已经开源了, 并且在webui上很容易添加和尝试。

  • 主要创新点是提出的 HyperNetwork 设计有节省算力的效果
  • HyperNetwork 主要作用于 Unet 类型的卷积网络,转换到一些 LLM 的transformer 结构中可能需要一定适配

参考:ControlNet: Adding Conditional Control to Text-to-Image Diffusion Models-CSDN博客

Adding Conditional Control to Text-to-Image Diffusion Models_kebijuelun的博客-CSDN博客

ControlNet: Adding Conditional Control to Text-to-Image Diffusion Models - 知乎


stable diffsion(五)——ControlNet原理与实践 - 知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值