ESC
输入关键词搜索文章
目录

ControlNet

参考链接

深入浅出完整解析ControlNet核心基础知识 - 知乎

面临问题

生成图片既需要多样性,又需要准确性。

模型架构

把原本的结构参数锁定,但是创建了一个副本,在接受 condition 的情况下进行训练。

有两个多加入的零卷积层。

最后将有条件与无条件的输出简单相加。

Z 表示零卷积。

零卷积

用于保证初始时刻,新加入的分支不会对结果造成影响。

完整结构

可以看到,在编码下采样的过程中,原本的模型与复制的模型并行进行。到了解码上采样的过程中,编码的输出通过 Skip Connection被加入了进来。

并且每一个 control 信息都通过了零卷积。

Condition 转换成特征图

input_hint_block = TimestepEmbedSequential(
            conv_nd(dims, hint_channels, 16, 3, padding=1),
            nn.SiLU(),
            conv_nd(dims, 16, 16, 3, padding=1),
            nn.SiLU(),
            conv_nd(dims, 16, 32, 3, padding=1, stride=2),
            nn.SiLU(),
            conv_nd(dims, 32, 32, 3, padding=1),
            nn.SiLU(),
            conv_nd(dims, 32, 96, 3, padding=1, stride=2),
            nn.SiLU(),
            conv_nd(dims, 96, 96, 3, padding=1),
            nn.SiLU(),
            conv_nd(dims, 96, 256, 3, padding=1, stride=2),
            nn.SiLU(),
            zero_module(conv_nd(dims, 256, model_channels, 3, padding=1))
)

之所以不用 VAE ,而用一个简单的卷积块来进行处理,是因为 condition 图一般比较简单(如深度图、骨骼图等)。

训练

Dropout

为了让模型更多地从额外的控制信息中进行学习,模型对文本控制信息采用了较大的 dropout 率(0.5)。

优势

可迁移性

灵活性

Only Mid

算力资源不够充足时,可以只训练一部分的参数

比如上图,就是只训练 middle-blocks

整体训练

算力资源足够充足时,则可以把解码器加进来一起进行训练。

ControlNet 实例

30分钟零基础掌握ControlNet!绝对是你看过最好懂的控制网原理分析 | 基本操作、插件安装与5大模型应用 · Stable Diffusion教程_哔哩哔哩_bilibili

可以使用预处理器从图片里面得到这些 ControlNet 所需要的条件信息。

OpenPose ControlNet

OpenPose-Face

可以控制人物的表情

OpenPose-Full

又有脸,又有手

Depth ControlNet

Canny ControlNet

SoftEdge ControlNet

HED

Scribble ControlNet

MultiControlNet