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

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

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

相关文章

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

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

TCP服务器的编写(上)

tcp服务器的初始化&#xff0c;第一件事情就是创建套接字 目前来说我们的tcp套接和udp套接是没有任何区别的&#xff01;&#xff01;&#xff01; 那么接下来&#xff0c;如果是udp创建好套接字在进行绑定&#xff0c;那么基本上就完成我们udp服务器的初始化 而我们tcp创建好…

node.js学习(简单聊天室)

在掘金查看该文章 1. TCP服务搭建 1.1 socket 先来粗略了解下socket 套接字&#xff08;socket&#xff09;是一个抽象层&#xff0c;应用程序可以通过它发送或接收数据&#xff0c;可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中&am…

对BIOS进行简单快速的设置更改,就能启用安全引导来安装Windows 11

本文介绍如何在UEFI/BIOS中启用安全引导&#xff0c;以便继续安装Windows 11。 如何启用安全引导 启用安全引导最简单的方法是通过UEFI/BIOS进行。它通常被列为BIOS中的众多选项之一&#xff0c;因此你只需打开它即可启用它。 1、启动&#xff0c;或重新启动你的电脑或笔记本…

华为配置VRRP负载分担示例

组网需求 如图1所示&#xff0c;HostA和HostC通过Switch双归属到SwitchA和SwitchB。为减轻SwitchA上数据流量的承载压力&#xff0c;HostA以SwitchA为默认网关接入Internet&#xff0c;SwitchB作为备份网关&#xff1b;HostC以SwitchB为默认网关接入Internet&#xff0c;Switc…

基于C/C++的libcurl多协议文件传输库dll二次封装开发使用

libcurl 可能是最便携、最强大和最常用的 这个星球上的网络传输库。官方提供的示例&#xff0c;需要在项目中引用到libcurl-imp.lib才能使用。 这里我改造了下工程&#xff0c;将常用的接口导出到了libcurl.dll中方便直接在后续的工程代码中应用&#xff0c;下面可以看到dll常用…

掌握 RPC 接口测试:一篇详尽的接口测试手册

RPC 是什么&#xff1f; 远程过程调用协议&#xff08;RPC&#xff09;是一种技术&#xff0c;它允许在不同的机器上执行函数&#xff0c;就好像这些函数是本地调用一样。简单地说&#xff0c;客户端系统透明地从网络上的远程服务器软件请求服务&#xff0c;而无需理解复杂的网…

jenkins学习19 - pipline 构建项目生成 allure报告并发送邮箱

前言 个人其实一直的不太喜欢用邮箱发送报告&#xff0c;测试报告用邮件通知这都是五六年前的事情了&#xff0c;但有部分小伙伴依然执着于发邮件报告通知。 这里整理了下发邮箱通知的教程。 配置你的邮箱 配置邮箱这一步最繁琐&#xff0c;由于每个人使用的邮箱不一样&…

Axure动态面板的使用

一. 动态面板 Axure动态面板是Axure RP软件中的一个功能模块&#xff0c;用于创建交互式原型和模拟应用程序的动态效果。它可以模拟用户在应用程序中的操作流程&#xff0c;并展示不同状态之间的变化&#xff0c;提供更真实的用户体验。通过创建不同的状态和添加交互效果&…

一种用于心音分类的轻量级1D-CNN+DWT网络

这是由National Institute of Technology Rourkela, Central University of Rajasthan发布在2022 ICETCI的论文&#xff0c;利用离散小波变换(DWT)得到的多分辨率域特征对1D-CNN模型进行心音分类训练。 预处理& DWT 由于FHS和各种病理声的频率范围在500hz以下[5]&#xff…

【Android】使用 Glide 给 ImageView 加载图像的简单案例

前言 Android Glide是一个用于在Android应用中加载和显示图片的流行开源库。它提供了简单易用的API&#xff0c;可以帮助开发者高效地加载远程图片、本地图片以及GIF动画&#xff0c;并提供了缓存、内存管理等功能&#xff0c;使得图片加载在移动应用中更加流畅和高效。Glide还…

云开发微信小程序实战

随着移动互联网的快速发展&#xff0c;微信小程序作为一种轻量级的应用程序&#xff0c;逐渐成为了企业开展业务和提升用户体验的重要工具。而云开发则为企业提供了高效、安全、可靠的后台服务&#xff0c;使得小程序的开发和维护更加便捷。本文将详细介绍如何使用微信小程序与…