ControlNet的网络结构可划分为两个部分,分别是locked copy和trainable copy。ControlNet主要在Stable Diffusion的U-Net中起作用,其中locked copy对应U-Net的encoder部分,trainable copy对应U-Net的decoder部分:
ControlNet模型的最小单元结构(如下图)中有两个zero convolution模块 ,它们是1×1卷积,并且权重和偏置都初始化为零。
推导:
使用ControlNet模块就是假设将训练的所有参数锁定在
θ
\theta
θ中,然后将其克隆为可训练的副本
θ
c
\theta_c
θc?。复制的
θ
c
\theta_c
θc?使用外部条件向量c进行训练。
Z
=
F
(
c
;
θ
)
Z=F(c;\theta)
Z=F(c;θ)代表了zero convolution模块,
θ
z
1
\theta_{z1}
θz1?和
θ
z
2
\theta_{z2}
θz2?代表ControlNet的参数权重。
由于训练开始前zero convolution模块的输出都为0,所以ControlNet未经训练的时候输出为0:
这种情况下对SD模型是没有任何影响的,就能确保SD模型原本的性能完整保存,之后ControlNet训练也只是在原SD模型基础上进行优化。ControlNet模型思想使得训练的模型鲁棒性好,能够避免模型过度拟合,并在针对特定问题时具有良好的泛化性,在小规模甚至个人设备上进行训练成为可能。
ControlNet在训练过程中添加了四层卷积层,将图像空间Condition转化为隐空间Condition。这些卷积层的卷积核为4×4,步长为2,通道分别为16,32,64,128,初始化为高斯权重,并与整个ControlNet模型进行联合训练。
参考:
深入浅出完整解析ControlNet核心基础知识
ControlNet原理&使用实操
Stable Diffusion — ControlNet 超详细讲解
【Stable Diffusion】ControlNet基本教程(一)