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

news/2024/11/15 5:54:27/

Adding Conditional Control to Text-to-Image Diffusion Models (Paper reading)

Lvmin Zhang and Maneesh Agrawala, Stanford University, arXiv, Cited:113, Code, Paper

1. 前言

我们提出了一种名为ControlNet的神经网络结构,用于控制预训练的大规模扩散模型,以支持额外的输入条件。ControlNet以端到端的方式学习任务特定的条件,并且即使训练数据集较小(< 50k),学习效果也很稳健。此外,训练ControlNet的速度与微调扩散模型的速度一样快,而且该模型可以在个人设备上进行训练。或者,如果有强大的计算集群可用,该模型可以扩展到大量(百万到十亿级)的数据。我们报告了使用ControlNet扩展稳定扩散等大规模扩散模型的结果,以实现诸如边缘映射、分割映射、关键点等条件输入。这可以丰富控制大规模扩散模型的方法,并进一步促进相关应用。

2. 问题声明

随着大型文本到图像模型的出现,仅凭用户输入的简短描述性提示即可生成具有视觉吸引力的图像。在输入一些文本并获得图像后,我们可能会自然而然地提出几个问题:这种基于提示的控制是否满足我们的需求?例如,在图像处理中,考虑到许多既定的、具有明确问题表述的任务,这些大型模型是否可以应用于促进这些特定任务?我们应该构建什么样的框架来处理广泛的问题条件和用户控制?在特定任务中,大型模型是否能保留从数十亿张图像中获得的优势和能力?

为了回答这些问题,我们研究了各种图像处理应用,并得出了三个发现。首先,任务特定领域中可用的数据规模并不总是与图像文本领域中的数据规模一样大。许多特定问题(例如对象形状/法线、姿势理解等)的最大数据集大小通常不超过100k,即比LAION5B小5×104倍。这将要求具有稳健神经网络训练方法,以避免过拟合并在大型模型针对特定问题进行训练时保持泛化能力。

其次,在使用数据驱动的解决方案处理图像处理任务时,并不总是可以使用大型计算集群。这使得快速训练方法对于在可接受的时间和内存空间内优化大型模型以适应特定任务非常重要(例如在个人设备上)。这还需要利用预训练权重以及微调策略或迁移学习。

第三,各种图像处理问题具有不同形式的问题定义、用户控制或图像注释。在解决这些问题时,尽管可以以“过程化”的方式调节图像扩散算法,例如限制去噪过程、编辑多头注意力激活等,但这些手工制定的规则行为基本上是由人类指令规定的。考虑到一些特定任务,如深度到图像、姿势到人类等,这些问题基本上需要将原始输入解释为对象级或场景级的理解,使得手工制定的过程化方法不太可行。在许多任务中实现学习的解决方案是不可或缺的,需要端到端学习。

2. 整体思想

大模型微调的一种范式,用另一个path来辅助大模型,主要的思想是固定大模型,copy大模型中去噪器的一些结构,然后对于不同任务训练这些结构,condition使用的是edge等,可以控制生成一些内容。

4. 方法

ControlNet是一种神经网络架构,可以通过任务特定条件增强预训练的图像扩散模型。我们在第4.1节介绍了ControlNet的基本结构,并解释了每个部分的动机。在第4.2节中,我们详细说明了将ControlNet应用于图像扩散模型的方法,以Stable Diffusion为例。在第4.3节中,我们详细描述了学习目标和通用训练方法,然后在第4.4节中描述了在极端情况下改善训练的几种方法,例如在一台笔记本电脑上进行训练或使用大规模计算集群。最后,在第4.5节中,我们提供了几个具有不同输入条件的ControlNet实现的详细信息。

4.1 ControlNet

ControlNet通过操作神经网络块的输入条件来进一步控制整个神经网络的行为。在这里,“网络块”指的是一组作为经常使用的单元组合在一起构建神经网络的神经层,例如“resnet”块、“conv-bn-relu”块、多头注意力块、变换器块等。以2D特征为例,给定一个特征图 x ∈ R h × w × c x ∈ R^{h×w×c} xRh×w×c,其中 h , w , c {h, w, c} h,w,c表示高度、宽度和通道数,一个具有一组参数 Θ Θ Θ的神经网络块 F ( ⋅ ; Θ ) F(·; Θ) F(⋅;Θ) x x x转换为另一个特征图 y y y,其形状为 y = F ( x ; Θ ) y=F(x; Θ) y=F(x;Θ)。如图:
在这里插入图片描述

零卷积是权重初始化为0

我们将 Θ Θ Θ中的所有参数锁定,然后将其克隆为一个可训练的副本 Θ c Θ_c Θc。复制后的 Θ c Θ_c Θc将与外部条件向量 c c c一起进行训练。在本文中,我们将原始参数和新参数称为“锁定副本”和“可训练副本”。采用这种复制的动机是为了避免在数据集较小时出现过拟合,并保持从数十亿张图像中学习到的大型模型的产品可用质量。神经网络块通过一种称为“零卷积”的独特类型的卷积层连接,即使用零进行初始化的 1 × 1 1×1 1×1卷积层,包括权重和偏置。我们用 Z ( ⋅ ; ⋅ ) Z(·; ·) Z(⋅;⋅)表示零卷积操作,并使用两个参数实例 Θ z 1 , Θ z 2 Θ_{z1},Θ_{z2} Θz1Θz2组成ControlNet结构。应用0卷积时,我们训练的第一步是完全使用了锁定副本的信息。在第一次训练步骤中,神经网络块的可训练副本和锁定副本的所有输入和输出与不存在ControlNet时的输入和输出一致。换句话说,在对某些神经网络块应用ControlNet之前,在任何优化之前,它不会对深层神经特征产生任何影响。任何神经网络块的能力、功能和结果质量都完全保留,任何进一步的优化将变得与微调一样快速(与从头开始训练这些层相比)。

4.2 ControlNet in Image Diffusion Model

我们以Stable Diffusion [44]作为例子,介绍了如何使用ControlNet来控制具有任务特定条件的大型扩散模型。Stable Diffusion是一个在数十亿张图像上训练的大型文本到图像扩散模型。该模型本质上是一个U-Net,包括一个编码器、一个中间块和一个跳连解码器。编码器和解码器都有12个块,完整的模型包含25个块(包括中间块)。在这些块中,有8个块是下采样或上采样的卷积层,17个块是主要块,每个块包含四个ResNet层和两个Vision Transformer(ViT)。每个ViT包含几个交叉注意力和/或自注意力机制。文本使用OpenAI CLIP进行编码,扩散时间步使用位置编码进行编码。
在这里插入图片描述

Stable Diffusion使用类似于VQ-GAN的预处理方法,将整个512×512的图像数据集转换为较小的64×64的“潜在图像”,以进行稳定训练。这需要使用ControlNet将基于图像的条件转换为64×64的特征空间,以匹配卷积的大小。我们使用一个小型网络 E ( ⋅ ) E(·) E(),包含四个卷积层,内核大小为 4 × 4 4×4 4×4,步长为 2 × 2 2×2 2×2(通过ReLU激活,通道数为16、32、64、128,使用高斯权重初始化,与完整模型一起进行联合训练),将图像空间的条件 c i c_i ci编码为特征图,大小为 64 × 64 64×64 64×64。具体而言,我们使用ControlNet创建了Stable Diffusion的12个编码块和1个中间块的可训练副本。这12个块分布在4个分辨率(64×64、32×32、16×16、8×8)中,每个分辨率有3个块。输出被添加到U-net的12个跳跃连接和1个中间块中。由于SD是一个典型的U-net结构,这种ControlNet架构很可能在其他扩散模型中也可以使用。

4.3 训练

给定一个图像 z 0 z_0 z0,扩散算法逐渐向图像添加噪声,产生一个带有噪声的图像 z t z_t zt,其中 t t t表示添加噪声的次数。当 t t t足够大时,图像逼近纯噪声。给定一组条件,包括时间步长 t t t、文本提示 c t c_t ct以及任务特定条件 c f c_f cf,图像扩散算法学习一个网络 θ θ θ来预测添加到噪声图像 z t z_t zt中的噪声:
L = E z 0 , t , c t , c f , ϵ ∼ N ( 0 , 1 ) [ ∣ ∣ ϵ − ϵ θ ( z t , t , c t , c f ) ∣ ∣ 2 2 ] \mathcal{L}=\mathbb{E}_{z_0,t,c_t,c_f,\epsilon \sim N(0,1)}[||\epsilon-\epsilon_{\theta}(z_t,t,c_t,c_f)||^2_2] L=Ez0,t,ct,cf,ϵN(0,1)[∣∣ϵϵθ(zt,t,ct,cf)22]
在训练过程中,我们随机将50%的文本提示ct替换为空字符串。这有助于ControlNet从输入条件图中识别语义内容,例如Canny边缘图或人工涂鸦等。这主要是因为当SD模型看不到提示时,编码器倾向于从输入控制图中学习更多的语义作为提示的替代。

4.4 改进训练

我们讨论了几种改进ControlNet训练的策略,特别是在计算设备非常有限的极端情况下(例如,在笔记本电脑上)或计算能力非常强大的情况下(例如,在具有大规模GPU的计算集群上)。在我们的实验中,如果使用了这些策略,我们将在实验设置中进行提及。

小规模训练:当计算设备有限时,我们发现部分断开ControlNet和Stable Diffusion之间的连接可以加快收敛速度。默认情况下,我们将ControlNet连接到“SD Middle Block”和“SD Decoder Block 1,2,3,4”,如图3所示。我们发现断开与解码器1,2,3,4的连接,仅连接中间块可以将训练速度提高约1.6倍(在RTX 3070TI笔记本GPU上测试)。当模型在结果和条件之间显示合理的关联时,可以重新连接这些断开的连接,进行进一步的训练以便于精确控制。

大规模训练:在这里,大规模训练是指同时具有强大的计算集群(至少8个Nvidia A100 80G或等效的GPU)和大规模数据集(至少100万个训练图像对)的情况。这通常适用于数据易于获取的任务,例如Canny检测到的边缘图。在这种情况下,由于过拟合的风险相对较低,我们可以先对ControlNet进行足够多的迭代训练(通常超过5万步),然后解锁Stable Diffusion的所有权重,联合训练整个模型。这将导致更加针对特定问题的模型

4.5 实现

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

  1. Canny边缘:我们使用Canny边缘检测器(使用随机阈值)从互联网上获取了300万个边缘-图像标题对。该模型在Nvidia A100 80G上进行了600个GPU小时的训练。基础模型是稳定扩散1.5。
    在这里插入图片描述

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

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

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

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

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

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


http://www.ppmy.cn/news/223513.html

相关文章

曲面显示器和平面显示器玩游戏买哪个好

如果你的显示器用途是工作类为主&#xff1a;平面设计&#xff0c;摄影&#xff0c;艺术等&#xff0c;小A推荐你使用平面显示器。原因有3点&#xff1a; 选曲面显示器还是平面显示器这些点很重要 看过你就懂了 http://www.adiannao.cn/du 1、 大家在平时的手机&#xff0c;电视…

买显示器须知

第一次买显示器&#xff0c;所以查询了一些参数 1、曲面屏和平面屏哪个好&#xff1f; https://baijiahao.baidu.com/s?id1620972584626708675&wfrspider&forpc 相比传统的平面显示器&#xff0c;曲面显示器更加贴合人眼的生理弧度&#xff0c;在观看时能够大幅提升…

显示器切换服务器用什么键,电脑显示器切换器购买要注意什么 哪款电脑切换器好用...

对于电脑显示器切换器这个东西很多人都不了解&#xff0c;这其实就是电脑切换器&#xff0c;电脑切换器应用于键盘、显示器和鼠标&#xff0c;是指管理员通过这三种来控制多个服务器&#xff0c;那么电脑显示器切换器购买要注意什么?哪款电脑切换器好用呢? 一、电脑显示器切换…

购买二手MacBook是否正品,请仔细检查以下情况,可防止翻车

随着循环经济的发展&#xff0c;购买二手苹果Mac是一个很好的选择。 不论是购买MacBook还是购买iMac&#xff0c;都是一个耗时的经历。而在购买二手Mac&#xff0c;如果学会检查Mac是正品且功能没问题至关重要。 一、系统 在购买二手苹果电脑时&#xff0c;一定要确认Mac是否…

计算机二手配件,电脑二手零件那些值得买,哪些不值得买?买二手零件要注意些啥?...

每年都有更好的硬件&#xff0c;来提供给消费者选择&#xff0c;在这样的环境下有趣的是电脑的二手市场也非常的活跃&#xff0c;每天都有数不清的二手零件在交易&#xff0c;那为什么会有这么多人在关注二手市场呢&#xff1f;原因是二手零件&#xff0c;比全新的零件&#xf…

买二手服务器选什么型号的,二手服务器主机值得买吗

二手服务器主机值得买吗 内容精选 换一换 该API用于获取集群下所有节点池。集群管理的URL格式为:https://Endpoint/uri。其中uri为资源路径,也即API访问的路径集群管理的URL格式为:https://Endpoint/uri。其中uri为资源路径,也即API访问的路径nodepool是集群中具有相同配置…

推荐一款二手图书购买回收小程序

真正的大师,永远都怀着一颗学徒的心&#xff01; 今天给大家推荐一款二手图书购买回收小程序&#xff0c;也就是一个基于小程序的轻量商城。可以挂各种学生没用的书放在上面&#xff0c;去售卖。这个小程序在github上的评分非常的高。里面涉及到的一些基础知识&#xff0c;非常…

i7处理器好吗_二手CPU值得买吗?购买二手CPU不想交智商税就看这篇文章

二手CPU值得买吗&#xff1f;众所周知&#xff0c;不少装机用户可能因为预算的原因&#xff0c;可能会考虑二手硬件&#xff0c;理论上二手CPU无疑相比全新更加便宜&#xff0c;但是CPU这玩意真的有很多例外&#xff0c;有些二手CPU还真的没有全新划算&#xff0c;较老型号的in…