扩散模型可控生成的方法总结
扩散模型可控生成的方法总结
文生图模型可控生成可以分为结构控制和内容控制。
结构控制以ControlNet和T2I-Adapter为代表,通过用户输入的 canny, sketch, depth map等来控制生成图像的结构,主要通过改变原始unet不同分辨率的中间特征来达到目的。controlnet是将额外网络的得到特征加到unet deocder上,T2I-Adapter是将额外网络得到的特征加到对应的Unet encoder上。
概念控制以 IP-Adapter为代表,通过引入新的输入来控制生成图像的内容。很多文章都验证了 cross attention layers 是控制图像空间布局与条件提示之间对应关系的关键,简言之,生成图像的语义主要通过cross attention来控制。prompt to prompt通过将原始prompt生成的 attention map和修改后的prompt生成的attention map结合到一起来达到图像编辑的功能。一些工作通过各种各样的方式得到新的特征,然后将其与文本特征连接或者是通过替换原始文本特征,将合并后的特征输入到扩散模型的UNet中,以指导图像生成,如photomaker。
接下来我们介绍一下可控生成的代表性工作Contronet,Adapter,后续很多的工作大多基于此做的改进来达到自己期望的结果。
1、Controlnet
1.1 背景
在 controlnet 之前的图像扩散模型,像 stable diffusion,只支持文本来控制图像生成。如果要生成符合期望,有特定细节的图像,需要调整 seed 和 prompt,耗时比较长。借助 ControlNet,可以使用各种输入条件如(outlines, human poses, depth mpas,edge maps等)控制图像生成。
1.2 方法
ControlNet 是一种 “辅助式” 的神经网络模型结构,可以增强具有特定任务条件的预训练图像扩散模型。如 Figure 2 所示,Controlnet 可以应用于任意神经网络结构。Controlnet 主要在 trainable copy 上施加控制条件,然后将施加控制条件之后的结果和原来SD模型的结果相加获得最终的输出结果。
其中,原模型的权重保持不变,在训练中 frozen, 保留了原模型原本的能力;与此同时,使用额外数据对 trainable copy进行微调,学习我们想要添加的条件。ContorlNet 模型中有两个 zero convolution 模块,它们是 $1\times1$卷积,并且权重和偏置都初始化为零。这样一来,在我们开始训练ControlNet之前,所有zero convolution模块的输出都为零,使得ControlNet完完全全就在原模型的能力上进行微调训练,不会产生大的能力偏差,也会降低破坏原模型能力的风险**。
上面是应用在开源文生图模型 Stable Diffusion上 ControlNet 的整体结果,其主要在Stable Diffusion的U-Net中起作用,ControlNet主要将Stable Diffusion U-Net的Encoder部分进行复制训练,在Stable Diffusion U-Net的Decoder模块中通过skip connection加入了zero convolution模块处理后的特征,以实现对最终模型与训练数据的一致性。
具体地,ControlNet包含了12个编码块和1个Stable Diffusion U-Net中间块的“可训练”副本。这12个编码块有4种分辨率,分别是64×64、32×32、16×16和8×8,每种分辨率对应3个编码块 。ControlNet的输出被添加到Stable Diffusion U-Net的12 个残差结构和1个中间块中。同时由于Stable Diffusion U-Net是经典的U-Net结构,因此 ControlNet架构有很强的兼容性与迁移能力,可以用于其他扩散模型中。
ControlNet一开始的输入Condition怎么与SD模型的隐空间特征结合呢?在这里ControlNet主要是训练过程中添加了四层卷积层,将图像空间Condition转化为隐空间Condition。这些卷积层的卷积核为4×4,步长为2,通道分别为16,32,64,128,初始化为高斯权重,并与整个ControlNet模型进行联合训练。
1.3 总结
优点:
- 即插即用:controlnet不会影响SD模型原本的生成能力。
- 可控生成:controlnet在原本文本指导下,增加各种条件控制模型生成。
- 泛化能力强:可以和社区现有不同 finetune SD模型结合。
- 灵活:既适用于小规模数据训练(只连接 mid block),也适用于大规模数据训练(先训练contorlnet,再解锁冻结的sd 权重一起训练)。
缺点:
- 模型比较大(模型文件通常在一点几GB),增加了推理的时间。
- 当模型错误理解输入图像的语义时,模型很难生成正确的内容。
2、T2I-Adapter
T2I-Adapter 和 ControlNet 模型一样,能够作为控制条件控制SD模型生成图片的过程。
与 ControlNet 不同的是,T2I-Adapter通过一个 Adapter 额外模型去输入额外的条件,Adapter由四个特征提取模块和三个下采样模块组成,每个特征提取模块 scale由以及个卷积层和两个residual blocks组成。每个scale产生的特征维度与对应的unet层类似,然后和对应的Unet encoder 中间特征相加。
优点:
- 即插即用:T2I-Adapter算法不会影响SD模型原本的生成能力。
- 简单且小巧:它们可以轻松地与SD模型结合,T2I-Adapter模型大约只有77M的参数和大约300M的存储空间,且几乎不影响原本模型的推理速度。
- 灵活组合:可以轻松与多个ControlNet模型组合使用,以实现多条件控制。
- 泛化能力:在不同的SD模型上具备较好的泛化控制性能。
缺点:
- 生成质量相比ControlNet 略差。
- 预训练的模型相比ControlNet少。
3. IP-Adapter
Stable Diffusion系列模型在正常情况下是只支持文本提示词的输入,而IP-Adapter算法能够在SD模型的图像生成过程中引入图像提示词(Image Prompt),从而能够识别输入图像的风格和内容,然后控制SD模型生成相似风格或者内容的图片,同时也可以搭配其他类型的ControlNet一起使用。
IP-Adapter的关键设计是:解耦的交叉注意机制,它将文本特征和图像特征的交叉注意层分开。在这之前一些工作做法是 CLIP 图像编码器提取的图像特征通过可训练网络映射到新特征,然后与文本特征连接或者是通过替换原始文本特征,将合并后的特征输入到扩散模型的UNet中,以指导图像生成。
优点:
- 即插即用:IP-Adapter不会影响原本模型的能力。
- 简单轻量:总训练参数约22M。
- 灵活组合:可以与controlnet等结构控制的模型结合使用。
- 泛化能力:在不同的SD模型上具备较好的泛化控制性能。
缺点:
- 只能生成内容和风格与参考图像相似的图像。
4. 应用
接下来我们介绍一些应用以上技术,在社区比较火的工作。
4.1 AnyDoor
AnyDoor的任务是 ViT-ALL 即 virtual try-all,zero-shot将任何参考图像放在任意场景图像的指定位置。
模型架构如上,可以看做是 IP-Adapter和ControlNet的结合,这里的通过一个自监督的图像编码器提取图像特征然后替代文本特征输入到Cross attention中。Detail Extractor是一个Controlnet网络结构。训练时候,只冻结U-net encoder,
关键创新点:利用一个自监督的图像表示模型-DINO-V2来提取更加细粒度的图像特征,而不是CLIP
4.2 PhotoMaker
photomaker的任务是identity-preserving image synthesis,即生成ID一致的人物图像。
模型结构如上图所示,通过将image encoder提取到 image embedding 与 text embedding融合再替换text embedding中的对应的token,来达到引入 ID 图像信息。训练的时候,原本Unet是一起训练的,无法做到即插即用。效果看起来跟IP-adapter接近,输入的参考图像的数量越多生成效果越好。
4.3 InstantID
InstantID的任务是 identity-preserving image synthesis,即生成ID一致的人物图像。
模型结构如上图,也可以看作是 IP-Adapter 和 ControlNet的结合。其中,IP-Adapter的输入是通过 Face Encoder 模型来提取脸部特征。ControlNet的输入是面部关键点图,条件输入去除了文本特征,只使用 Face embedding。训练的时候,Unet完全冻结。