ControlNet原理及应用

《Adding Conditional Control to Text-to-Image Diffusion Models》

目录

1.背景介绍

2.原理详解

2.1 Controlnet

2.2 用于Stable Diffusion的ControlNet

2.3 训练

2.4 推理

3.实验结果

3.1 定性结果

3.2 消融实验

3.3 和之前结果比较 

3.4 数据集大小的影响

4.结论


1.背景介绍

        Stable Diffusion大模型的开源,使得AI绘画的应用变得空前火热。虽然Stable Diffusion生成的图片质量远超以往的GAN,VAE等,但还达不到精细化可控生成的目的。文本到图像模型在控制图像的空间构图方面是有限的;仅仅通过文本提示很难精确地表达复杂的布局、姿势、形状和形式。ControlNet在Stable Diffusion的基础上加入了更多可控生成方式,在AI绘图大规模商用上成为可能。此外,ControlNet和SAM同时获得了ICCV2023的最佳论文。让我们一起来看一看的魔力~

下面是ControlNet相关的一些资料,本文写作业参考了几位博主的文章,已经在下面提供了链接。

论文链接:https://arxiv.org/pdf/2302.05543.pdf

代码地址GitHub - lllyasviel/ControlNet: Let us control diffusion models!

GitHub - Mikubill/sd-webui-controlnet: WebUI extension for ControlNet

论文解读:https://zhuanlan.zhihu.com/p/664595339

        ControlNet 是一种神经网络架构,旨在将空间条件控制添加到大型预训练的文本到图像扩散模型中。 ControlNet 将锁定生产就绪的大型扩散模型,并重用由数十亿图像预先训练的强大主干中的深层和鲁棒编码层,以学习多样化的条件控制集。神经架构通过“零卷积”(零初始化的卷积层)连接,使参数逐渐从零增长,并确保不会有有害噪声影响微调过程。使用Stable Diffusion测试各种条件控制例如边缘、深度、分割、人体姿态等,具有单个或多个条件,带有或不带有提示。 表明 ControlNet 的训练过程对于小型(<50k)和大型(>1m)数据集都具有很强的鲁棒性。大量的实验结果表明,ControlNet 有助于更广泛的应用于控制图像扩散模型。

        通过让用户提供额外的图像来直接指定所需图像的组成,实现更精细的空间控制呢。这些额外的图像(例如边缘图、人体姿态骨架、分割图、深度、法线等)通常被视为对图像生成过程的条件约束。特定条件下的训练数据量显著小于可用于一般文本到图像训练的数据量。直接微调或继续训练具有有限数据的大型预训练模型可能会导致过拟合和灾难性遗忘。因此,通过限制可训练参数的数量或等级,可以缓解这种遗忘。

        ControlNet 通过锁定大型预训练模型的参数并复制其编码层,保留了该大型模型的质量和能力。这种架构将大型预训练模型视为学习各种条件控制的强大主干网络。可训练的副本和原始锁定的模型通过零卷积层连接,权重初始化为零,以便在训练过程中逐渐增长。这种架构确保在训练开始时不会向大型扩散模型的深层特征添加有害噪声,并保护可训练副本中的大型预训练主干网络免受此类噪声的破坏。

ControlNet 是一种神经网络架构,旨在将空间条件控制添加到大型预训练的文本到图像扩散模型中。 ControlNet 将锁定生产就绪的大型扩散模型,并重用由数十亿图像预先训练的强大主干中的深层和鲁棒编码层,以学习多样化的条件控制集。神经架构通过“零卷积”(零初始化的卷积层)连接,使参数逐渐从零增长,并确保不会有有害噪声影响微调过程。使用Stable Diffusion测试各种条件控制例如边缘、深度、分割、人体姿态等,具有单个或多个条件,带有或不带有提示。 表明 ControlNet 的训练过程对于小型(<50k)和大型(>1m)数据集都具有很强的鲁棒性。大量的实验结果表明,ControlNet 有助于更广泛的应用于控制图像扩散模型。

通过让用户提供额外的图像来直接指定所需图像的组成,实现更精细的空间控制呢。这些额外的图像(例如边缘图、人体姿态骨架、分割图、深度、法线等)通常被视为对图像生成过程的条件约束。特定条件下的训练数据量显著小于可用于一般文本到图像训练的数据量。直接微调或继续训练具有有限数据的大型预训练模型可能会导致过拟合和灾难性遗忘。因此,通过限制可训练参数的数量或等级,可以缓解这种遗忘。

        ControlNet 通过锁定大型预训练模型的参数并复制其编码层,保留了该大型模型的质量和能力。这种架构将大型预训练模型视为学习各种条件控制的强大主干网络。可训练的副本和原始锁定的模型通过零卷积层连接,权重初始化为零,以便在训练过程中逐渐增长。这种架构确保在训练开始时不会向大型扩散模型的深层特征添加有害噪声,并保护可训练副本中的大型预训练主干网络免受此类噪声的破坏。

                                                图1 sd结合controlnet进行生成 

2.原理详解

        图2:神经块以特征映射x作为输入,输出另一个特征映射y,如(a)所示。为了将ControlNet添加到block,通过锁定neural network block并创建一个可训练的副本,使用zero convolution将它们连接在一起,如(b)所示。

2.1 Controlnet

        ControlNet向神经网络块注入了额外的条件(如图2)。假设F(·;Θ)是这样的训练好的神经块,参数为Θ,它将输入特征图x转换为另一个特征图y。为了将ControlNet添加到预训练的神经块中,需锁定原始块的参数Θ,同时将块克隆到可训练的副本中,该副本具有参数Θ_c(如图2b)。可训练的副本接受外部条件向量c作为输入。当将这种结构应用于像Stable Diffusion这样的大型模型时,锁定参数可以保留使用数十亿张图像训练的生产就绪模型,而可训练的副本可以重用这种大规模预训练模型,以建立一个深、稳健且强大的主干网络来处理各种输入条件。

        可训练的副本通过零卷积层Z(·;·)连接到锁定模型。具体而言,Z(·;·)是一个初始化为零的权重和偏差的1×1卷积层。为了构建ControlNet,使用两个零卷积的实例,参数分别为Θz1和Θz2。完整的ControlNet计算如下所示:

        yc是ControlNet块输出。在第一个训练步骤中,由于零卷积层的权重和偏差参数都初始化为零,方程(2)中的两个Z(·;·)项都计算为零。这样在训练开始时,有害噪声不会影响可训练副本中神经网络层的隐藏状态。此外,由于Z(c;Θz1)=0,并且可训练副本也接收输入图像x,因此可训练副本完全有效,并保留大型预训练模型的功能,使其能够作为强大的主干网络用于进一步学习。零卷积通过消除初始训练步骤中的随机噪声来保护这个主干网络。

2.2 用于Stable Diffusion的ControlNet

Stable Diffusion本质上是一个U-Net,包含编码器、中间块和跳跃连接解码器。编码器和解码器都包含12个块,而整个模型包含25个块,包括中间块。在这25个块中,8个块是下采样或上采样卷积层,而其他17个块是主块,每个主块包含4个ResNet层和2个Vision Transformer(ViT)。每个ViT包含几个交叉注意力和自注意力机制。如图3a中,“SD Encoder Block A”包含4个ResNet层和2个ViT,“×3”表示该块重复三次。文本提示使用CLIP文本编码器进行编码,扩散时间步使用带有位置编码的时间编码器进行编码

         图3 Stable Diffusion的U-net架构连接,在编码器块和中间块上有一个ControlNet。锁定的灰色块显示了Stable Diffusion V1.5的结构。可训练的蓝色块和白色的零卷积层被添加来构建一个ControlNet。

        将ControlNet结构应用于U-net的每个编码器级别(图3b)。使用ControlNet创建Stable Diffusion的12个编码块和1个中间块的训练副本。12个编码块分布在4个分辨率(64 × 64,32 × 32,16 × 16,8 × 8)中,每个分辨率复制3次。输出被添加到U-net的12个跳连接和1个中间块中。由于Stable Diffusion是典型的U-net结构,这种ControlNet架构可能适用于其他模型。

        连接ControlNet的方式在计算上是高效的-由于锁定副本的参数被冻结,在微调过程中,原始锁定编码器不需要进行梯度计算。这种方法加快了训练速度并节省GPU内存。

        图像扩散模型学习逐步去噪图像并从训练域生成样本。去噪过程可以在像素空间或从训练数据编码的潜在空间中进行。Stable Diffusion使用潜在图像作为训练域。Stable Diffusion将512 × 512像素空间的图像转换为较小的64 × 64潜在图像。要将ControlNet添加到Stable Diffusion中,首先将每个输入条件图像(例如边缘、姿势、深度等)从512 × 512的输入大小转换为与Stable Diffusion大小相匹配的64 × 64特征空间向量。

        使用一个具有四个卷积层的tiny网络E(·),这些卷积层具有4 × 4内核和2 × 2步长(通过ReLU激活,使用16、32、64、128个通道,分别初始化高斯权重并与其他完整模型联合训练),将图像空间条件-ci编码为特征空间条件向量cf。cf条件向量被传递到ControlNet中。

2.3 训练

        给定一个输入图像z0,图像扩散算法会逐步向图像添加噪声,并生成一个噪声图像zt,其中t表示添加噪声的次数。给定一组条件,包括时间步t、文本提示ct以及特定于任务的条件cf,图像扩散算法会学习一个网络εθ来预测添加到噪声图像zt上的噪声。

         在训练过程中随机用空字符串替换50%的文本提示ct。这种方法提高了ControlNet直接从输入条件图像中识别语义(例如边缘、姿态、深度等)的能力,作为提示的替代。在训练过程中,由于零卷积不会给网络添加噪声,模型应该始终能够预测高质量的图像。模型并没有逐渐学习控制条件,而是在优化步骤少于10K时突然成功地遵循输入条件图像。如图4所示,这种现象被称为“突然收敛现象”。

        图4 突然收敛现象:由于零卷积,ControlNet总是可以预测整个训练过程高质量图像。在某一阶段训练过程(例如,用粗体标出的6133个步骤)模型突然学会了跟随输入条件。     

2.4 推理

        可以进一步控制ControlNet的额外条件以多种方式影响去噪扩散过程。

                                图5 无分类器制导(CFG)的效果提出CFG分辨率加权法(CFG- rw)。

  • Classifier-free guidance resolution weighting:无分类器指导分辨率权重

        稳定的扩散取决于一种称为无分类器指导(CFG)的技术用于生成高质量图像。CFG表述为 εprd = εuc + βcfg (εc − εuc ),其中 εprd 、εuc 、εc、βcfg 分别是模型的最终输出、无条件输出、条件输出和一个用户指定的权重。当通过ControlNet添加条件图像时,可以将其添加到 εuc 和 εc 中,或者仅添加到 εc 中。在具有挑战性的情况下,例如没有给出提示时,将其同时添加到 εuc 和 εc 中将完全去除CFG指导(图5b);只使用 εc 将使指导变得非常强烈(图5c)。一种解决方案是将条件图像首先添加到 εc 中,然后根据每个块的分辨率,将每个连接在Stable Diffusion和ControlNet之间的权重wi乘以每个连接的权重wi = 64 / hi,其中hi是第i个块的大小,例如h1 = 8, h2 = 16, ..., h13 = 64。通过降低CFG指导强度,我们可以获得图5d所示的结果,其称为CFG分辨率权重。

                                            图6 组合多个ControlNet条件进行生成

  • 组合多个ControlNet。

        为了将多个条件图像(例如Canny边缘和姿态)应用于Stable Diffusion的单个实例,可以将相应ControlNet的输出直接添加到Stable Diffusion模型中(图6)。这种组合不需要额外的加权或线性插值。

3.实验结果

        使用Stable Diffusion实现ControlNet,以测试各种条件,包括Canny Edge、Depth Map、Normal Map、M-LSD lines、HED soft edge、ADE20K segmentation、Openpose 和用户草图。

3.1 定性结果

        显示了几个提示设置中生成的图像。图7显示了在没有提示的情况下,在不同的条件下的各种控制网络对输入条件图像中的内容语义进行鲁棒解释。

3.2 消融实验

        通过以下方式研究ControlNets的替代结构:

        (1)将零卷积替换为用高斯权重初始化的标准卷积层

        (2)将每个块的训练副本替换为一个单一的卷积层,称为ControlNet-lite。

        提出了4种提示设置来测试现实世界用户可能的行为:

        (1)无提示;

        (2)提示不足,即不完整覆盖条件图像中的对象;        

     (3)冲突提示,即改变条件图像的语义;

     (4)完美提示,即描述必要的内容语义,例如“漂亮的房子”。

        图8a显示ControlNet在所有4种设置中都取得了成功。轻量级的ControlNet-lite(图8c)不足以解释条件图像,在提示不足和无提示的情况下失败。当零卷积被替换时,ControlNet的性能下降到与ControlNet-lite相同,这表明在微调过程中可训练副本的预训练主干被破坏了(图8b)。

         图8 在草图条件和不同提示设置下对不同架构进行消融研究。每个设置显示一个随机批次无筛选的6个样本。图像大小为512 × 512。左边的绿色“conv”块是用高斯权重初始化的标准卷积层。

3.3 和之前结果比较 

                                                     图9 Comparison to previous methods

        图9展示了基线和(Stable Diffusion+ControlNet)之间可视化比较。具体展示了PTIT、Sketch-Guided Diffusion和Taming Transformers的结果。可以看出ControlNet可以稳健地处理各种条件图像,并产生清晰干净的结果。

3.4 数据集大小的影响

                                                       图10 不同训练数据集大小的影响。

        图10中展示了ControlNet训练的鲁棒性。当使用1k张图像进行训练时,模型不会崩溃,并且能够生成可识别的狮子。当提供更多数据时,学习是可以扩展的。

                                                                图11 内容解读

        图11展示了ControlNet对输入条件图像进行语义捕捉的能力。如果输入有歧义而且用户不会在提示中提及对象内容,结果看起来像是模型试图解释输入的形状。

                                图12 将预先训练的控制网转移到社区无需再次训练神经网络的模型

        图12显示了将Control- Net应用于社区模型的能力。由于ControlNets不会改变预训练SD模型的神经网络拓扑结构,因此它可以直接应用于稳定扩散社区中的各种模型,例如Comic Diffusion和Protogen 3.4

4.结论

        ControlNet是一种神经网络结构,它学习大型预训练的文本到图像扩散模型的带条件控制。它重用源模型的的大规模预训练层来构建一个深度且强大的编码器,以学习特定条件。原始模型和可训练的副本通过“零卷积”层连接,这些“零卷积”层可以消除训练期间的噪音。大量实验证明,ControlNet可以有效控制带有单个或多个条件以及带/不带提示的Stable Diffusion。在多样化条件数据集上的结果展示出,ControlNet结构可能适用于更广泛的条件,并促进相关应用。

OK,以上就是《Adding Conditional Control to Text-to-Image Diffusion Models》也就是ControlNet原始论文的解读,ControlNet结合Stable Diffusion可以有效提升SD生图的可控性和可玩性,后续也会和大家分析关于ControlNet的应用部分,欢迎大家一起交流!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/147018.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vite 启动默认只能访问localhost解决方法

事情的经过是因为我需要测试本地项目的接口,然后因为burp默认不抓取localhost,127.0.0.1 .而且我也不想去修改burp. 所以我通过本地IP地址访问项目, 发现项目无法访问。 默认启动 所以特此记录一下。 在本地项目的package.json 中需要运行的脚本后 添加 --host即可。 具体如下…

rabbitMQ的扇出模式(fanout发布订阅)的生产者与消费者使用案例

扇出模式 fanout 发布订阅模式 生产者 生产者发送消息到交换机&#xff08;logs&#xff09;,控制台输入消息作为生产者的消息发送 package com.esint.rabbitmq.work03;import com.esint.rabbitmq.RabbitMQUtils; import com.rabbitmq.client.Channel;import java.util.Scanne…

使用FP8加速PyTorch训练

现代的人工智能硬件架构(例如&#xff0c;Nvidia Hopper, Nvidia Ada Lovelace和Habana Gaudi2)中&#xff0c;FP8张量内核能够显著提高每秒浮点运算(FLOPS)&#xff0c;以及为人工智能训练和推理工作负载提供内存优化和节能的机会。 在这篇文章中&#xff0c;我们将介绍如何修…

Arduino驱动LM35线性温度传感器(温湿度传感器)

目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 LM35半导体的温度传感器,可以用来对环境温度进行定性的检测。LM35半导体温度传感器是美国国家半导体公司生产的线性温度传感器。其测温范围是-40℃到150℃,灵敏度为10mV/℃,输出电压与温度成正比。

<C++> 反向迭代器

我们知道正向迭代器的设计&#xff1a;begin迭代器指向第一个数据&#xff0c;end迭代器指向最后一个数据的下一个位置 。移向下一个数据&#xff0c;解引用得到数据的值&#xff0c;并根据容器储存方式的不同&#xff0c;容器有不同类型的迭代器。 注意&#xff1a;rbegin迭代…

c语言:模拟实现qsort函数

qsort函数的功能&#xff1a; qsort相较于冒泡排序法&#xff0c;不仅效率更快&#xff0c;而且能够比较不同类型的元素&#xff0c;如&#xff1a;浮点数&#xff0c;结构体等等。这里我们来模拟下qsort是如何实现这一功能的&#xff0c;方便我们对指针数组有一个更深层次的理…

龙芯 操作系统选择和安装

龙芯3a5000及之后的cpu底层架构已经从mips64el改为了loongarch64 所以这里分了2种来说明&#xff0c;分别对应3a4000之前的和3a5000之后的 龙芯的系统安装难点在于操作系统的选取和引导 一、烧录工具 制作安装盘使用常规的烧录工具是不行滴&#xff0c;会提示没有\boot\initrd…

产品经理必备技能:如何快速锁定种子用户群体?

大家好&#xff0c;我是小米&#xff0c;一名热爱技术、热衷分享的90后小青年。今天我们要探讨的话题是一个在产品经理面试中经常被问到的问题&#xff1a;“产品上线后的种子用户该如何获取&#xff1f;”作为一个热爱挑战、乐于探讨的小伙伴&#xff0c;我将和大家分享一些我…

第七部分:Maven(项目管理工具)

目录 Maven简介 7.1&#xff1a;为什么学习Maven&#xff1f; 7.1.1、Maven是一个依赖管理工具 7.1.2&#xff1a;Maven是一个构建工具 7.1.3&#xff1a;结论 7.2&#xff1a;Maven介绍 7.3&#xff1a;Maven的优点 Maven安装和配置 7.4&#xff1a;安装教程及环境配置 …

最大似然估计的介绍

最大似然估计&#xff08;Maximum Likelihood Estimation&#xff0c;简称MLE&#xff09;是一种用于估计概率分布中参数的方法。该方法的核心思想是选择使得观察到的数据在给定模型下出现的概率最大的参数值作为估计值。 最大似然估计具有很好的性质&#xff0c;包括渐进正态性…

SystemVerilog学习 (9)——随机化

目录 一、概述 二、随机化 2.1、如何简单地产生一个随机数 2.1.1 利用系统函数产生随机数 2.1.2 urandom() 2.2、什么需要随机化 2.3、随机约束 2.3.1 rand 和 randc 2.3.2 随机约束的使用 2.3.3 约束块 三、总结 一、概述 随着设计变得越来越大,要产生一个完整的激…

面试资料快速复习 Git常用命令(简单实用)

Git-command Git常用命令、面试复习、简单实用命令 ​ 一、概念理解 &#xff08;一&#xff09;工作区、暂存区、本地仓库、远程仓库 workspace&#xff1a;工作区staging area&#xff1a;暂存区/缓存区local repository&#xff1a;本地仓库remote repository&#xff…

Apache Airflow (九) :Airflow Operators及案例之BashOperator及调度Shell命令及脚本

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…

C#单例模式懒汉式与饿汉式

单例模式一般分为懒汉模式和饿汉模式&#xff0c;懒汉式单例在第一次引用时创建实例&#xff0c;不是在类加载时&#xff1b;饿汉式单例模式是一种在类加载时就创建实例的方式&#xff0c;因此也称为静态初始化。 单例模式实现的技巧时构造私有&#xff0c;向外提供静态实例。…

12-2- DCGAN -简单网络-卷积网络

功能 随机噪声→生成器→MINIST图像。 训练方法 0 损失函数:gan的优化目标是一个对抗损失,是二分类问题,用BCELoss 1 判别器的训练,首先固定生成器参数不变,其次判别器应当将真实图像判别为1,生成图像判别为0 loss=loss(real_out, 1)+loss(fake_out, 0) 2 生成器的…

react-router-dom 版本6.18.0中NavLink的api和属性介绍

React Router 是一个基于 React 的路由库&#xff0c;它可以帮助我们在 React 应用中实现页面的切换和路由的管理。而 NavLink 则是 React Router 中的一个组件&#xff0c;它可以帮助我们实现导航栏的样式设置和路由跳转。 在 React Router 版本6.18.0 中&#xff0c;NavLink…

Matalab插值详解和源码

转载&#xff1a;Matalab插值详解和源码 - 知乎 (zhihu.com) 插值法 插值法又称“内插法”&#xff0c;是利用函数f (x)在某区间中已知的若干点的函数值&#xff0c;作出适当的特定函数&#xff0c;在区间的其他点上用这特定函数的值作为函数f (x)的近似值&#xff0c;这种方…

windows快捷方式图标变成空白

今天突然有客户说应用程序快捷方式图标变成了空白&#xff0c;就研究了一下&#xff0c;网上找了一下很多都说是什么图标缓存有问题&#xff0c;试过之后发现并不能解决问题。 然后发现用户的文件上都一把黄色的小锁的标志&#xff0c;查了一下说是文件属性里面设置加密之后就会…

高防CDN:构筑网络安全的钢铁长城

在当今数字化的世界里&#xff0c;网络安全问题日益突显&#xff0c;而高防CDN&#xff08;高防御内容分发网络&#xff09;正如一座坚不可摧的钢铁长城&#xff0c;成为互联网安全的不可或缺之物。本文将深入剖析高防CDN在网络安全环境中的关键作用&#xff0c;探讨其如何构筑…

Microsoft SQL Server Management Studio(2022版本)启动无法连接到服务器

Microsoft SQL Server Management Studio&#xff08;2022版本&#xff09;启动无法连接到服务器 解决方法&#xff1a; 打开SQL Server 2022 配置管理器。 启动即可。