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 实至名归。

相关推荐
xiao5kou4chang6kai43 天前
MATLAB机器学习、深度学习--从数据预处理到模型训练
深度学习·机器学习·matlab·数据预处理
renhongxia13 天前
世界模型作为AGI落地底层底座的作用
人工智能·深度学习·生成对抗网络·自然语言处理·知识图谱·agi
计算机科研狗@OUC3 天前
(cvpr26) AIMDepth: Asymmetric Image-Event Mamba for Monocular Depth Estimation
人工智能·深度学习·计算机视觉
β添砖java3 天前
深度学习(22)网络中的网络NiN
人工智能·深度学习
Kobebryant-Manba3 天前
深度学习时候d2l报错和使用问题
人工智能·深度学习
zhangfeng11333 天前
deepspeed zero3 结合 llamafactory 微调 ,save_only_model: true 导致保存时候出错
开发语言·python·深度学习
大模型最新论文速读3 天前
06-16 · LLM 最新论文速览
论文阅读·人工智能·深度学习·机器学习·自然语言处理
宝贝儿好3 天前
【LLM】第二章:HuggingFace入门学习
人工智能·深度学习·神经网络·学习·算法·自然语言处理
神仙别闹3 天前
基于C++ 实现 BP 神经网络
开发语言·c++·神经网络
Black蜡笔小新3 天前
企业私有化AI训练推理一体工作站DLTM深度学习推理工作站全流程技术解析
人工智能·深度学习