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.hqwc.cn/news/192356.html

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

相关文章

systemverilog:interface中端口方向、Clocking block的理解

1、interface中端口方向的理解 &#xff08;1&#xff09;从testbench的角度看&#xff0c;tb中信号的输入输出方向与interface中信号输入输出方向一致&#xff1a; &#xff08;2&#xff09;从DUT角度看&#xff0c;DUT中信号输入输出方向与interface中信号输入输出方向相反…

springboot323基于Java的美妆购物网站的设计与实现

交流学习&#xff1a; 更多项目&#xff1a; 全网最全的Java成品项目列表 https://docs.qq.com/doc/DUXdsVlhIdVlsemdX 演示 项目功能演示&#xff1a; ————————————————

图像分类系列(三) GoogLeNet InceptionV1学习详细记录

前言 ​ 在上一期中介绍了VGG&#xff0c;VGG在2014年ImageNet 中获得了定位任务第1名和分类任务第2名的好成绩&#xff0c;而今天要介绍的就是同年分类任务的第一名——GoogLeNet 。 ​ 作为2014年ImageNet比赛冠军&#xff0c;GoogLeNet 比VGG更深的网络&#xff0c;比Alex…

基于Java+SpringBoot+Vue3+Uniapp+TypeScript(有视频教程)前后端分离健身预约系统设计与实现

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

Yolov5

Yolov5 Anchor &#xff11;&#xff0e;Anchor是啥&#xff1f; anchor字面意思是锚&#xff0c;是个把船固定的东东&#xff08;上图&#xff09;&#xff0c;anchor在计算机视觉中有锚点或锚框&#xff0c;目标检测中常出现的anchor box是锚框&#xff0c;表示固定的参考框…

App测试入门

App测试基础知识 App测试&#xff0c;是指对移动应用软件&#xff08;如手机app、平板app等&#xff09;进行全面和系统的测试&#xff0c;以确保其功能、性能、安全性、稳定性、兼容性等方面能满足用户的使用需求和期望。 App常见运行系统 IOS系统&#xff1a; IOS系统是苹果公…

服务容错之限流之 Tomcat 限流 Tomcat 线程池的拒绝策略

在文章开头&#xff0c;先和大家抛出两个问题&#xff1a; 每次提到服务限流为什么都不考虑基于 Tomcat 来做呢&#xff1f;大家有遇到过 Tomcat 线程池触发了拒绝策略吗&#xff1f; JUC 线程池 在谈 Tomcat 的线程池前&#xff0c;先看一下 JUC 中线程池的执行流程&#x…

【Linux】进程间通信 -- 共享内存

共享内存 共享内存是SystemV标准进程间通信的一种&#xff0c;该标准还有消息队列和信号量&#xff0c;但下文主要介绍共享内存&#xff0c;然后在谈一下信号量的内容。SystemV标准的进程间通信可以看做单机版的进程间通信。 // 1. log.hpp #pragma once#include <iostrea…

Java(一)(引用类型的参数在传递,方法重载,面向对象编程基础)

基本类型和引用类型的参数在传递的时候有什么不同? 基本类型的值传递:参数传输存储的数据值 引用类型的值传递:参数传输存储的地址值 传递数组名字的时候,传递的是数组的地址,change方法可以通过地址直接访问我们在堆内存中开辟的数组,然后改变数组,数组中的元素发生变化 方…

K-Means算法进行分类

已知数据集D中有9个数据点&#xff0c;分别是&#xff08;1,2&#xff09;&#xff0c;(2,3), (2,1), (3,1),(2,4),(3,5),(4,3),(1,5),(4,2)。采用K-Means算法进行聚类&#xff0c;k2&#xff0c;设初始中心点为&#xff08;1.1,2.2&#xff09;&#xff0c;&#xff08;2.3,3.…

在Rust编程中使用泛型

1.摘要 Rust中的泛型可以让我们为像函数签名或结构体这样的项创建定义, 这样它们就可以用于多种不同的具体数据类型。下面的内容将涉及泛型定义函数、结构体、枚举和方法, 还将讨论泛型如何影响代码性能。 2.在函数定义中使用泛型 当使用泛型定义函数时&#xff0c;本来在函…

竞赛选题 疲劳驾驶检测系统 python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#x…