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的应用部分,欢迎大家一起交流!

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C++】进阶模板

非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参&#xff1a;出现在模板参数列表中&#xff0c;跟在class或者typename之类的参数类型名称。 非类型形参&#xff1a;就是用一个常量作为类(函数)模板的一个参数&#xff0c;在类(函数)模板中可将该参数当成常量来使…

综述:目标检测二十年(机翻版)(未完

原文地址 20年来的目标检测&#xff1a;一项调查 摘要关键词一 介绍二 目标检测二十年A.一个目标检测的路线图1)里程碑&#xff1a;传统探测器Viola Jones探测器HOG检测器基于可变形零件的模型&#xff08;DPM&#xff09; 2)里程碑&#xff1a;基于CNN的两阶段探测器RCNNSPPN…

学会Bitmap内存管理,你的App内存还会暴增吗?

相信伙伴们在日常的开发中&#xff0c;一定对图片加载有所涉猎&#xff0c;而且对于图片加载现有的第三方库也很多&#xff0c;例如Glide、coil等&#xff0c;使用这些三方库我们好像就没有啥担忧的&#xff0c;他们内部的内存管理和缓存策略做的很好&#xff0c;但是一旦在某些…

浅谈C++重载、重写、重定义

C重载、重写、重定义 重载、重写、重定义对比一、重载&#xff08;overload&#xff09;二、重写 / 覆盖&#xff08;override&#xff09;三、重定义 / 隐藏&#xff08;redefining&#xff09; * 为什么在虚函数中不能使用 static 关键字&#xff1f;动态绑定&#xff08;Dyn…

【项目设计】网络版五子棋游戏

文章目录 一、项目介绍1. 项目简介2. 开发环境3. 核心技术4. 开发阶段 二、环境搭建1. 安装 wget 工具2. 更换 yum 源3. 安装 lrzsz 传输工具4. 安装⾼版本 gcc/g 编译器5. 安装 gdb 调试器6. 安装分布式版本控制工具 git7. 安装 cmake8. 安装 boost 库9. 安装 Jsoncpp 库10. 安…

C语言实现冒泡排序(超详细)

排序算法 - 冒泡排序 什么是冒泡排序&#xff1f;冒泡排序有啥用呢&#xff1f;冒泡排序的实现代码讲解冒泡排序的总结 什么是冒泡排序&#xff1f; 冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历要排序的列表&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序…

详谈动态规划问题并解最大子数组和

今天刷力扣又学会了一种算法----动态规划&#xff0c;经过我查阅不少资料后&#xff0c;这些我总结的分享给大家 动态规划是什么&#xff1f; 动态规划&#xff08;Dynamic Programming&#xff09;是一种求解最优化问题的数学方法&#xff0c;它通常用于解决具有重叠子问题和…

802.11-2020协议学习__专题__TxTime-Calculation__HR/DSSS

802.11-2020协议学习__专题__TxTime-Calculation__HR/DSSS 16.2.2 PPDU format16.2.2.1 General16.2.2.2 Long PPDU format16.2.2.3 Short PPDU format 16.3.4 HR/DSSS TXTIME calculation PREV&#xff1a; TBD NEXT&#xff1a; TBD 16.2.2 PPDU format 16.2.2.1 General 定…

快速集成Skywalking 9(Windows系统、JavaAgent、Logback)

目录 一、Skywalking简介二、下载Skywalking服务端三、安装Skywalking服务端3.1 解压安装包3.2 启动Skywalking 四、关于Skywalking服务端更多配置五、Java应用集成skywalking-agent.jar5.1 下载SkyWalking Java Agent5.2 集成JavaAgent5.3 Logback集成Skywalking5.4 集成效果 …

Java Fasn 带您谈谈——开源、闭源

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 ✨特色专栏&#xff1a…

Python —— Mock接口测试

前言 今天跟小伙伴们一起来学习一下如何编写Python脚本进行mock测试。 什么是mock? 测试桩&#xff0c;模拟被测对象的返回&#xff0c;用于测试 通常意义的mock指的就是mock server, 模拟服务端返回的接口数据&#xff0c;用于前端开发&#xff0c;第三方接口联调 为什么…

特征缩放和转换以及自定义Transformers(Machine Learning 研习之九)

特征缩放和转换 您需要应用于数据的最重要的转换之一是功能扩展。除了少数例外&#xff0c;机器学习算法在输入数值属性具有非常不同的尺度时表现不佳。住房数据就是这种情况:房间总数约为6至39320间&#xff0c;而收入中位数仅为0至15间。如果没有任何缩放&#xff0c;大多数…

anaconda安装依赖报错ERROR: Cannot unpack file C:\Users\33659\AppData\Loca...|问题记录

执行命令&#xff1a; # 安装matplotlib依赖 pip install matplotlib-i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com出现问题&#xff1a; ERROR: Cannot unpack file C:\Users\33659\AppData\Local\Temp\pip-unpack-0au_blfq\simple (downloa…

Redis面经

Redis使用场景 1、缓存&#xff1a; 缓存三兄弟(穿透、击穿、雪崩) 、双写一致、持久化、数据过期策略&#xff0c;数据淘汰策略 2、分布式锁 setnx、redisson 3、消息队列 4、延迟队列 何种数据类型&#xff08;list、zset&#xff09; 缓存三兄弟 缓存穿透 缓存穿透…

【RH850芯片】RH850U2A芯片平台Spinlock的底层实现

目录 前言 正文 1.RH850U2A上的原子操作 1.1 Link 1.2 Link generation 1.3 Success in storing 1.4 Failure in storing 1.5 Condition for successful storing 1.6 Loss of the link 1.7 示例代码 2.Spinlock代码分析 2.1 尝试获取Spinlock 2.2 释放Spinlock …

Web前端—移动Web第二天(空间转换、动画、综合案例:全名出游)

版本说明 当前版本号[20231118]。 版本修改说明20231118初版 目录 文章目录 版本说明目录移动 Web 第二天01-空间转换空间转换简介平移视距旋转左手法则rotate3d-了解立体呈现案例-3d导航缩放 02-动画动画实现步骤animation复合属性animation拆分写法案例-走马灯精灵动画多组…

一款带数字传输信号的OVP芯片

基本概述 今天给大家介绍的一款芯片是OVP&#xff0c;相比于传统的OVP芯片来说&#xff0c;这款芯片新增了数字信号控制&#xff0c;可以进行10Mbps的一个通信&#xff0c;通过外部的GPIO口进行控制&#xff0c;达到输入与输出信号的产生。 YHM2009这款OVP芯片具有较低的导通…

图像分类(一) 全面解读复现AlexNet

解读 论文原文&#xff1a;http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf Abstract-摘要 翻译 我们训练了一个庞大的深层卷积神经网络&#xff0c;将ImageNet LSVRC-2010比赛中的120万张高分辨率图像分为1000个不…

如何实现一个下班倒计时程序

shigen日更文章的博客写手&#xff0c;擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长&#xff0c;分享认知&#xff0c;留住感动。 Hello伙伴们&#xff0c;好几天不见啦。最近也是晚上打球太累&#xff0c;加上一直在研究mybatis的多租户问题&…

LM(大模型)应用开发利器之LangChain,带你走进AI世界

原文&#xff1a;LLM&#xff08;大模型&#xff09;应用开发利器之LangChain&#xff0c;带你走进AI世界 - 简书 LangChain组件图 LangChain 是什么 首先 LangChain 是一个框架&#xff0c;这个框架是用来让开发者进行 LLMs &#xff08;大语言模型&#xff09;应用开发的。…