ControlNet让SD变得可控

    ControlNet是一个用于深度神经网络的控制技术,它可以通过操作神经网络块的输入条件来控制神经网络的行为。在这里,“网络块”是指常用的神经层集合,例如“resnet”块、“conv-bn-relu”块、多头注意力块等。通过克隆神经网络块的参数并应用零卷积连接层来实现ControlNet的目标。

    ControlNet的副本与神经网络块的输入和输出是一致的,这使得在训练初始阶段,ControlNet不会对神经网络产生影响。零卷积的权重和偏置值都被初始化为零,这使得ControlNet在优化过程中不会影响权重和偏置值的梯度。神经网络块的能力和质量得到了保留,同时还能有效地进行优化和定制。

    ControlNet的原理是通过控制神经网络块的输入条件来调整神经网络的行为,并适应不同的任务和数据。每个神经网络块由一组参数来定义,这些参数可以在训练过程中进行优化。ControlNet使用特殊的卷积层来连接神经网络块,以达到快速优化的效果。

8656179125ecb9dac23582ce637e730a.png

ControlNet 应用于任意神经网络块。x; y 是神经网络中的深度特征。"+" 表示特征加法。"c" 是我们要添加到神经网络中的额外条件。"zero convolution" 是一个 1 × 1 卷积层,其权重和偏置都初始化为零

ControlNet结构可以表示为:

yc = F(x; α) + Z(F(x + Z(c;β_z1); β_c); β_z2)

其中yc是该神经网络块的输出结果。它等于F(x, α)的输出结果加上使用β_z2对F(x + Z(c, β_z1), β_c)应用Z的结果。这意味着,在第一次训练步骤中,神经网络块的可训练副本和锁定副本的所有输入和输出都与ControlNet不存在时一致。任何神经网络块的能力、功能和结果质量都得到完美保留,并且任何进一步的优化将变得像微调一样快(与从头开始训练这些层相比)。

在第一次训练步骤中,由于零卷积层的权重和偏置值都初始化为零,我们有:

Z(c; β_z1) = 0
F(x + Z(c; β_z1); β_c) = F(x; β_c) = F(x; α)
Z(F(x + Z(c; β_z1); β_c); β_z2) = Z(F(x; β_c); β_z2) = 0

这些方程表明,在第一次训练步骤中,神经网络块的可训练副本和锁定副本的所有输入和输出都与ControlNet不存在时一致。换句话说,当应用ControlNet到一些神经网络块时,在任何优化之前,它都不会对深度神经特征产生影响。任何神经网络块的能力、功能和结果质量都得到完美保留,并且任何进一步的优化将变得像微调一样快(与从头开始训练这些层相比)。

    ControlNet就像一个迭代的过程,通过重复应用ControlNet操作来优化神经网络块。这样,在每一步中,我们可以保持所有其他神经网络块不变,仅对某些神经网络块进行修改和调整。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值