当前位置:首页>文章>Stable Diffusion>SD指南>AI 绘画引入 ControlNet,将会带来哪些影响?

AI 绘画引入 ControlNet,将会带来哪些影响?

 

我私以为这篇文章的意义重大,直接统一了各个额外条件的输入,有点像在自然语言里把自然语言理解NLU统一到自然语言生成NLG范式里那种大一统的感觉(即把这些额外条件都当作图片输入来处理,复用UNet里的各个架构添加控制。此外,这篇文章似乎开启了模型高度受控的一个阶段,我认为这是文生图模型朝着更加深度融合生产环节的一个重大迈进。

以下是我对这篇文章的一些个人见解,欢迎讨论,完整版可以看这里

中森:ControlNet如何为扩散模型添加额外模态的引导信息134 赞同 · 0 评论文章AI 绘画引入 ControlNet,将会带来哪些影响?

Adding Conditional Control to Text-to-Image Diffusion Models

目前作者尚未发布完整版的论文(论文仍有部分章节未完成,但放出了核心方法,实验的模态数据和预训练的权重作为DEMO),但根据论文,这篇文章在一个框架下统一了SD模型添加各种模态做受控生成的方法,包括但不限于Edge Map, Sketch, Depth Info, Segmentation Map, Human Pose, Normal Maps 等。

下面笔者将根据其实验方法分析

1. 如何添加可训练参数

其实关于如何在已有的模型基础上添加可训练参数,达到在新任务上的效果迁移,无论是NLP的transformer时代还是CV里的Diffusion时代都有不少工作。其中在NLP方向上,常见的有添加可训练的 soft prompt tokens(aka prefix tuning),adapters, 平行模型等。关于在Diffusion Models上添加新组件的有把Video的3D用2D文生图参数启动但是额外添加一个卷积维度,有需要添加输入端额外维度的依赖在输入端添加新通道,有类似于GLIGEN的在self/cross attention间添加注意力模块的融合方式,当然也有额外添加一个encoder添加模型之类的工作。

但是ControlNet的做法不同,具体来说如下图,对于预训练好的模型(比如作者使用SD1.5-UNet里Encoder和MidLayer的ResNet和Transformer层)里的一层结构, 作者固定了其参数,并将该层的输入额外添加了一个全联接映射后的条件c,输入到一个和该层结构一致的复制网络里,再映射一次后重新添加回原结构里的输出。按照作者的解释来看,这样做的好处有两个:一个是最大程度的保留原模型的生成能力,另一个是新添加的组件将以0值初始化所以在优化的初始阶段该模型的输出与原模型等价。

作者的安排十分有意思。笔者在做相关实验时会联想到学术界已经形成的一些共识来设计实验:比如由去年八月份论文prompt to prompt提出后,文生图里图片布局几何关系很大程度上由cross-attn时文本对不同位置的像素点的激活程度所决定。所以笔者初始时会思考是否可以直接将text embedding添加融合模块与sketch info(或其余模态的信息)交互,微调整个模型使其学会兼顾新的模态信息。笔者也会思考是否直接像GLIGEN的方式直接在attn层附近添加融合模块会取得好的效果。但论文作者没有如此安排。论文作者的思路更加类似于《Plug-and-Play Diffusion Features for Text-Driven Image-to-Image Translation》这篇论文的思路。即对于一张模型生成的图片,其UNet的decoder一定已经包含了其生成的一些空间信息,语义信息等。直接抽取decoder相关的特征,添加到当前的生成能够影响当前生成的布局语义等。这是笔者觉得非常有意思的一点。

AI 绘画引入 ControlNet,将会带来哪些影响?

ControlNet的核心架构区别

2. 如何融合模态信息

上面笔者简单提及了一下像笔者这样的路人研究者会如何朴素地思考添加额外引导信息的一些可能方式,但是笔者尚未提及这些额外的引导信息是如何与现有模块融合的。融合模块该如何设计,引导信息如何添加是这篇论文成败的关键。

作者在这方面所使用的方法也十分特别。如果笔者根据代码及论文总结得无误的话,作者是用统一架构处理所有不同输入来指导生成的。如笔者这样的路人研究者会思考不同的输入信息其本质差异较大,或许需要不同的处理方式。比如sketch VS edge 实际差异很大。对于一栋建筑所提取的canny edge必然是忠实于图像里建筑本身的几何关系,空间位置等。但sketch的抽象属性会出现形状不符合,空间位置不对齐,相对比例不准确等一系列问题。所以笔者甚至考虑针对edge 和sketch要引入不同的训练目标损失,以类似风格迁移评估整体相似程度的方式来处理sketch模态信息的输入。但事实是,论文作者以一个架构一个方法便整合了所有不同模态的输入处理,这是方法论层次上的碾压。如同NLP里有专注做命名实体识别,关系抽取,指代消融,概括段落等任务,但ChatGPT出来以后这些任务全部都被整合到一个模型一个框架里一样。

那作者提出的架构为何可以做到这一点, 笔者抛砖引玉提出几个可能的关键因素:

1:输入数据的量级。作者所针对的每一个模态,都可以通过已有模型的基础上快速获得大量数据(比如canny filter对edge的提取,midas对深度图的提取等)。类似于InstructPix2Pix这篇工作,针对当前任务造出一个百万级别大小的训练数据,可能是微调模型使其学到隐式关系的关键。

2:作者提出的架构和对额外模态的输入形式使得一个通用架构成为可能。在上面介绍结构时,笔者提到作者是针对UNet的前半部分里的每一层做额外信息添加和复制训练的。其中当然就包括了Resnet的卷积层。即无论什么模态的信息,作者的架构都可以把它作为图像通过UNet的encoder对其进行多尺度的信息特征的提取。大量参数(对Encoder+MidLayer的复制)加上大量训练数据加上适配的网络架构可能是其成功的关键。

3: 对信息的添加及添加位置的选定。前面两个原因笔者认为可能是较为直接的关键因素。但第三个原因笔者不确定其重要程度,或许可以留待作者的消融实验看看是否有相关讨论。如果直观上来理解,在UNet的encoder阶段添加模态信息引导使得Decoder生成时考虑到相关添加信息当然符合直觉。但为何作者没有选定(只)在Transformer层这样的模态信息制导生成的关键位置添加模块,而是一视同仁且是在每一层的结尾做信息融合。笔者暂时没有一个很好的回答。

3.如何drop text info来增加对condition info的依赖

这一点是笔者在做语言模型,VAE时观察到的一些现象。举个例子,在这几年的语言大模型训练时,作者通常会训练一系列语言任务来“挑战“大模型,使其能够学到重要的特征。这是个很基础的思想在对比学习在各种神经网络训练里都会出现。对于已经预训练好的stable diffusion模型来说,其本身已经可以通过文本的制导,生成高精度的准确图像并且训练时拟合的损失已经很低了。换句话说,额外的模态信息在功能上是和文本有重合的,如何让模型不对输入的额外模态信息完全忽略导致训练崩塌或许是个作者没有提及但实验时会碰到的情况。笔者在训练sketch guidance时便发现了这个情况。笔者初期采用的方式是对text info进行dropout, 但作者采用的方式更为直接,是以类似Classifier-free-guidance的方式直接对整个text info进行忽略,使得模型不得不从模态信息里提取相关特征以辅助训练。

 

声明:学AI网所有文章,如无特殊说明或标注,均为本站作者原创发布。任何个人或组织,在未征得作者同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若此作者内容侵犯了原著者的合法权益,可联系客服或提交工单进行处理。学AI网内用户所发表的所有内容及言论仅代表其本人,并不反映任何学AI网之意见及观点。

给TA充电
共{{data.count}}人
人已充电
SD指南

Stable Diffusion 完美复制Korean doll likeness!(详细版)

2023-5-18 0:06:38

SD指南

使用 Docker 来快速上手中文 Stable Diffusion 模型:太乙

2023-5-19 13:18:58

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索