Motivation
- 文生图模型对于图像空间组成的控制有限;仅通过文本提示难以精确表达复杂的布局、子式、形状和形式
- 以端到端(e.g. 深度图到图像,姿势到图像等)的方式学习大型文生图扩散模型的条件控制具有挑战性(训练数据不足、训练过度拟合或灾难性遗忘)
Approach
通过锁定模型参数并制作其编码层的可训练副本来保持模型的质量与功能
可训练副本和原始锁定模型通过零卷积层连接,权重初始化为零,以便它们在训练过程中逐渐增长。一次确保在训练开始时不会将有害噪声添加到 large diffusion model 的深层特征中,并保护可训练副本中的大规模预训练主干免受这种噪声的破坏。
零卷积 (zero convolution):权重和偏置都是用0初始化的1 x 1卷积。
Condition:Canny edges, Hough lines, user scribbles, human key points, segmentation maps, shape normals, depths, and cartoon line drawings
FAQ(参考 Github 官方回答)
问:如果卷积层的权重为零,梯度也为零,网络将不会学到任何东西。为什么『零卷积』有效?
答:这是错误的。让我们考虑一个非常简单的
y = w x + b y=wx+b y=wx+b
我们有
∂ y / ∂ w = x , ∂ y / ∂ x = w , ∂ y / ∂ b = 1 \partial y/\partial w=x, \partial y/\partial x=w, \partial y/\partial b=1 ∂y/∂w=x,∂y/∂x=w,∂y/∂b=1
如果 w = 0 w=0 w=0 且 x ≠ 0 x \neq 0 x=0,那么
∂ y / ∂ w ≠ 0 , ∂ y / ∂ x = 0 , ∂ y / ∂ b ≠ 0 \partial y/\partial w \neq 0, \partial y/\partial x=0, \partial y/\partial b\neq 0 ∂y/∂w=0,∂y/∂x=0,∂y/∂b=0
这意味着只要 x ≠ 0 x \neq 0 x=0,一次梯度下降迭代就会使 w w w 非零。然后
∂ y / ∂ x ≠ 0 \partial y/\partial x\neq 0 ∂y/∂x=0
使得零卷积将逐渐成为具有非零权重的公共卷积层。
Method
ControlNet
锁定原始网络参数
Θ
\Theta
Θ,并同时克隆到具有参数
Θ
c
\Theta_c
Θc 的可训练副本。条件向量
c
c
c 通过零卷积层与
x
x
x 相加,经可训练副本网络后,再通过零卷积层与原始网络的输出相加,得到
y
c
y_c
yc
y
c
=
F
(
x
;
Θ
)
+
Z
(
F
(
x
+
Z
(
c
;
Θ
z
1
)
;
Θ
c
)
;
Θ
z
2
)
y
c
=
y
y_c=\mathcal{F}(x;\Theta)+\mathcal{Z}(\mathcal{F}(x+\mathcal{Z}(c;\Theta_{z1});\Theta_c);\Theta_{z2})\\ y_c=y
yc=F(x;Θ)+Z(F(x+Z(c;Θz1);Θc);Θz2)yc=y
因此在训练开始时,有害噪声不会影响到可训练副本中神经网络层的隐藏状态。
由于 Z ( c ; Θ z 1 ) = 0 \mathcal{Z}(c;\Theta_{z1})=0 Z(c;Θz1)=0,可训练副本还接收输入图像 x x x,因此它保留了原先预训练大模型的能力,并允许进一步进行学习。
使用 ControlNet 创建 12 个 SD Encoder Block 和 1 个 SD Middle Block,输出被接入到 12 个 SD Decoder Block 和 1 个 SD Middle Block。
由于 SD 是在浅空间中进行扩散,因此 ControlNet 使用具有
4
×
4
4\times4
4×4 核和
2
×
2
2\times2
2×2 步长的四个卷积层组成的微小网络
E
\mathcal{E}
E 将输入为
512
×
512
512\times512
512×512 的条件图像(边缘、姿势、深度等)转换为
64
×
64
64\times64
64×64 的浅空间图像。
c
f
=
E
(
c
i
)
c_f=\mathcal{E}(c_i)
cf=E(ci)
Training
L = E z 0 , t , c t , c f , ϵ ∼ N ( 0 , 1 ) [ ∥ ϵ − ϵ θ ( z t , t , c t , c f ) ∥ 2 2 ] \mathcal{L}=\mathbb{E}_{z_0,t,c_t,c_f,\epsilon \sim \mathcal{N}(0,1)}[\left \| \epsilon-\epsilon_\theta(z_t,t,c_t,c_f) \right \|_2^2 ] L=Ez0,t,ct,cf,ϵ∼N(0,1)[∥ϵ−ϵθ(zt,t,ct,cf)∥22]
在训练过程中,随即将 50% 的文本提示词替换为空字符串。这样可以提高 ControlNet 识别输入条件图像语义的能力,而非通过提示词识别语义。
作者观察到,模型不会逐渐学习到控制条件,而是突然成功遵循输入条件图片。他们将此称为『突然收敛现象』(「sudden convergence phenomenon」)
Inference
Classifier-free guidance resolution weighting
CFG: ϵ p r d = ϵ u c + β c f g ( ϵ c − ϵ u c ) \epsilon_{prd}=\epsilon_{uc}+\beta_{cfg}(\epsilon_c-\epsilon_{uc}) ϵprd=ϵuc+βcfg(ϵc−ϵuc)
首先将条件图像添加到 ϵ c \epsilon_c ϵc,然后根据每个块的分辨率 w i = 64 / h i w_i=64/h_i wi=64/hi,将权重 w i wi wi 乘以 SD 和 ControlNet 之间的每个连接,其中 h i h_i hi 是第 i i i 个块的大小,例如, h 1 = 8 , h 2 = 16 , … , h 13 = 64 h_1=8,h_2=16,…,h_{13}=64 h1=8,h2=16,…,h13=64。
Composing multiple ControlNet
直接将多个条件图像的 ControlNet 输出加入到 SD 模型中,不需要进行额外的加权或线性内插就能得到很好的效果
Result
Reference
Adding Conditional Control to Text-to-Image Diffusion Models