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) 

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

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

相关文章

性能分析与调优: Linux 监测工具的数据来源

目录 一、实验 1.环境 2. proc目录 3. sys目录 4.netlink 5.tracepoint 6.kprobes 7. uprobes 二、问题 1.systemd如何查看启动时间 2.CentOS与Ubuntu如何安装bpftrace 3.snap有哪些常用的命令 4.snap如何安装store 5.如何列出使用bpftrace的OpenJDK USDT探针 一…

显示管理磁盘分区 fdisk

显示管理磁盘分区 fdisk fdisk是用于检查一个磁盘上分区信息最通用的命令。 fdisk可以显示分区信息及一些细节信息,比如文件系统类型等。 设备的名称通常是/dev/sda、/dev/sdb 等。 对于以前的设备有可能还存在设备名为 /dev/hd* (IDE)的设备,这个设…

回顾2023编程之旅

一、前言 看在给了我一个博客专家的份上就继续写写博客,实事求是的讲如果是工作之余去总结csdn写写技术博客,还想混个专家什么的,真的是精力不够。因为里面的灌水的实在太多,比不过的,写这个玩意必须得淡泊名利才能悠然…

【PostgreSQL在线创建索引(CIC)功能的锁分析以及使用注意】

前一篇文章提到了普通创建索引会阻塞DML操作 PostgreSQL创建索引的锁分析和使用注意 而PostgreSQL里可以使用create index concurrently 在线创建索引(CIC)功能,降低创建索引在表上申请的锁的级别,ShareUpdateExclusiveLock级别的锁和RowExclusiveLock…

烟花燃放如何管控?智能分析网关V4烟火检测保障烟火安全

一、方案背景 随着元旦佳节的热潮退去,春节也即将来临,在众多传统的中国节日里,烟花与烧纸祭祀都是必不可少的,一方面表达了人们对节日的庆祝的期许,另一方面也是一种对故者思念的寄托。烟花爆竹的燃放不仅存在着巨大的…

Git将本地项目上传到Gitee仓库

1.右键点击文件,点击Git Bash Here,进入git窗口 2.初始化本地仓库 git init3.将本地仓库与远程仓库建立连接 git remote add origin 远程仓库地址远程仓库地址在gitee仓库复制即可 4.将远程仓库的文件拉到本地仓库中 git pull origin master5.将本地文件全部上传…

多模态推荐系统综述:二、特征交互 Fusion

二、Fusion 融合不同的多模态信息,与bridge相比,融合更关注项目之间的多模态内部关系。 它可以灵活地融合不同权重和焦点的多模态信息。 注意机制是应用最为广泛的特征融合。 2.1 粗粒度注意力。 一些模型应用注意力机制在粗粒度级别融合来自多种模式…

使用openssl 生成pfx格式证书时报错:unable to load certificates

问题现象包如下: 之前在centos上使用openssl部署证书服务器以及颁发证书的时候遇到的问题,在进行个人证书生成之后需要形成pfx格式证书,结果过程中报错了。网上类似资料比较少,做个记录。 生成pfx格式证书的命令: o…

c++实现支持动态扩容的栈(stack)

1.在栈容量满时自动扩容: 支持自动扩容栈实现: // // myStack.hpp // algo_demo // // Created by Hacker X on 2024/1/9. //#ifndef myStack_hpp #define myStack_hpp #include <stdio.h> #include <string.h> //栈实现 //1.入栈 //2.出栈 //3.空栈 //4.满栈 …

git安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;…

Java后端开发——Mybatis实验

文章目录 Java后端开发——Mybatis实验一、MyBatis入门程序1.创建工程2.引入相关依赖3.数据库准备4.编写数据库连接信息配置文件5.创建POJO实体6.编写核心配置文件和映射文件 二、MyBatis案例&#xff1a;员工管理系统1.在mybatis数据库中创建employee表2.创建持久化类Employee…

忆阻器芯片STELLAR权重更新算法(清华大学吴华强课题组)

参考文献&#xff08;清华大学吴华强课题组&#xff09; Zhang, Wenbin, et al. “Edge learning using a fully integrated neuro-inspired memristor chip.” Science 381.6663 (2023): 1205-1211. STELLAR更新算法原理 在权值更新阶段&#xff0c;只需根据输入、输出和误差…

python数据可视化之折线图案例讲解

学习完python基础知识点&#xff0c;终于来到了新的模块——数据可视化。 我理解的数据可视化是对大量的数据进行分析以更直观的形式展现出来。 今天我们用python数据可视化来实现一个2023年三大购物平台销售额比重的折线图。 准备工作&#xff1a;我们需要下载用于生成图表的第…

Hyperledger Fabric 自动发现网络信息 discover 工具使用

客户端要往 Fabric 网络中发送请求&#xff0c;首先需要知道网络的相关信息&#xff0c;如网络中成员组织信息、背书节点的地址、链码安装信息等。 在 Fabric v1.2.0 版本之前&#xff0c;这些信息需要调用者手动指定&#xff0c;容易出错&#xff1b;另外&#xff0c;当网络中…

Centos7 手动更改系统时间

文章目录 1.更改系统时间2.写入系统时间3.查看是否写入成功 1.更改系统时间 date -s "2017-12-18 09:40:00"2.写入系统时间 hwclock -w3.查看是否写入成功 timedatectl

RT-Thread:SPI万能驱动 SFUD 驱动Flash W25Q64,通过 STM32CubeMX 配置 STM32 SPI 驱动

关键词&#xff1a;SFUD,FLASH,W25Q64&#xff0c;W25Q128&#xff0c;STM32F407 说明&#xff1a;RT-Thread 系统 使用 SPI万能驱动 SFUD 驱动 Flash W25Q64&#xff0c;通过 STM32CubeMX 配置 STM32 SPI 驱动。 提示&#xff1a;SFUD添加后的存储位置 1.打开RT-Thread Sett…

497 蓝桥杯 成绩分析 简单

497 蓝桥杯 成绩分析 简单 //C风格解法1&#xff0c;*max_element&#xff08;&#xff09;与*min_element&#xff08;&#xff09;求最值 //时间复杂度O(n)&#xff0c;通过率100% #include <bits/stdc.h> using namespace std;using ll long long; const int N 1e4 …

线扫相机品牌汇总(国外+国内)

线扫相机品牌汇总(国外+国内) 行者 ​ 热爱生活 22 人赞同了该文章 线扫相机也叫做线阵相机,和面阵相机一样,都是重要的工业相机。 线扫相机正如其名字那样,拍照时像扫描一样,相机和被拍照物体有相对匀速运动。 Perhaps the most common example of line scan imagin…

谷粒商城项目|微服务架构的一些与思考解决跨域问题

1.微服务架构的组成每部分的作用 2.还有其他的微服务架构模式吗 3.微服务服务交互的方式 1&#xff09;grpc 2&#xff09;rest api 4.微服务网关与API网关&#xff1f; 5.注册中心比较&#xff08;Nacos与Eureka&#xff09; Nacos Nacos 是阿里巴巴开源的项目&#xff0c;N…

黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(上)准备工作、部门管理

一、准备工作 1.明确需求 根据产品经理绘制的页面原型&#xff0c;对部门和员工进行相应的增删改查操作。 2.环境搭建 将使用相同配置的不同项目作为Module放入同一Project&#xff0c;以提高相同配置的复用性。 准备数据库表&#xff08;dept, emp&#xff09; 资料中包含…