Adding Conditional Control to Text-to-Image Diffusion Models——【论文笔记】
本文发表于ICCV2023
论文地址:ICCV 2023 Open Access Repository (thecvf.com)
官方实现代码:lllyasviel/ControlNet: Let us control diffusion models! (github.com)
Abstract
论文提出了一种神经网络架构ControlNet,可以将空间条件控制添加到大型的预训练文本到图像扩散模型中。ControlNet将预训练好的大型扩散模型锁定,通过克隆的方式重新使用其深度和强大的编码层,以学习需要加入的各种条件控制,并通过一个特殊的卷积层“零卷积”连接。
通过各种实验证明,通过ControlNet来实现各种如边缘、深度、分割、人体姿势等条件控制的扩散模型是十分有效的,且无论对于大型还是小型数据集而言,训练都是鲁棒的,大量结果表明ControlNet可以促进更广泛的应用程序来控制图像扩散模型。
一、Introduction
目前文本生成图像的扩散模型可以给我们带来高质量的图像生成。然而,文本生成图像模型在对图像的空间组成提供的控制方面是有限的;仅仅通过文本提示精确的表达复杂的布局、姿势、形状和形式比较困难。因此生成一个与我们心理意向准确匹配的图像通常需要无数次的试验。于是我们试图通过提供额外的图像来直接指定想要的图像组合,从而实现更细粒度的空间控制,比如边缘图、人体姿势骨架、分割图、深度、法线等,这些通常被视为图像生成过程中的条件。
以端到端的方式学习大型文本到图像扩散模型的条件控制是具有挑战性的。特定条件的训练数据量可能显著小于可用于一般文本到图像训练的数据。直接微调或继续训练具有有限数据的大型预训练模型可能会导致过度拟合和灾难性遗忘。
本文介绍了ControlNet,这是一种端到端的神经网络架构,可以学习大型预训练文本到图像扩散模型的条件控制(在我们的实现中是稳定扩散)。
二、Related Work
1.微调神经网络
微调神经网络的一种方法是直接用额外的训练数据继续训练它。但这种方法可能导致过拟合、模式崩溃和灾难性遗忘。广泛的研究集中在开发微调策略,以避免这些问题。
这里主要简单介绍了HyperNetwork、Adapter、Addtiive Learning、Low-Rank Adaptation (LoRA)以及Zero-Initialized Layers。
2.图像扩散
这部分首先介绍了当前几个比较有名的图像扩散模型,包括潜在扩散模型LDM,也就是StableDiffusion的基础;以及GLIDE、Imagen、DALL-E2和Midjourney。
然后,介绍了目前比较流行的控制图像扩散模型的方法,主要包括MakeAScene、SpaText、Textual Inversion和DreamBooth等,最后还简单聊了一下图像到图像的转换条件。
三、Method
1.ControlNet
ControlNet会将附加的条件注入到神经网络的块中。
这个所谓的“网络块”用于指代通常放在一起以形成神经网络的单个单元的一组神经层,例如,resnet块、conv-bn-relu块、多头注意力块、Transformer块等。
论文中,以2D特征图为例,即x ∈ Rh×w×c,{h,w,c}分别为地图中通道的高度、宽度和数量。
为了将ControlNet添加到这样一个预先训练的神经块中,首先要锁定(冻结)原始块的参数Θ,同时将该块克隆到具有参数Θc的可训练副本中(图b)。可训练副本将外部条件向量c作为输入。当这种结构应用于稳定扩散等大型模型时,锁定的参数保留了用数十亿张图像训练的生产就绪模型,而可训练副本则重用这种大规模预训练模型,以建立一个深度,鲁棒性和强大的骨干来处理不同的输入条件。
然后,使用零卷积层将训练完的副本块与原始模型连接起来,并将学习到的额外条件信息映射到参数固定的预训练大模型中。如图(b)所示,将副本块与原始模型之间添加两个零卷积层,再与原始模型相连接,这两个零卷积层的权重会在训练过程中逐渐增加。通过这种连接方式,副本块的输出可以与原始模型的输出相加,从而将额外的条件信息引入到预训练大模型中。这样做的好处是,在训练初期,不会往大模型的深层特征中加入任何有害的噪声,同时也保护了预训练大模型的质量和能力。
2.ControlNet for Text-to-Image Diffusion
Stable Diffusion是一个在数十亿张图像上训练的大型文本-图像扩散模型,本质上是个U-Net,包括一个编码器、一个中间块和一个跳连解码器。编码器和解码器都有12个块,完整的模型包含25个块。在这些块中,有8个块是下采样或上采样的卷积层,17个块是主要块,每个块包含四个ResNet层和两个ViT。每个ViT包含几个交叉注意力。文本使用CLIP进行编码,扩散时间步使用位置编码进行编码。
如上图是将ControlNet添加到StableDiffusion中的结构图,如此连接ControlNet的方式在计算上是高效的-由于锁定的复制参数被冻结,因此在最初锁定的编码器中不需要梯度计算来进行微调。这种方法可以加快训练速度并节省GPU内存。在单个NVIDIA A100 PCIE 40 GB上进行的测试表明,与不使用ControlNet优化Stable Diffusion相比,使用ControlNet优化Stable Diffusion只需要增加约23%的GPU内存和34%的训练迭代时间。
3.Training
给定输入图像z0,图像扩散算法逐渐地将噪声添加到图像并产生噪声图像zt,其中t表示添加噪声的次数。给定包括时间步长t、文本提示ct以及特定于任务的条件cf的一组条件。
L是整个扩散模型的总体学习目标。输入的四个参数Zt,t,Ct,Cf分别是:
- Zt:潜在噪声向量
- t:时间步骤t
- Ct:文本提示Prompt
- Cf:额外添加的条件
在训练过程中,会随机将50%的文本提示ct替换为空字符串。这种方法增加了ControlNet直接识别输入条件图像中的语义的能力(例如,边缘、姿势、深度等)作为提示的替代。在训练过程中,由于零卷积不会给网络增加噪声,因此模型应该始终能够预测高质量的图像。
4.Inference
通过额外的方式进一步去控制ControlNet的外条件去影响去噪扩散过程:
Classifier-free guidance resolution weighting,StableDiffusion依赖于无分类器指导技术(CFG)来生成高质量的图像。它可以根据用户的指定权重来引导图像生成过程。当添加条件图像时,可以选择将其同时应用到图像的多个部分或只应用到特定部分。这样可以根据条件图像的特征来调整生成图像的细节。 为了实现CFG分辨率加权,我们首先将条件图像添加到一部分特定的区域。然后,在稳定扩散和条件图像之间的每个连接处,按照每个区域的大小给予权重。通过降低CFG的引导强度,可以在生成图像时更灵活地控制条件图像的影响。这样可以得到更加清晰和逼真的图像效果。
此外,还可以使用多个调节图像,例如Canny边缘和姿态,来进一步改进生成的图像。通过将不同调节图像的输出直接添加到生成模型中,而无需进行额外的加权或线性插值,可以有效地组合多个控制因素,使生成的图像更加细致和准确。
四、Experiments
1.Ablative Study
消融实验:
(a) ControlNet的原始结构
(b) 用高斯权值初始化的标准卷积层替换零卷积层
(c) 用单个卷积层替换每个块的可训练副本,称之为ControlNet-lite。
主要实验了四种测试:无提示、不充分的提示、具有语义冲突的提示、完美的提示。
结果:轻量级ControlNet-lite(图8 c)不足以解释调节图像,并且在不充分和无提示条件下失败。当零卷积被替换时,ControlNet的性能下降到与ControlNet-lite大致相同,这表明可训练副本的预训练骨干在微调期间被破坏(图8b)。
在ADE20K数据集上进行实验分析,指标是Intersection over Union (IoU),用于评估语义分割标签重建的准确性。
基于语义分割的图像生成评价。FID、CLIP文本图像评分和CLIP美学评分,用于我们的方法和其他基线。
FID 是用于衡量生成图像与参考模型生成图像之间的差距的指标,FID值越低表示生成图像与真实图像的分布越接近。
CLIP-score是使用CLIP模型计算的文本和图像之间的相似度得分,它衡量了生成图像与输入文本之间的语义一致性。
CLIP-aesthetic是使用CLIP模型计算的生成图像的美学评分,它衡量了生成图像的质量和视觉吸引力。
下面是与其他方法所做的比较:
参考:不得不读 | 深入浅出ControlNet,一种基于生成扩散模型Stable Diffusion、可控生成的AIGC绘画生成算法! - 知乎 (zhihu.com)
相关文章:
Adding Conditional Control to Text-to-Image Diffusion Models——【论文笔记】
本文发表于ICCV2023 论文地址:ICCV 2023 Open Access Repository (thecvf.com) 官方实现代码:lllyasviel/ControlNet: Let us control diffusion models! (github.com) Abstract 论文提出了一种神经网络架构ControlNet,可以将空间条件控制添加到大型…...
Python与人工智能
Python 是一种广泛用于人工智能(AI)开发的编程语言。Python具有简洁的语法和强大的库支持,使其成为数据科学、机器学习和深度学习的理想选择。 Python中有许多库可以帮助实现人工智能,其中最流行的包括TensorFlow和PyTorch。这些…...
【Docker】Docker基础
文章目录 安装使用帮助启动命令镜像命令容器命令 安装 # 卸载旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine # 设置存储库 sudo yum install -y yum-utils …...
linux异常情况,排查处理中
登录客户环境后,发现一个奇怪情况如下图,之前也遇到过,直接fuser -ck /backup操作的话,主机将会重启,因数据库运行中,等待停机维护时间,同时也在想办法不重启的情况下解决该问题 [rootdb ~]# f…...
Spring Boot参数校验方案
NotNull:值不能为null;NotEmpty:字符串、集合或数组的值不能为空,即长度大于0;NotBlank:字符串的值不能为空白,即不能只包含空格;Size:字符串、集合或数组的大小是否在指…...
【漏洞复现】ActiveMQ反序列化漏洞(CVE-2015-5254)
Nx01 产品简介 Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件。ActiveMQ是消息队列服务,是面向消息中间件(MOM)的最终实现,它为企业消息传递提供高可用、出色性能、可扩展、稳定和安全保障。 Nx02 漏洞描述 Re…...
面试题:MySQL误删表数据,如何快速恢复丢失的数据?
相信后端研发的同学在开发过程经常会遇到产品临时修改线上数据的需求,如果手法很稳那么很庆幸可以很快完成任务,很不幸某一天突然手一抖把表里的数据修改错误或者误删了,这个时候你会发现各种问题反馈接踵而来。 如果身边有BDA或者有这方面经…...
李沐之神经网络基础
目录 1.模型构造 1.1层和块 1.2自定义块 1.3顺序块 1.4在前向传播函数中执行代码 2.参数管理 2.1参数访问 2.2参数初始化 3.自定义层 3.1不带参数的层 3.2带参数的层 4.读写文件 4.1加载和保存张量 4.2加载和保存模型参数 1.模型构造 1.1层和块 import torch fr…...
【docker】使用 Dockerfile 构建镜像
一、什么是Dockerfile Dockerfile 是用于构建 Docker 镜像的文本文件。它包含了一系列的指令,用于描述如何构建镜像的步骤和配置。 通过编写 Dockerfile,您可以定义镜像的基础环境、安装软件包、复制文件、设置环境变量等操作。Dockerfile 提供了一种可…...
计算机网络—— 概述
概述 1.1 因特网概述 网络、互联网和因特网 网络由若干结点和连接这些结点的链路组成多个网络还可以通过路由器互联起来,这样就构成了一个覆盖范围更大的网络,即互联网(或互连网)。因特网(Internet)是世…...
“超人练习法”系列06:如何更好地掌握技能?
01 掌握的阶段 关于人类学习新事物的最生动、最精妙的比喻,我是从笑来老师那里学到的。 他指出,学习新知识、新概念犹如在构建自己大脑皮层,每个习得的概念就像是大脑皮层上的一个个微小神经元。 一个看似聪明、博学的人,总能在各…...
【华为OD机试真题2023CD卷 JAVAJS】字符串拼接
华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 字符串拼接 知识点数组递归 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 给定M(0<M<=30)个字符(a-z),从中取出任意字符(每个字符只能用一次)拼接成长度为N(0<N<=5)的字符串,要求相同的字…...
【算法】链表-20240109
这里写目录标题 一、141. 环形链表二、876. 链表的中间结点三、面试题 02.01. 移除重复节点 一、141. 环形链表 简单 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中…...
机器学习系列--R语言随机森林进行生存分析(2)
随机森林(Breiman 2001a)(RF)是一种非参数统计方法,需要没有关于响应的协变关系的分布假设。RF是一种强大的、非线性的技术,通过拟合一组树来稳定预测精度模型估计。随机生存森林(RSF࿰…...
Flutter GetX 之 状态管理
上一篇文章为大家介绍了 GetX的 路由管理,让大家对GetX有了初步了解,今天为大家介绍一下GetX的 状态管理。 StatelessWidget 和 StatefulWidget 介绍 在介绍之前,先简单介绍一下 Flutter 页面的 StatelessWidget 和 StatefulWidget ,其实Flutter的本质是万物都是Widget,…...
e2studio开发磁力计LIS2MDL(1)----轮询获取磁力计数据
e2studio开发磁力计LIS2MDL.1--轮询获取磁力计数据 概述视频教学样品申请源码下载速率新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()prin…...
C++ 字符串大小写转换,替换,文件保存 方法封装
此示例程序方法已经封装好使用std::islower()函数可以检查一个字符是否是小写字母,使用std::isupper()函数可以检查一个字符是否是大写字母。 如果传入的字母是小写字母,则使用std::toupper()函数将其转换为大写字母,并输出转换后的结果。 如果输入的字母是大写字母,则使…...
计算机基础面试题 |19.精选计算机基础面试题
🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...
mysql 添加用户并分配select权限
1.root用户先登录或者在可执行界面 1.1 选择mysql 点击mysql 或者在命令行 use mysql 1.2创建用户 CREATE USER username% IDENTIFIED BY password; 备注1:%替换为可访问数据库的ip,例如“127.0.0.1”“192.168.1.1”,使用“%”表示不限制…...
重新认识canvas,掌握必要的联结密码
查看专栏目录 canvas示例教程100专栏,提供canvas的基础知识,高级动画,相关应用扩展等信息。canvas作为html的一部分,是图像图标地图可视化的一个重要的基础,学好了canvas,在其他的一些应用上将会起到非常重…...
Linux第21步_取消鼠标中键的复制粘贴功能
在ubuntu18.04操作系统中,选中文本后,若按下鼠标中键,就可以执行复制粘贴,相当于 CtrlshiftC 后又按了 CtrlshiftV。在Linux系统中,基本上都是这么配置的。在windows系统中,我们习惯用Ctrl-C复制࿰…...
数学建模-Matlab R2022a安装步骤
软件介绍 MATLAB是一款商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分,可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程…...
【AI】Pytorch 系列:学习率设置
a. 有序调整:等间隔调整(Step),按需调整学习率(MultiStep),指数衰减调整(Exponential)和 余弦退火CosineAnnealing。 b. 自适应调整:自适应调整学习率 ReduceLROnPlateau。 c. 自定义调整:自定义调整学习率 LambdaLR。 #得到当前学习率 lr = next(iter(optimizer.param_gr…...
LeetCode第107题 - 二叉树的层序遍历 II
题目 解答 class Solution {List<List<Integer>> nodeLevels new LinkedList<>();public List<List<Integer>> levelOrderBottom(TreeNode root) {levelOrder(root, 0);List<List<Integer>> nodeLevels2 new LinkedList<>…...
java 常⽤的线程池模式FixedThreadPool
java 常⽤的线程池模式FixedThreadPool 线程池中的线程数量是固定的。 当提交一个新任务时,如果线程池中的线程都在运行,新任务就会被放入任务队列中等待执行。 如果线程池中的所有线程都在运行,且任务队列已满,那么线程池会创建新…...
双机调度算法
假设当前有两个处理机A、B,以及n个待处理的任务。第i个任务在处理处理机A上处理需要的时间为ai,在处理机B上处理的时间为bi,两个处理机可以并行处理任务,但单个处理机不能同时执行任务。要求给定n个任务及各个任务对应的ai 、bi&a…...
精进单元测试技能——Pytest断言的艺术
本篇文章主要是阐述Pytest在断言方面的应用。让大家能够了解和掌握Pytest针对断言设计了多种功能以适应在不同测试场景上使用。 了解断言的基础 在Pytest中,断言是通过 assert 语句来实现的。简单的断言通常用于验证预期值和实际值是否相等,例如…...
探索人工智能:深度学习、人工智能安全和人工智能
深度学习是人工智能的一种重要技术,它模拟了人类大脑神经网络的工作原理,通过建立多层次的神经元网络来实现对数据的分析和处理。这种技术的引入使得人工智能的发展进入到了一个新的阶段。 现如今,深度学习在各个领域都有着广泛的应用。例如…...
CHS_02.1.4+操作系统体系结构 二
CHS_02.1.4操作系统体系结构 二 操作系统的结构 上篇文章我们只介绍过宏内核 也就是大内核以及微内核分层结构的操作系统模块化是一种很经典的程序设计思想宏内核和微内核外核 操作系统的结构 上篇文章我们只介绍过宏内核 也就是大内核以及微内核 今年大纲又增加了分层结构 模块…...
【python可视化大屏】使用python实现可拖拽数据可视化大屏
介绍: 我在前几期分享了关于爬取weibo评论的爬虫,同时也分享了如何去进行数据可视化的操作。但是之前的可视化都是单独的,没有办法在一个界面上展示的。这样一来呢,大家在看的时候其实是很不方便的,就是没有办法一目了…...
做微商卖产品在哪个网站销量能好点/千峰培训出来好就业吗
用rmoutliers()函数即可移除数据组中的离群值,可作数据清洗的初步方法。如果是移除一类数据,可以用方差分析、主成分析、相关性分析、皮尔逊相关系数等方法。 语法 最简单的用法是第一个,其中A是输入的数据,B是输出的数据。 B …...
wordpress导航添加登陆按钮/线上拓客渠道有哪些
HTML5中的MathML 标签是最优先的元素。无论您要使用什么MathML元素,都应将它们包装在标记内。用法:child elements 属性:标签接受以下列出的一些属性:class|id|style:此属性用于保存子元素的样式。dir:此属性保存方向值。它具有两种类型的方向…...
花都营销型网站/产品软文
Oracle 19c,或者说是Oracle 12.2.0.3,是12c中稳定的版本,就像Oracle 11.2.0.4,是值得让客户做出升级决策,从Oracle支持的版本序列图中,就可以看出Oracle 19c所处的地位,Oracle 19c将稳定性作为此…...
网站被篡改怎样做/互联网营销策划是做什么的
Codeforces Round #618 (Div. 2) A做的还是不快 卡了一下B 果断开了C 然后回头发现B怎么过的人这么多 就想到了 最后抄板子过了D 一度以为能直接到蓝 熬了两个小时想看颜色变化 顶不死睡了起床发现只涨了100 而且也没有以前有过的涨很多分的congratulation A 题意:…...
衡水网站制/免费发帖的平台有哪些
1.背景 中文互联网没有真正的以地信遥感的资源内容为导向的网站。 而对于寻找相关地信资源、卫星产品数据的初学者,主要通过以下方式获取数据: 百度直接搜索数据。 通过淘宝、闲鱼购买数据; 转发公众号的推文,获取数据。 而知道各类数据下载…...
做电商不不得不知道的网站/合肥网站优化公司
ArrayList、List特点:查询快、增删慢 链表特点:查询慢,增删快 案例 package day29_collection集合体系;import java.util.ArrayList; import java.util.List;/** List:* 有序的(存储和读取的顺序是一致的)* 有整数…...