一:ControlNet模型的概念
ControlNet 是一个控制预训练图像扩散模型(例如 Stable Diffusion)的神经网络。它允许输入调节图像,然后使用该调节图像来操控图像生成。- 原始SD模型的输入:prompt、source image
- ControlNet模型的输入:canny边缘、语义分割图、关键点、涂鸦等
(一)ControlNet控制类型
这里的调节图像类型众多,例如涂鸦、边缘图、姿势关键点、深度图、分割图、法线图等,这些输入都可以作为条件输入来指导生成图像的内容。 下面是一些例子:- 按照原图边缘线稿绘画
- 使用hed边界检测
- 使用图像深度生成
- 使用法线图生成图像
- 使用姿势检测
- 使用人类涂鸦进行生成
- 使用语义分割:将图像分割为约 150 种颜色代表的物体,可单独处理天空、建筑、树木等要素
- 使用m-lsd直线检测算法绘图
- 其他高级应用场景(图片增亮、个性二维码生成等)
(二)ControlNet优点
与传统的 Img2Img 技术不同,ControlNet 引入了一种突破性的途径来管理生成图像中的姿势、纹理和形状等元素, ControlNet的多功能性有助于应对不同的场景。ControlNet的存在不仅提高了生成图像的定制化能力,还保持了生成的快速和高效。通过这种方式,不论有无大规模数据集,都能够训练出反映输入条件的模型,并且生成忠实于这些条件的高质量图像。二:ControlNet模型原理
(一)如何控制Stable Diffusion
下图可以看到ControlNet控制Stable Diffusion的过程,就是将Encoder复制训练,decoder部分进行skip connection(跳跃连接)。“skip connection”指的是在网络中跳过某些层直接将前面的特征传输到后面的层的连接。这种连接通常用于卷积神经网络(CNN)中,特别是在那些很深的网络中,比如残差网络(ResNet)。
1.Encoder部分
ControlNet包含了Encoder的一个可训练的复制版本,这意味着创建了Encoder的副本,并且这个副本的权重是可以在训练中更新的。这样做是为了让ControlNet能够学习怎么根据不同的条件修改或调整这些特征,以便对图像生成过程中的内容进行条件化控制。2.Decoder部分
ControlNet不会去修改Decoder原有的网络结构,而是使用skip connection来将ControlNet学习到的特征与原SD模型的特征结合。通过这种方式,不仅保留了SD原有的生成能力,还引入了外部条件的控制。(二)ControlNet简易架构
ControlNet 通过将主要扩散模型的权重复制到“可训练副本”和“锁定副本”中来实现这一目标。锁定副本保留了从大量图像数据中学习到的网络能力,而可训练副本则在特定于任务的数据集上进行训练以掌握条件控制。 此过程使用称为“零卷积”的特殊卷积层连接可训练和锁定的神经网络段。在这一层中,卷积权重通过学习方法逐渐从零发展到最佳设置。该策略保持了细化的权重,确保在各种数据集规模上都有强大的性能。重要的是,由于零卷积不会给深层特征引入额外的噪声,因此训练速度与微调扩散模型的速度相匹配,这与从头开始训练全新层的漫长过程形成鲜明对比。 ControlNet模型的最小单元结构(如上图)中有两个zero convolution模块 ,它们是1×1卷积,并且权重和偏置都初始化为零。- 在我们开始训练ControlNet之前,所有zero convolution模块的输出都为零,使得ControlNet完完全全就在原有Stable Diffusion底模型的能力上进行微调训练,不会产生大的能力偏差;
- 只有在加入自己的数据训练之后,上图(b)中的trainable copy以及zero convolution中的可学习参数值才会发生变化,使整个网络学习到用户指定的任务。