Stable Diffusion — ControlNet 超详细讲解

Stable Diffusion — ControlNet 超详细讲解

ControlNet 最近非常火🔥!ControlNet 和 Stable Diffusion 的结合使 Stable Diffusion 能够接受指导图像生成过程的条件输入,从而增强了 Stable Diffusion 的性能。今天为大家深入剖析 ControlNet 的工作原理。

img

文章目录

    • 什么是 ControlNet
    • 内部架构
      • 前馈
      • 反向传播
    • 与 Stable Diffusion 相结合
      • 编码器
      • 整体架构
    • 训练
    • 输入条件
    • 总结

什么是 ControlNet

ControlNet 是一个控制预训练图像扩散模型(例如 Stable Diffusion)的神经网络。它允许输入调节图像,然后使用该调节图像来操控图像生成。

这里的调节图像类型众多,例如涂鸦、边缘图、姿势关键点、深度图、分割图、法线图等,这些输入都可以作为条件输入来指导生成图像的内容。 下面是一些例子:

在这里插入图片描述

图片来源:https://github.com/lllyasviel/ControlNet

内部架构

在这里插入图片描述

图1. ControlNet 内部架构

Stable Diffusion (UNet) 中的所有参数都被锁定并克隆到 ControlNet 端的可训练副本中。然后使用外部条件向量训练该副本。

创建原始权重的副本而不是直接训练原始权重是为了防止数据集较小时出现过拟合,并保持已经训练好的大模型的高质量,这些大模型在数十亿图像上训练得到,并可以直接部署到生产环境使用。

前馈

在这里插入图片描述

图2. ControlNet 前馈部分

解释一下上图公式和符号:

  • x , y x, y x,y:神经网络中的深层特征
  • c c c:额外条件
  • + + + : 特征相加
  • Z ( ⋅ ; ⋅ ) \mathcal{Z}(\cdot\;;\;\cdot) Z(;):零卷积运算(权重和偏差都用零初始化的 1 x 1 卷积层)
  • F ( ⋅ ; ⋅ ) \mathcal{F}(\cdot\;;\;\cdot) F(;):神经网络块操作(例如 “resnet” 块、“conv-bn-relu” 块等)
  • Θ z 1 \Theta_{z1} Θz1:第一个零卷积层的参数
  • Θ z 2 \Theta_{z2} Θz2:第二个零卷积层的参数
  • Θ c \Theta_c Θc:可训练副本的参数

第一步训练

在这里插入图片描述

图3. ControlNet 的第一步训练

在第一步训练中,由于零卷积层的权重和偏差被初始化为零,因此前馈过程与没有 ControlNet 的过程相同。

经过反向传播后,ControlNet 中的零卷积层变为非零并影响输出。

换句话说,当 ControlNet 应用于某些神经网络块时,在进行任何优化之前,不会对深度神经特征造成任何影响。

反向传播

在这里插入图片描述

图4. ControlNet 反向传播部分

反向传播更新 ControlNet 中的可训练副本和零卷积层,使零卷积权重通过学习过程逐渐过渡到优化值。

为什么梯度不会为零?

我们可以假设如果卷积层的权重为零,则梯度为零。 然而,事实并非如此。

假设 y = w x + b y = wx + b y=wx+b 是零卷积层,其中 w w w b b b 分别是权重和偏差, x x x 是输入特征图。以下是每一项的梯度。
y = w x + b ∂ y ∂ w = x ∂ y ∂ x = w ∂ y ∂ b = 1 y = wx+b\\ \frac{\partial y}{\partial w} = x \qquad \frac{\partial y}{\partial x} = w \qquad \frac{\partial y}{\partial b} = 1 y=wx+bwy=xxy=wby=1
如果 w = 0 w=0 w=0 x ≠ 0 x \ne 0 x=0,则
∂ y ∂ w = x ≠ 0 ∂ y ∂ x = w = 0 ∂ y ∂ b = 1 ≠ 0 \frac{\partial y}{\partial w} = x \ne 0 \qquad \frac{\partial y}{\partial x} = w = 0 \qquad \frac{\partial y}{\partial b} = 1 \ne 0 wy=x=0xy=w=0by=1=0
回想一下梯度下降和链式法则:
w ← w − α ∂ L ∂ w w ← w − α ∂ L ∂ ⋅ … ∂ L ∂ w ⏟ ≠ 0 w \larr w-\alpha\frac{\partial \mathcal{L}}{\partial w}\\ w \larr w-\alpha\frac{\partial \mathcal{L}}{\partial \cdot}\dots\frac{\partial \mathcal{L}}{\underbrace{\partial w}_{\ne 0}} wwαwLwwαL=0 wL
一步训练之后, ∂ y ∂ x ≠ 0 \frac{\partial y}{\partial x} \ne 0 xy=0

一开始,当权重值 w = 0 w = 0 w=0 时,输入特征 x x x 通常不为0。结果,虽然 x x x 上的梯度由于零卷积而变为0,但权重和偏置的梯度不受影响。尽管如此,在一个梯度下降步骤之后,权重值 w w w 将更新为非零值(因为 y y y w w w 的偏导数非零)。

与 Stable Diffusion 相结合

编码器

由于 Stable Diffusion 的 UNet 接受潜在特征 ( 64 × 64 64 \times 64 64×64) 而不是原始图像,因此我们还必须将基于图像的条件转换为 64 × 64 64 \times 64 64×64 的特征空间以匹配卷积大小。
c f = ε ( c i ) c_f = \varepsilon(c_i) cf=ε(ci)
我们可以使用网络 ε \varepsilon ε 将输入条件 c i c_i ci 编码为特征图 c f c_f cf

在这里插入图片描述

图5. ControlNet 编码器

上图中,我们使用 z t z_t zt z t − 1 z_{t-1} zt1 作为锁定网络块的输入和输出,以匹配 Stable Diffusion 上下文中的符号。

整体架构

下图展示了 Stable Diffusion 中 ControlNet 和 UNet 在一个去噪步骤中的输入和输出。

在这里插入图片描述

图6. 一步去噪流程

此外,下图从整体上说明了 ControlNet 和 Stable Diffusion 如何在反向扩散过程(采样)中协同工作。

在这里插入图片描述

图7. 整体反向扩散的流程

上图是根据我之前关于 Stable Diffusion 的文章修改的。如果您还没有阅读过,建议您阅读 《Stable Diffusion 超详细讲解》 和 《Diffusion Model 深入剖析》。

训练

ControlNet 损失函数与 Stable Diffusion 的损失函数类似,但包含文本条件 c t c_t ct 和潜在条件 c f c_f cf,以提高输出与指定条件的一致性。

Stable Diffusion 损失函数:
L = E z 0 , t , ϵ [ ∥ ϵ − ϵ θ ( z t , t ) ∥ 2 ] \mathcal{L} = \mathbb{E}_{z_0,t,\epsilon}\big[\Vert \epsilon - \epsilon_\theta(z_t,t)\Vert^2\big] L=Ez0,t,ϵ[ϵϵθ(zt,t)2]
Stable Diffusion + ControlNet 损失函数:
L = E z 0 , t , ϵ , c t , c f [ ∥ ϵ − ϵ θ ( z t , t , c t , c f ) ∥ 2 ] \mathcal{L} = \mathbb{E}_{z_0,t,\epsilon,\boxed{c_t,c_f}}\big[\Vert \epsilon - \epsilon_\theta(z_t,t,\boxed{c_t,c_f})\Vert^2\big] L=Ez0,t,ϵ,ct,cf[ϵϵθ(zt,t,ct,cf)2]
作为训练过程的一部分,我们随机用空字符串替换 50% 的文本提示 c t c_t ct。这有助于 ControlNet 更好地理解输入条件图的含义,例如 Canny 边缘图或人类涂鸦。

在这里插入图片描述

图8. 训练 ControlNet

通过删除提示,编码器被迫更多地依赖控制图中的信息,这提高了其理解其语义内容的能力。

输入条件

ControlNet 是一种灵活的工具,允许您使用不同类型的条件输入来加强 Stable Diffusion。以下是可在 ControlNet 中使用的输入类型。

Canny 边缘图

img

线条图

img

涂鸦

img

霍夫线

img

语义分割

img

深度图

img

法线图

img

姿势

img

总结

ControlNet 是一种神经网络,可以与预训练的扩散模型结合使用,特别是 Stable Diffusion 模型。

ControlNet 允许将条件输入(例如边缘图、分割图和关键点)包含到 Stable Diffusion 等大型扩散模型中。

结合 ControlNet 可以更好地控制图像生成过程,从而能够生成更具体、更符合要求的图像。

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

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

相关文章

如何让自己的精力集中 Maven自学笔记 马云演讲观看

目录 如何让自己的精力集中 Avoid having multiple tasks and objects in your line of sight 人的脑袋是给自己思考用的 晚上床上想千条路,早上起床还是走原路 参与才会变得更好 共度灾难,是需要互相鼓励的 CFO Capital 上海各区都有哪些大学?…

git快速查看某个文件修改的所有commit

1. git blame file git blame 可以显示历史修改的每一行记录,有时候我们只想了解某个文件一共提交几次commit,只显示commit列表,这种方式显然不满足要求。 2.git log常规使用 (1)显示整个project的所有commit (2)显示某个文件的所有commit 这是git log不添加参数的常规…

纽扣电池/锂电池UN38.3安全检测报告

根据规章要求,航空公司和机场货物收运部门应对锂电池进行运输文件审查,重要的是每种型号的锂电池UN38.3安全检测报告。该报告可由的三方检测机构。如不能提供此项检测报告,将禁止锂电池进行航空运输. UN38.3包含产品:1、 锂电池2…

无涯教程-JavaScript - BESSELK函数

描述 BESSELK函数返回修改后的Bessel函数Kn(x),该函数等效于针对纯虚参判断的Bessel函数。 这些也称为双曲贝塞尔函数。 语法 BESSELK(X, N)争论 Argument描述Required/OptionalXThe value at which to evaluate the function.RequiredNThe order of the function. If n i…

Matlab进阶绘图第27期—水平双向堆叠图

在上一期文章中,分享了Matlab双向堆叠图的绘制方法: 进一步,再来看一下水平双向堆叠图的绘制方法(由于Matlab中未收录水平双向堆叠图的绘制函数,因此需要大家自行设法解决)。 先来看一下成品效果&#xff…

基于多设计模式下的同步异步日志系统

基于多设计模式下的同步&异步日志系统 代码链接:https://github.com/Janonez/Log_System 1. 项目介绍 本项目主要实现一个日志系统, 其主要支持以下功能: 支持多级别日志消息支持同步日志和异步日志支持可靠写入日志到标准输出、文件…

【Three.js】第二十一章 Physics 物理

介绍 物理是WebGL可以添加到项目体验中最酷的功能之一。人们喜欢真实物理感的物体,看到它们碰撞、倒塌、坠落和弹跳,就像我的作品集一样: https: //bruno-simon.com/ 有很多方法可以将物理功能添加到您的项目中,这取决于您想要实…

21.4 CSS 盒子模型

1. 边框样式 border-style属性: 指定元素的边框样式.常用属性值: - none: 无边框(默认值). - solid: 实线边框. - dotted: 点状边框. - dashed: 虚线边框. - double: 双线边框. - groove: 凹槽状边框. - ridge: 脊状边框. - inset: 内阴影边框. - outset: 外阴影边框.这些值可…

使用SimPowerSystems并网光伏阵列研究(Simulink实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

C++:类和对象(二)

本文主要介绍:构造函数、析构函数、拷贝构造函数、赋值运算符重载、const成员函数、取地址及const取地址操作符重载。 目录 一、类的六个默认成员函数 二、构造函数 1.概念 2.特性 三、析构函数 1.概念 2.特性 四、拷贝构造函数 1.概念 2.特征 五、赋值…

TS编译选项

自动监控编译 tsc xxx.ts -w 在一个文件夹下,创建 tsconfig.json 文件,在用命令 tsc 就可以自动编译当前文件夹下的ts文件 tsconfig.json文件配置如下: {/*tsconfig.json 是ts编译器的配置文件,ts编译器可以根据它的信息来对代…

Jenkins+maven+testng+htmlreport单元自动化测试

背景说明 为了可以在jenkins自动化运行单元测试的代码,所以使用maventestng的技术结合,达到手动或者定时去执行单元测试的代码,以便提高人工运行的自动化的效率。单元通过该方案也可以套用在httpclient框架去执行测试web api接口的自动化测试…

2022年09月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:城堡问题 1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####—#####—#—#####—# 2 # # | # # # # # #—#####—#####—#####—# 3 # | | # # # # # #—#########—#####—#—# 4 # # | | | | # # ###########…

2023高教社杯数学建模E题思路模型 - 黄河水沙监测数据分析

# 1 赛题 E 题 黄河水沙监测数据分析 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变 化和人民生活的影响, 以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾 等方面都具有重要的理论指导意义。 附件 1 给出了位…

Opencv图像暗通道调优

基于雾天退化模型的去雾算法,Opencv图像暗通道调优,(清华版代码)对普通相片也有较好的调优效果,相片更通透。 结合代码实际运行效果、算法理论模型、实际代码。我个人理解,实际效果是对图像的三个颜色通道…

04架构管理之分支管理实践-一种git分支管理最佳实践

专栏说明:针对于企业的架构管理岗位,分享架构管理岗位的职责,工作内容,指导架构师如何完成架构管理工作,完成架构师到架构管理者的转变。计划以10篇博客阐述清楚架构管理工作,专栏名称:架构管理…

PDF转Word的方法分享与注意事项。

PDF和Word是两种常用的文档格式,它们各有优点,适用于不同的场景。然而,有时候我们需要将PDF转换为Word,以便更好地进行编辑和排版。本文将介绍几种常用的PDF转Word的方法,并分享一些注意事项。 一、PDF转Word的方法 使…

05-JVM内存分配机制深度剖析

上一篇:04-JVM对象创建深度剖析 1.对象栈上分配 我们通过JVM内存分配可以知道JAVA中的对象都是在堆上进行分配,当对象没有被引用的时候,需要依靠GC进行回收内存,如果对象数量较多的时候,会给GC带来较大压力&#xff…

按照xml文件和txt文件名,将对应名字的图象文件复制

按照xml文件和txt文件名,将对应名字的图象文件复制 需求分析解决方案 需求分析 就是已经标注了xml和txt文件,需要将其对应的图象文件挑选出来 解决方案 # 按照xml文件删除对应的图片 # coding: utf-8 from PIL import Image, ImageDraw, ImageFont imp…

多维时序 | MATLAB实现GWO-GRU灰狼算法优化门控循环单元的多变量时间序列预测

多维时序 | MATLAB实现GWO-GRU灰狼算法优化门控循环单元的多变量时间序列预测 目录 多维时序 | MATLAB实现GWO-GRU灰狼算法优化门控循环单元的多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现基于GWO-GRU灰狼算法优化门控循环单元的多变量时…