我们知道深度学习的模型往往都是在某一领域或者特定场景的,大的领域像是NLP,CV,大领域还可以细分出许多的小领域。由于笔者对CV比较熟悉,就经常想可不可以训练这样一个模型,它可以识别不同应用场景,根据不同的应用场景来选择不同的识别模型。但是能力有限,一直没有做出来啊。直到看到了这篇论文。在本文介绍的论文中,是在Text-to-Image Diffusion Models 中添加了控制条件,根据所输入的不同,包括边缘图,houghline图,深度图,分割图等等,结合相应的text来生成图片。这其实给了笔者一个很好的启发。下面可以随笔者一起详细看一下。
Date: 2023-2-17
作者:幸运的石头
公众号【计算机视觉工坊】
摘要
我们提出了一种神经网络结构 ControlNet,用于控制预训练的大型扩散模型以支持额外的输入条件。 ControlNet 以端到端的方式学习特定于任务的条件,即使训练数据集很小 (< 50k),学习也很稳健。此外,训练 ControlNet 与微调扩散模型一样快,并且可以在个人设备上训练模型。或者,如果可以使用强大的计算集群,该模型可以扩展到大量(数百万到数十亿)数据。我们报告说,像 Stable Diffusion 这样的大型扩散模型可以通过 ControlNets 进行增强,以启用边缘图、分割图、关键点等条件输入。这可能会丰富控制大型扩散模型的方法,并进一步促进相关应用。github实现:https://github.com/lllyasviel/ControlNet论文pdf:https://arxiv.org/abs/2302.05543
1 介绍
随着大型文本到图像模型的出现,生成视觉上吸引人的图像可能只需要用户输入简短的描述性提示。在输入了一些文字并得到了图像之后,我们可能会很自然地产生几个问题:这种基于提示的控件是否满足我们的需求?例如在图像处理中,考虑到许多具有明确问题公式的长期任务,是否可以应用这些大型模型来促进这些特定任务?我们应该构建什么样的框架来处理范围广泛的问题条件和用户控件?在特定任务中,大型模型能否保留从数十亿图像中获得的优势和能力?为了回答这些问题,我们调查了各种图像处理应用程序并得出了三个发现。首先,特定任务领域中的可用数据规模并不总是与一般图像文本领域中的数据规模一样大。许多特定问题(例如,对象形状/法线、姿态理解等)的最大数据集大小通常低于 100k,即比 LAION-5B 小 5×104 倍。这将需要强大的神经网络训练方法来避免过度拟合并在针对特定问题训练大型模型时保持泛化能力。其次,当使用数据驱动解决方案处理图像处理任务时,大型计算集群并不总是可用。这使得快速训练方法对于在可接受的时间和内存空间(例如,在个人设备上)内针对特定任务优化大型模型非常重要。这将进一步需要利用预训练的权重,以及微调策略或迁移学习。第三,各种图像处理问题具有多种形式的问题定义、用户控制或图像注释。在解决这些问题时,虽然图像扩散算法可以以“程序”方式进行调节,例如,约束去噪过程、编辑多头注意激活等,但这些手工制定的规则的行为基本上是由人类指令规定的.考虑到一些特定的任务,如深度到图像、姿势到人等,这些问题本质上需要将原始输入解释为对象级或场景级的理解,这使得手工制作的程序方法不太可行。要在许多任务中实现学习解决方案,端到端学习是必不可少的
图 1:使用 Canny 边缘图控制稳定扩散。 canny edge map 是输入,当我们生成右边的图像时没有使用源图像。输出是通过默认提示“高质量、详细和专业的图像”实现的。此提示在本文中用作默认提示,不提及任何有关图像内容和对象名称的信息。本文中的大部分图片都是高分辨率图像,放大后效果最佳。本文介绍了 ControlNet,这是一种端到端的神经网络架构,可控制大型图像扩散模型(如稳定扩散)以学习特定于任务的输入条件。 ControlNet 将大型扩散模型的权重克隆为“可训练副本”和“锁定副本”:锁定副本保留了从数十亿图像中学习的网络能力,而可训练副本在特定任务的数据集上进行训练以学习条件控制。可训练和锁定的神经网络块与一种称为“零卷积”的独特类型的卷积层连接,其中卷积权重以学习的方式从零逐渐增长到优化参数。由于保留了生产就绪的权重,因此训练在不同规模的数据集上都很稳健。由于零卷积不会为深层特征添加新的噪声,与从头开始训练新层相比,训练与微调扩散模型一样快我们使用不同条件的各种数据集训练了几个 ControlNet,例如 Canny 边缘、Hough 线、用户涂鸦、人体关键点、分割图、形状法线、深度等。我们还用两个小数据集(样本小于 50k)对 ControlNet 进行了实验甚至 1k) 和大型数据集(数百万个样本)。我们还表明,在深度到图像等某些任务中,在个人计算机(一台 Nvidia RTX 3090TI)上训练 ControlNets 可以获得与在具有 TB 级 GPU 内存和数千 GPU 小时的大型计算集群上训练的商业模型相媲美的结果。
2 相关工作
2.1 HyperNetwork和神经网络结构
HyperNetwork 起源于一种神经语言处理方法[14],用于训练一个小的递归神经网络来影响一个更大的神经网络的权重。在使用生成对抗网络 [1、10] 和其他机器学习任务 [51] 的图像生成中也报道了 HyperNetwork 的成功结果。受这些想法的启发,[15] 提供了一种将较小的神经网络附加到 Stable Diffusion [44] 的方法,以改变其输出图像的艺术风格。在 [28] 提供了几个 HyperNetworks 的预训练权重之后,这种方法变得更加流行。 ControlNet 和 HyperNetwork 在影响神经网络行为的方式上有相似之处ControlNet 使用一种特殊类型的卷积层,称为“零卷积”。早期的神经网络研究 [31 , 47 , 32 ] 广泛讨论了网络权重的初始化,包括使用高斯分布初始化权重的合理性以及使用零初始化权重可能带来的风险。最近,[37] 讨论了一种在扩散模型中缩放多个卷积层的初始权重以改进训练的方法,这与零卷积的思想有相似之处(他们的代码包含一个称为“zero_module”的函数)。在 ProGAN [21] 和 StyleGAN [22] 以及 Noise2Noise [33] 和 [65] 中也讨论了操纵初始卷积权重。 Stability 的模型卡 [55] 还提到了在神经层中使用零权重。
2.2 扩散概率模型
在[52]中提出了扩散概率模型。图像生成的成功结果首先在小规模 [25] 上报道,然后在相对较大的范围内报道 [9]。这种架构通过重要的训练和采样方法得到改进,例如去噪扩散概率模型 (DDPM) [17]、去噪扩散隐式模型(DDIM) [53] 和基于分数的扩散 [54]。图像扩散方法可以直接使用像素颜色作为训练数据,在这种情况下,研究通常会考虑在处理高分辨率图像时节省计算能力的策略 [53 , 50 , 26] ,或者直接使用基于金字塔或多阶段的方法[ 18 , 43 ]。这些方法本质上使用 U-net [45] 作为它们的神经网络架构。为了减少训练扩散模型所需的计算能力,基于潜像[11]的思想,提出了潜在扩散模型(LDM)[44]方法,并将其进一步扩展到稳定扩散
2.3 文本到图像的扩散
扩散模型可以应用于文本到图像生成任务,以实现最先进的图像生成结果。这通常是通过使用 CLIP [41] 等预训练语言模型将文本输入编码为潜在向量来实现的。例如,Glide [38] 是一种支持图像生成和编辑的文本引导扩散模型。 Disco Diffusion 是 [9] 的剪辑引导实现,用于处理文本提示。稳定扩散是潜在扩散[44]的大规模实施,以实现文本到图像的生成。 Imagen [ 49 ] 是一种文本到图像结构,不使用潜在图像,而是使用金字塔结构直接扩散像素。
2.4 预训练扩散模型的个性化、定制化和控制
由于最先进的图像扩散模型以文本到图像的方法为主,因此增强对扩散模型控制的最直接方法通常是文本引导 [38、24、2、3、23 , 43, 16]。这种类型的控制也可以通过操纵 CLIP 特征 [43] 来实现。图像扩散过程本身可以提供一些功能来实现颜色级细节变化 [35](Stable Diffusion 社区称之为img2img)。图像扩散算法自然支持修复作为控制结果的重要方式 [43、2]。 Textual Inversion [12] 和 DreamBooth [46] 被提议使用一小组具有相同主题或对象的图像来定制(或个性化)生成结果中的内容
2.5 图像到图像的转换
我们想指出的是,虽然 ControlNet 和图像到图像的翻译可能有几个重叠的应用,但它们的动机是本质不同的。图像到图像的翻译旨在学习不同领域图像之间的映射,而ControlNet 旨在控制具有特定任务条件的扩散模型。Pix2Pix [20] 提出了图像到图像转换的概念,早期的方法主要由条件生成神经网络 [20、69、60、39、8、63、68] 主导。在 Transformers 和 Vision Transformers (ViTs) 流行之后,使用自回归方法 [42,11,7] 的成功结果已经被报道。一些研究还表明,多模型方法可以从各种翻译任务中学习到强大的生成器 [64、29、19、40]我们讨论了当前图像到图像转换中最强大的方法。 Taming Transformer [11] 是一种视觉转换器,具有生成图像和执行图像到图像转换的能力。 Palette [48] 是一个统一的基于扩散的图像到图像翻译框架。 PITI [59] 是一种基于扩散的图像到图像转换方法,它利用大规模预训练来提高生成结果的质量。在草图引导扩散等特定领域,[58] 是一种基于优化的方法,可操纵扩散过程。这些方法在实验中进行了测试。
3 方法
ControlNet 是一种神经网络架构,可以增强具有任务特定条件的预训练图像扩散模型。我们在 3.1 节中介绍了 ControlNet 的基本结构和每个部分的动机。我们使用第 3.2 节中的稳定扩散示例详细介绍了将 ControlNet 应用于图像扩散模型的方法。我们在 3.3 节详细阐述了学习目标和一般训练方法,然后在 3.4 节描述了在极端情况下改进训练的几种方法,例如使用一台笔记本电脑或使用大型计算集群进行训练。最后,我们在第 3.5 节中包含了具有不同输入条件的几个 ControlNet 实现的细节。
3.1 ControlNet
ControlNet 操纵神经网络块的输入条件,以进一步控制整个神经网络的整体行为。这里,“网络块”指的是一组神经层,它们被放在一起作为构建神经网络的常用单元,例如“resnet”块、“conv-bn-relu”块、multi-head attention block、transformer block等以二维特征为例,给定一个特征图 x ∈ Rh×w×c,其中 {h, w, c} 为高度、宽度和通道数,神经网络块 F(·; Θ) 具有一组参数Θ 将 x 转换为另一个特征图 y
图 3:稳定扩散中的 ControlNet。灰色块是Stable Diffusion 1.5(或SD V2.1,因为它们使用相同的U-Net架构)的结构,而蓝色块是ControlNet
3.2 图像扩散模型中的ControlNet
我们以 Stable Diffusion [44] 为例,介绍使用 ControlNet 控制具有任务特定条件的大型扩散模型的方法。Stable Diffusion 是一种在数十亿张图像上训练的大型文本到图像扩散模型。该模型本质上是一个带有编码器、中间块和跳跃连接解码器的 U-net。编码器和解码器都有 12 个块,完整模型有 25 个块(包括中间块)。在这些块中,8 个块是下采样或上采样卷积层,17 个块是主块,每个块包含四个 resnet 层和两个视觉变换器 (ViT)。每个 Vit 包含几个交叉注意和/或自注意机制。文本由 OpenAI CLIP 编码,扩散时间步长由位置编码编码Stable Diffusion 使用类似于 VQ-GAN [11] 的预处理方法,将 512×512 图像的整个数据集转换为更小的 64×64“潜在图像”以进行稳定训练。这需要 ControlNets 将基于图像的条件转换为 64 × 64 特征空间以匹配卷积大小。我们使用具有 4 × 4 内核和 2 × 2 步幅的四个卷积层的微型网络 E(·)(由 ReLU 激活,通道为 16、32、64、128,用高斯权重初始化,与完整模型联合训练)将图像空间条件 ci 编码为特征图,其中 cf 是转换后的特征图。该网络将 512 × 512 图像条件转换为 64 × 64 特征图如图 3 所示,我们使用 ControlNet 来控制 U-net 的每一层。请注意,我们连接 ControlNet 的方式在计算上是高效的:由于原始权重被锁定,因此不需要对原始编码器进行梯度计算来进行训练。这可以加快训练速度并节省 GPU 内存,因为可以避免对原始模型进行一半的梯度计算。使用 ControlNet 训练一个稳定的扩散模型只需要在每次训练迭代中增加大约 23% 的 GPU 内存和 34% 的时间(在单个 Nvidia A100 PCIE 40G 上测试)。具体来说,我们使用 ControlNet 创建 12 个编码块和 1 个稳定扩散中间块的可训练副本。这 12 个块有 4 种分辨率(64×64、32×32、16×16、8×8),每种分辨率有 3 个块。输出被添加到 U-net 的 12 个跳过连接和 1 个中间块。由于 SD 是典型的 U-net 结构,因此这种 ControlNet 架构很可能可用于其他扩散模型
3.3 Training
3.4 改进训练
我们讨论了几种改进 ControlNets 训练的策略,特别是在计算设备非常有限(例如,在笔记本电脑上)或非常强大(例如,在具有可用的大规模 GPU 的计算集群上)的极端情况下。在我们的实验中,如果使用这些策略中的任何一个,我们将在实验设置中提及Small-Scale Training当计算设备有限时,我们发现部分断开 ControlNet 和 Stable Diffusion 之间的连接可以加速收敛。默认情况下,我们将 ControlNet 连接到“SD Middle Block”和“SD Decoder Block 1,2,3,4”,如图 3 所示。我们发现断开与解码器 1,2,3,4 的链接并且仅连接中间块可以将训练速度提高约 1.6 倍(在 RTX 3070TI 笔记本电脑 GPU 上测试)。当模型在结果和条件之间显示出合理的关联时,可以在继续训练中将那些断开的链接重新连接起来,以便于精确控制Large-Scale Training这里,大规模训练是指同时具备强大的计算集群(至少8个Nvidia A100 80G或等价物)和大数据集(至少100万训练图像对)的情况。这通常适用于数据容易获得的任务,例如 Canny 检测到的边缘图。在这种情况下,由于过拟合的风险相对较低,我们可以先训练 ControlNets 进行足够多的迭代次数(通常超过 50k 步),然后解锁 Stable Diffusion 的所有权重并联合训练整个模型作为一个整体。这将导致一个更具体的问题模型
3.5 Implementation
我们展示了几种具有不同基于图像的条件的 ControlNets 的实现,以各种方式控制大型扩散模型
图 4:使用 Canny 边缘控制稳定扩散。 “自动提示”是由 BLIP 根据默认结果图像生成的,无需使用用户提示。另请参阅附录以获取用于 canny 边缘检测的源图像。Canny Edge 我们使用 Canny 边缘检测器 [5](具有随机阈值)从互联网上获取 3M 边缘图像字幕对。该模型使用 Nvidia A100 80G 进行了 600 GPU 小时的训练。基本模型是 Stable Diffusion 1.5。 (另请参见图 4)Canny Edge (Alter) 我们对上述 Canny 边缘数据集的图像分辨率进行排序,并用 1k、10k、50k、500k 样本采样了几个子集。我们使用相同的实验设置来测试数据集规模的影响。 (另请参见图 22。)
图 5:使用霍夫线 (M-LSD) 控制稳定扩散。 “自动提示”是由 BLIP 根据默认结果图像生成的,无需使用用户提示。另请参阅附录以获取用于线检测的源图像Hough Line 我们使用基于学习的深度 Hough 变换 [13] 来检测来自 Places2 [66] 的直线,然后使用 BLIP [34] 生成字幕。我们获得了 600k 个边缘-图像-字幕对。我们使用上述 Canny 模型作为起始检查点,并使用 Nvidia A100 80G 以 150 GPU 小时训练模型。 (另请参见图 5。)HED 边界我们使用 HED 边界检测 [62] 从互联网上获得 3M 边缘图像字幕对。该模型使用 Nvidia A100 80G 进行了 300 GPU 小时的训练。基本模型是 Stable Diffusion 1.5。 (另请参见图 7。用户素描 我们结合使用 HED 边界检测 [62] 和一组强大的数据增强(随机阈值、随机屏蔽随机比例的涂鸦、随机形态变换和随机非最大抑制)从图像中合成人类涂鸦。我们从互联网上获得了 500k 个涂鸦-图像-字幕对。我们使用上述 Canny 模型作为起始检查点,并使用 Nvidia A100 80G 以 150 GPU 小时训练模型。请注意,我们还尝试了一种更“类似人类”的合成方法 [57],但该方法比简单的 HED 慢得多,我们没有注意到明显的改进。 (另请参见图 6。)Human Pose (Openpifpaf) 我们使用基于学习的姿势估计方法 [27] 使用一个简单的规则从互联网上“找到”人类:一张有人类的图像必须检测到至少 30% 的全身关键点。我们获得了 80k 个姿势-图像-说明对。请注意,我们直接使用带有人体骨骼的可视化姿势图像作为训练条件。该模型在 Nvidia RTX 3090TI 上经过 400 GPU 小时的训练。基本模型是 Stable Diffusion 2.1。 (另请参见图 8。语义分割 (COCO) 以 BLIP [34] 为标题的 COCO-Stuff 数据集 [4]。我们获得了 164K 分割-图像-字幕对。该模型在 Nvidia RTX 3090TI 上经过 400 GPU 小时的训练。基本模型是 Stable Diffusion 1.5。 (另请参见图 12。)语义分割 (ADE20K) ADE20K 数据集 [67] 以 BLIP [34] 为标题。我们获得了 164K 分割-图像-字幕对。该模型在 Nvidia A100 80G 上经过 200 GPU 小时的训练。基本模型是 Stable Diffusion 1.5。 (另请参见图 11。)depth(大规模)我们使用 Midas [30] 从互联网上获取 3M 深度图像字幕对。该模型使用 Nvidia A100 80G 进行了 500 GPU 小时的训练。基本模型是 Stable Diffusion 1.5。 (另请参见图 23、24、25。)depth(小规模)我们对上述深度数据集的图像分辨率进行排序,以对 200k 对的子集进行采样。该集合用于试验训练模型所需的最小数据集大小。 (另请参见图 14。)法线贴图DIODE 数据集 [56] 以 BLIP [34] 为标题。我们获得了 25,452 个正常图像-标题对。该模型在 Nvidia A100 80G 上经过 100 GPU 小时的训练。基本模型是 Stable Diffusion 1.5。 (另请参见图 13。法线贴图(扩展)我们使用 Midas [30] 来计算深度图,然后执行法线 - 距离以实现“粗略”法线贴图。我们使用上述 Normal 模型作为起始检查点,并使用 Nvidia A100 80G 以 200 GPU 小时训练模型。 (另请参见图 23、24、25。卡通线图 我们使用卡通线图提取方法[61]从互联网卡通插图中提取线图。通过对受欢迎程度的卡通图像进行排序,我们获得了前 1M 的线稿-卡通-字幕对。该模型使用 Nvidia A100 80G 进行了 300 GPU 小时的训练。基础模型是 Waifu Diffusion(一个有趣的社区开发的稳定扩散变异模型 [36])。 (另请参见图 15。)
4 实验
4.1 实验设置本文中的所有结果都是在 CFG 比例为 9.0 的情况下实现的。采样器是 DDIM。我们默认使用 20 步。我们使用三种类型的提示来测试模型:(1) 无提示:我们使用空字符串“”作为提示。(2) 默认提示:由于 Stable diffusion 本质上是通过提示进行训练的,空字符串可能是模型的意外输入,如果没有提供提示,SD 往往会生成随机纹理贴图。更好的设置是使用无意义的提示,如“一张图片”、“一张漂亮的图片”、“一张专业的图片”等。在我们的设置中,我们使用“一张专业、详细、高质量的图片”作为默认提示。(3) 自动提示:为了测试全自动管道的最先进的最大化质量,我们还尝试使用自动图像字幕方法(例如,BLIP [34])使用获得的结果生成提示通过“默认提示”模式。我们使用生成的提示再次扩散。(4) 用户提示:用户给出提示
4.2 定性结果我们在图 4、5、6、7、8、9、10、11、12、13、14、15 中展示了定性结果。
4.3 消融研究图 20 显示了与未使用 ControlNet 训练的模型的比较。该模型使用与 Stability 的 Depth-to-Image 模型完全相同的方法进行训练(向 SD 添加通道并继续训练)图 21 显示了训练过程。我们想指出一种“突然收敛现象”,即模型突然能够跟随输入条件。当使用 1e-5 作为学习率时,这可能发生在从 5000 步到 10000 步的训练过程中图 22 显示了使用不同数据集规模训练的基于 Canny 边的 ControlNet。
4.4 与以往方法的比较
图 14 显示了与 Stability’s Depth-to-Image model的比较。图 17 显示了与 PITI [59] 的比较。图 18 显示了与sketch-guided diffusion的比较 [58]。图 19 显示了与 Taming transformer的比较 [11]
4.5 预训练模型的比较
我们在图 23、24、25 中展示了不同预训练模型的比较。
4.6 更多应用
图 16 显示如果扩散过程被屏蔽,模型可以用于基于笔的图像编辑。图 26 表明,当对象比较简单时,模型可以实现对细节比较准确的控制。图 27 显示当 ControlNet 仅应用于 50% 的扩散迭代时,用户可以获得不遵循输入形状的结果
5 局限性
图 28 表明,当语义解释错误时,模型可能难以生成正确的内容
更多干货
欢迎加入【3D视觉工坊】交流群,为3D领域贡献自己的力量!欢迎大家一起交流成长~ 添加小助手微信:dddvisiona,备注学校/公司+姓名+研究方向即可加入工坊一起学习进步。