前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ControlNet构图控制

ControlNet构图控制

作者头像
Dlimeng
发布2024-01-09 14:21:00
1940
发布2024-01-09 14:21:00
举报
文章被收录于专栏:开源心路开源心路

最初的 ControlNet 主要用于线稿上色、图像风格化、可控姿态的人体生成等任务。

如今各路网友脑洞大开,使用 ControlNet 做出了创意二维码、将文字自然地融入照片等趣味效果。

在这里插入图片描述
在这里插入图片描述

ControlNet 的基本结构

加粗样式
加粗样式

ControlNet 并没有改变 SD 模型的 VAE、CLIP 文本编码器和 UNet 结构,而是在这个方案的基础上多加了一些东西。 ControlNet 作为一个即插即用的插件,训练过程应该避免影响到 SD 模型的部分。 固定 SD 权重可以减少一半以上的可学习参数,这么做能节省计算资源。

主要思路:

  • 锁定原始diffusion模型的参数,同时复制可训练的参数副本。这样可以保留原始模型的能力,同时新增可训练的参数用于学习条件控制。
  • 使用“零卷积”层(weights和bias初始化为0)连接原始模型和可训练副本。这可以避免训练初期参数被噪声污染,保护预训练模型。
  • 在diffusion模型的encoder模块添加ControlNet结构。具体来说,对Stable Diffusion的12个编码块和1个中间块应用ControlNet。
  • ControlNet接收条件图像作为输入(比如边缘、人体姿态等),先降采样到与diffusion模型latent space大小一致,然后输入到ControlNet。
  • 训练时随机排除部分文本提示,迫使模型从条件图像中学习语义信息。
  • 推理时,可以组合使用多个ControlNet为同一diffusion模型添加多个条件控制。

训练 ControlNet

第一,根据你要使用的控制方法,在你的数据集上生成这些控制条件,比如提取图像边缘轮廓或者提取人体姿态点。

第二,按照标准的 SD 模型训练流程进行训练,UNet 的输入包括带噪声的潜在表示、时间步 t 的编码、prompt 文本表征和 ControlNet 的控制信号。

标准 SD 训练过程中使用无分类器引导,一般有 10% 的概率会将训练的 prompt 设置为空字符串。而 ControlNet 的训练中,这个概率是 50%!

这是为了让 SD 模型在预测噪声时,有更多信号源自 ControlNet 的控制信号,而不是 prompt 文本表征。说到底,还是为了加强控制。

在训练 ControlNet 时,针对每一种控制条件需要单独完成。这里的控制条件可以是轮廓线(Canny、HED 等),也可以是法线、深度图等。所以,在 Hugging Face 中我们可以找到 20 余种不同的 ControlNet 模型权重。下一讲我们会探讨这些权重的使用方式。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-01-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ControlNet 的基本结构
  • 训练 ControlNet
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档