ControlNet Adding Conditional Control to Text-to-Image Diffusion Models

news2024/11/17 9:29:47

ControlNet: Adding Conditional Control to Text-to-Image Diffusion Models

TL; DR:ControlNet 使得我们能通过输入额外的条件图(如 Canny 边缘、人体姿态、深度图等),对 SD 生成结果的空间位置有更准确的控制。它拷贝 SD 部分原权重作为一个新的分支进行微调训练,同时维持 SD 原权重分支不变,并在开始训练使用零卷积将二者相连。从而能利用已经在大规模图片数据上预训练的 SD 权重,尽量保持原模型能力,且训练高效。

方法

模型结构

ControlNet 对 SD 原模型的 adapt 如图所示。图中 x 是输入噪声图,y 是输出,c 是条件图输入。拷贝一份原参数权重作为另一分支,进行训练,原参数权重分支不动,两分支之间用零卷积链接。所谓零卷积,就是权重和偏置都初始化为 0 的 1x1 卷积。这样,在训练刚开始时,由于零卷积的输出都是 0,因此改动后的模型和原 SD 模型的输出是完全一致的。随着训练的进行,才会产生变化。这样的结构能保证不会对预训练的 SD 模型带来有害的噪声。

在这里插入图片描述

文章以 SD txt2img 为例,详细介绍了插入 ControlNet 的方法。原 SD 的 UNet 网络共有 12 层降采样,12 层上采样和 1 层中间层。其特征图共有 4 中空间分辨率大小(64、32、16、8)。ControlNet 对 UNet 的 encoder 部分(12 层降采样 + 1 层中间层)构建了可训练拷贝。其输出分别经过零卷积,输入给原 SD 模型的解码器部分。

在这里插入图片描述

此外,SD 是隐层扩散模型(LDM),其扩散过程时发生在 latent 空间的。输入的条件图自然也需要转换到 latent 空间,ControlNet 是使用了四层卷积层完成了这个转换,将 512x512 的真实图片转换到 64x64 的 latent 空间。

训练

ControlNet 是在预训练好的模型权重上,加入一些参数,然后进行微调。其训练的目标函数与 SD 是完全一致的,但是加入了各种条件图(如 Canny、人体姿势等)作为输入。在训练时 ControlNet 时,还会有 50% 的概率将文本 prompt 替换为空字符串,从而训练 ControlNet 直接识别条件图语义的能力。

作者在训练 ControlNet 时还观察到一个奇特的现象,即模型并不是逐渐学习到条件控制能力的,而是在某一步,突然就会了。如下图,模型在 6133 步,突然就能精准地按照输入的 Canny 边缘进行生成了。作者称这为 “突然收敛现象” (sudden convergence phenomenon)。

在这里插入图片描述

推理

训练结束之后,推理时就可以按照输入的条件图来控制空间位置,进行生成了。这里作者还交代了几点细节,用于更好地控制生成结果。

CFG-RW:SD 在训练时使用了 Classifier-Free Guidance 的方法,即同时训练模型条件生成和无条件生成的能力,然后在生成时,也同时生成条件结果和无条件结果,并根据指定的 CFG Scale 得到最终的生成结果: ϵ prd = ϵ uc + β cfg ( ϵ c − ϵ uc ) \epsilon_{\text{prd}}=\epsilon_{\text{uc}}+\beta_{\text{cfg}}(\epsilon_{\text{c}}-\epsilon_{\text{uc}}) ϵprd=ϵuc+βcfg(ϵcϵuc) 。ControlNet 中,条件生成的结果既可以加到 ϵ uc \epsilon_{\text{uc}} ϵuc ϵ c \epsilon_{\text{c}} ϵc 中,也可以只添加到 ϵ c \epsilon_{\text{c}} ϵc 中。如果 prompt 为空(有 50% 概率),此时如果同时加到 ϵ uc \epsilon_{\text{uc}} ϵuc ϵ c \epsilon_{\text{c}} ϵc 中,则相当于没有 CFG 了,而如果只加到 ϵ c \epsilon_{\text{c}} ϵc 中,那么 CFG 引导又太强。这里作者的策略是使用分辨率加权(CFG-RW),即 w i = 64 / h i w_i=64/h_i wi=64/hi 其中 h i h_i hi 是第 i 层的空间分辨率,如 h 1 = 8 , h 2 = 16 , … h_1=8,h_2=16,\dots h1=8,h2=16,

从下图的结果来看,嘉乐 CFG-RW 的策略后,生成的结果会好很多。

在这里插入图片描述

组合多种 ControlNet:我们可以对同一次生成组合使用多种 ControlNet,并不需要任何加权或插值。如下面的例子就组合了人体姿势和手部的深度图作为条件。

在这里插入图片描述

实验结果

总结

ControlNet 的影响力不言而喻,我们终于能对生成结果的空间位置有精确的控制,而不需要再一次次的碰运气。ICCV 2023 Best Paper 实至名归。

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

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

相关文章

网络协议 - UDP 协议详解

网络协议 - UDP 协议详解 UDP概述UDP特点UDP的首部格式UDP校验 參考文章 基于TCP和UDP的协议非常广泛,所以也有必要对UDP协议进行详解。 UDP概述 UDP(User Datagram Protocol)即用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种…

在前端开发中,什么是前端数据缓存(caching)?它有哪些应用场景?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

C# WPF上位机开发(属性页面的设计)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在软件开发中,属性或者参数设置是很重要的一个部分。这个时候如果不想通过动态添加控件的方法来处理的话,那么可以通过tab控…

解决Chrome同一账号在不同设备无法自动同步书签的问题

文章目录 一、问题与原因?2. 解决办法 一、问题与原因? 1.问题 使用谷歌Chrome浏览器比较头疼的问题就是:使用同一个Google账号,办公电脑与家用电脑的数据无法同步。比如:办公电脑中的书签、浏览记录等数据&#xff0…

Renyi散度:Renyi divergence

有关Renyi散度的基本介绍挺多博客已经写了。本文章主要介绍最基础的概念,以及近些年论文中为啥老喜欢引用这个概念。 一.基础概念 Renyi散度主要是描述两个分布之间的关系。对一个离散的概率分布X,其定义域记作,其实就是概率不为零的点的集…

Idea执行bat使用maven打包springboot项目成docker镜像并push到Harbor

如果执行以下命令失败,先把mvn的-q参数去掉,让错误输出到控制台。 《idea配置优化、Maven配置镜像、并行构建加速打包、解决maven打包时偶尔几个文件没权限的问题》下面的使用company-repo私有仓库和阿里云镜像仓库同时使用的配置参考。 bat echo off …

seleniumwire获取页面接口数据

selenium并不支持获取响应的数据,我们可以使用selenium-wire库,selenium-wire扩展了 Selenium 的 Python 绑定,可以访问浏览器发出的底层请求。 编写的代码与 Selenium 的方式相同。 1. 先安装seleniumwire的插件 pip install selenium-wir…

RS®SMM100A 矢量信号发生器具备毫米波测试功能的中档矢量信号发生器

R&SSMM100A 矢量信号发生器 具备毫米波测试功能的中档矢量信号发生器 R&SSMM100A 矢量信号发生器在 100 kHz 至 44 GHz 的频率范围内提供优越的射频特性。这款仪器覆盖现有无线标准所使用的 6 GHz 以下的频段、新定义的最高 7.125 GHz 的 5G NR FR1 和 Wi-Fi 6E 频段以…

基于轻量级yolov5-seg全系列【n/s/m/l/x】参数模型开发构建工业场景下不同参数量级的滚珠丝杠传动表面缺陷分割检测系统

工业场景下的滚珠丝杠传动表面缺陷分割检测系统在我们前面的博文中已经有了相关的开发实践了,感兴趣的话可以自行阅读即可: 《助力工业生产质检,基于轻量级yolov5-seg开发构建工业场景下滚珠丝杠传动表面缺陷分割检测系统》 前文主要是以se…

C#Winform+DevExpress打开相机拍照功能实例

1,先展示一下界面,点击打开相机会打开另一个界面 如下所示; 2,点击上图拍照 按钮 会把图片显示在第一个界面上 3, Dev还可以打开指定的相机,比如只打开平板电脑的后置摄像头 以Microsoft 为例 点击打开…

HarmonyOS使用HTTP访问网络

HTTP数据请求 1 概述 日常生活中我们使用应用程序看新闻、发送消息等,都需要连接到互联网,从服务端获取数据。例如,新闻应用可以从新闻服务器中获取最新的热点新闻,从而给用户打造更加丰富、更加实用的体验。 那么要实现这样一种…

【Linux】Redis 数据库安装教程(Ubuntu 22.04)

前言 Redis是一个开源的内存数据库,它可以用作键值存储、缓存和消息代理。它支持各种数据结构,包括字符串、哈希、列表、集合、有序集合等。Redis通常被用于构建高性能、可扩展的应用程序,特别是那些需要快速访问数据和实时数据处理的应用场…

案例064:基于微信小程序的考研论坛设计与实现

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

VSCode如何编辑Markdown文件

VSCode如何编辑Markdown文件 一、安装插件二、常用命令 一、安装插件 需要在VSCode安装一个插件Markdown Theme Kit 二、常用命令 1、CtrlShiftV 预览模式

实战体验 Amazon SageMaker 机器学习

(声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区、知乎、自媒体平台、第三方开发者媒体等亚马逊云科技官方渠道) 文章目录 Amazon SageMaker 原理生成示例数据训练模型部署模型 实…

在ViewPager下面加圆点指示(使用selector方式)

前面讲了如何使用ViewPager来做多个可滑动的页面。今天在页面的下面加上一排小圆点,用于指示当前在第几页。效果如下(请忽略颜色和图案): 一、产生一个小圆点的视图 1、在drawable下产生一个选中和不选中颜色不同的小圆点形状&am…

Vue用<br>自定义换行,用v-html渲染,hover的时候title也需要使用自定义换行或者显示一行用省略号展示,hover展示全部

哈喽 大家好啊,最近遇到一个需求&#xff1a; 需求一&#xff1a;用<br>自定义换行&#xff0c;hover的时候title也需要使用自定义换行 然后我便想到了用<br>自定义换行&#xff0c;然后用v-html渲染&#xff0c;则就正常显示了 但是title只能用文本&#xff0c…

IDEA添加Apifox插件后,返回参数不详细解决办法

Apifox官方文档地址(文档中返回的是特殊情况&#xff0c;跟我现在项目的返回不一样&#xff0c;因此需要更改配置) 点击跳转到官方API地址 实现步骤分为两步&#xff1a;第一步&#xff1a;添加配置&#xff0c;第二步使用注解。 1.添加配置 打开Idea设置&#xff0c;添加配置…

GZ015 机器人系统集成应用技术样题2-学生赛

2023年全国职业院校技能大赛 高职组“机器人系统集成应用技术”赛项 竞赛任务书&#xff08;学生赛&#xff09; 样题2 选手须知&#xff1a; 本任务书共 25页&#xff0c;如出现任务书缺页、字迹不清等问题&#xff0c;请及时向裁判示意&#xff0c;并进行任务书的更换。参赛队…

《Linux C编程实战》笔记:文件属性操作函数

获取文件属性 stat函数 在shell下直接使用ls就可以获得文件属性&#xff0c;但是在程序里应该怎么获得呢&#xff1f; #include<sys/types.h> #include <sys/stat.h> #include <unistd.h> int stat(const char *file_name,struct stat *buf); int fstat(i…