出品人:Towhee 技术团队
作者:王翔宇
从去年以来 AIGC 的技术不断冲击人们的想象力,针对图片的扩散模型(midjourney 和 stable diffusion)已经可以在给于 prompt 下生成非常吸引人的图像,但是如果希望以别的形式(文本可能不能完全的控制图像内容,比如一个复杂的人物姿态)来去进行输入的话,能不能在现有的大模型(例如 Stable Diffusion)进行一些改造?
这篇文章对这个问题进行了一些讨论并提出了 ControlNet 来进行解决。作者希望能够额外训练一些参数,在保持原有大模型的参数情况下(不发生灾难性遗忘,抛弃已学习的复杂语义知识)。
ControlNet,是一种端到端的神经网络架构,用于控制大型图像扩散模型(例如 Stable Diffusion),以学习任务特定的输入条件。ControlNet 将大型扩散模型的权重分为“可训练副本”和“锁定副本”:锁定副本保留了从数十亿图像中学到的网络能力,而可训练副本则通过对任务特定数据集的训练来学习条件控制。可训练和锁定的神经网络模块通过一种称为“零卷积”的独特卷积层连接,其中卷积权重以一种学习的方式从零逐渐增长到优化的参数。由于保留了生产就绪的权重,训练在不同规模的数据集上具有鲁棒性。由于零卷积不会给深层特征增加新的噪声,与从头开始训练新层相比,训练速度与微调扩散模型的速度相当快。
作者使用不同条件的各种数据集(如 Canny 边缘、Hough 线、用户草图、人体关键点、分割图、形状法线、深度等)训练了多个 ControlNet。
ControlNet(控制网络)通过操纵神经网络块的输入条件来进一步控制整个神经网络的整体行为。在这里,"网络块"是指作为经常使用的单元组合在一起构建神经网络的一组神经层,例如"resnet"块、“conv-bn-relu"块、多头注意力块、Transformer 块等。Θ 表示原始神经网络中的参数,c 为进行控制的输入,作者将 Θ 中的所有参数锁定,并将其复制为一个可训练的副本 Θc。复制的 Θc 使用外部条件向量 c 进行训练。在本文中,作者将原始参数和新参数称为"锁定副本"和"可训练副本”。制作这样的副本而不是直接训练原始权重的动机是为了避免在数据集较小时过拟合,并保留从数十亿张图像中学习到的大型模型的生产就绪质量。
其中 Z 表神经网络块通过一种称为"零卷积"的独特卷积层连接,即 1×1 卷积层,其权重和偏置都初始化为零。通过这种零卷积设计,可以使得 ControlNet 在训练之初完全等价于初始网络,获得一个更好的初始化。接下来,作者根据 Stable Diffusion 设计了一个 ControlNet。
接下来,作者利用现有的一些图像处理方法构建了多种多样的输入,将图像处理为(图像处理结果,原始图像)的图像对,这些方法包括了 Canny Edge,Hough Line,HED Boundary, Human Pose,只要你有任意的图像处理方法,你都可以使用它来构成图像对,训练出你希望的图像生成模型,如下就是一个例子,通过输入姿态来生成高质量的图像,从而可以更加细粒度的控制生成图像的内容。
现在 ControlNet 已经成为了 Stable Diffusion 相当火爆的一个插件,可以利用它生成出更加符合你需要的图片。
[1]https://arxiv.org/pdf/2302.05543.pdf
[2]https://github.com/lllyasviel/ControlNet
- 如果在使用 Milvus 或Zilliz 产品有任何问题,可添加小助手微信 “zilliz-tech” 加入交流群
- 欢迎关注微信公众号“Zilliz”,了解最新资讯。