IP-Adapter: Text Compatible Image Prompt Adapter for Text-to-Image Diffusion Models
写这篇博客的原因主要是为了补上之前那篇ATM作为encoder的那篇论文的画的大饼。然后最近一次组会也挺同学汇报了一篇有关可控图像合成的一篇论文。
其中提到了一个叫做ControlNet的这么一个结构,然后去了解了一下,也是和IP adapter类似的这么一个作用的结构。
相关的结构还有Composer | T2I-adapter | see coder | Uni-ControlNet |
觉得这个方向可能确实对本方向有一定的参考性。所以打算本周就看看这六篇论文,并顺便写相应的博客和大家一起讨论学习
本项目论文地址:本项目github地址
文章目录
一、研究目的
仅使用文本提示生成所需的图像非常棘手,因为这通常涉及复杂的提示工程。俗话说:“一图胜千言”在本文中,我们提出了 IP-Adapter,一种有效且轻量级的适配器,用于实现预训练文本到图像扩散模型的图像提示功能。
二、研究背景
文本提示的局限性:
- 编写好的文本提示来生成所需的内容并不容易,因为往往需要复杂的提示工程
- 文本信息量小,无法表达复杂的场景或概念,这可能会阻碍内容创建
DALL-E 2首次尝试支持图像提示,其扩散模型的条件是图像嵌入而不是文本嵌入,并且需要一个先验模型来实现文本到图像的能力。
Question: DALL-E2的基本原理是什么?
首先虚线上面是一个clip,这个clip是提前训练好的,在dalle2的训练期间不会再去训练clip,是个权重锁死的,在dalle2的训练时,输入也是一对数据,一个文本对及其对应的图像,首先输入一个文本,经过clip的文本编码模块(bert,clip对图像使用vit,对text使用bert进行编码,clip是基本的对比学习,两个模态的编码很重要,模态编码之后直接余弦求相似度了),
再输入一个图像,经过clip的图像编码模块,产生了图像的vector,这个图像vector其实是gt。产生的文本编码输入到第一个prior模型中,这是一个扩散模型,也可以用自回归的transformer,这个扩散模型输出一组图像vector,这时候通过经过clip产生的图像vector进行监督,此处其实是一个监督模型。
后面是一个decoder模块,在以往的dalle中,encoder和decoder是放在dvae中一起训练的,但是此处的deocder是单训的,也是一个扩散模型,其实虚线之下的生成模型,是将一个完整的生成步骤,变成了二阶段显式的图像生成,作者实验这种显式的生成效果更好。
这篇文章称自己为unclip,clip是将输入的文本和图像转成特征,而dalle2是将文本特征转成图像特征再转成图像的过程,其实图像特征到图像是通过一个扩散模型实现的。在deocder时既用了classifier-free guidence也用了clip的guidence,这个guidence指的是在decoder的过程中,输入是t时刻的一个带噪声的图像,最终输出是一个图像,这个带噪声的图像通过unet每一次得到的一个特征图可以用一个图像分类器去做判定,此处一般就用交叉熵函数做一个二分类,但是可以获取图像分类的梯度,利用这个梯度去引导扩散去更好的decoder。
这里的内容参考自论文笔记:DALL-E2,但是这篇文章只是讲了一个大致的过程,里面很多的实现细节也没有讲的很明白。可能得对DALLE这个系列的模型有一个更加全面详细的了解才能弄清楚这里面的原理,但是我觉得这里只要理解虚线上面的text通过clip模型转到image后,再通过encoder后得到的图像对最终图像的生成过程进行了一定的监督和引导作用应该就行。
直接在图像嵌入上微调文本条件扩散模型以实现图像提示功能(如 SD Image Variations2 和 Stable unCLIP3)被证明是有效的
但是也有一些缺点:
- 取消了利用文本生成图像的原始能力
- 微调往往需要大量的计算资源
- 微调后的模型通常不能重复使用,因为图像提示能力不能直接转移到从相同的文本到图像基础模型衍生出来的其他自定义模型上
SD Image Variations2 和 Stable unCLIP3这两个模型的大致流程是什么样的? 如何理解直接在图像嵌入上微调文本条件扩散模型以实现图像提示功能?
用图像编码器取代文本编码器,同时避免微调扩散模型。
虽然这种方法简单有效,但仍存在一些缺陷。
- 它只支持图像提示,用户无法同时使用文本和图像提示来创建图像。
- 仅仅对图像编码器进行微调往往不足以保证图像质量,还可能导致泛化问题。
用图像编码器取代文本编码器,同时避免微调扩散模型, 这种方式也不是很理解,可以举个例子
ControlNet 和 T2I-adapter ,已经证明在现有的文本到图像扩散模型中可以有效地插入一个额外的网络来引导图像生成。大多数研究都集中于带有附加结构控制的图像生成,如用户绘制的草图、深度图、语义分割图等。
此外,通过简单的适配器,如 T2I-adapter 的样式适配器[11]和 Uni-ControlNet 的全局控制器,也可以生成由参考图像提供样式或内容的图像。
为此,可训练网络将从 CLIP 图像编码器中提取的图像特征映射为新特征,然后与文本特征连接。通过替换原始文本特征,合并后的特征被输入扩散模型的 UNet,以指导图像生成。这些适配器可以被视为一种能够使用图像提示的方法,但生成的图像只能部分忠实于提示图像。其结果往往不如微调后的图像提示模型,更不用说从头开始训练的模型了。
我们认为,上述方法的主要问题在于文本到图像扩散模型的交叉注意模块。预训练扩散模型中交叉注意层的键和值投影权重是为适应文本特征而训练的。因此,将图像特征和文本特征合并到交叉注意层,只能实现图像特征与文本特征的对齐,但这有可能会遗漏一些图像特有的信息,最终导致与参考图像之间只有粗粒度的可控生成(如图像风格)。
三、研究内容(主要贡献)
为此,我们提出了一种名为 IP-Adapter 的更有效的图像提示适配器。具体来说,IP-Adapter 采用了一种针对文本特征和图像特征的解耦交叉注意机制。对于扩散模型 UNet 中的每个交叉注意层,我们只针对图像特征添加一个额外的交叉注意层。在训练阶段,只训练新交叉注意层的参数,而原始 UNet 模型保持冻结。如图 1 所示,利用我们提出的 IP 适配器,可以轻松完成各种图像生成任务。
总而言之,我们的贡献如下:
- 我们提出了 IP-Adapter,这是一种轻量级图像提示适配方法,采用了针对现有文本到图像扩散模型的解耦交叉注意策略。定量和定性实验结果表明,在基于图像提示的生成方面,拥有约 2200 万个参数的小型 IP-Adapter 可与完全微调的模型相媲美,甚至更胜一筹。
- 我们的 IP 适配器可重复使用且灵活。在基础扩散模型上训练的 IP-Adapter 可通用于根据同一基础扩散模型微调的其他自定义模型。此外,IP-Adapter 与 ControlNet 等其他可控适配器兼容,可轻松将图像提示与结构控制相结合。
- 由于采用了解耦交叉注意策略,图像提示可与文本提示兼容,从而实现多模态图像生成。
四、技术路线
4.1 Prelimiaries
扩散模型是一类生成模型,它由两个过程组成:一个是扩散过程(也称为前向过程),它使用固定的马尔可夫链 T T T 步将高斯噪声逐渐添加到数据中;另一个是去噪过程,它使用可学习模型从高斯噪声中生成样本。扩散模型也可以以其他输入为条件,例如文本到图像扩散模型中的文本。通常情况下,扩散模型的训练目标(用 ε θ ε_θ εθ表示)被定义为变分约束的简化变体:
L s i m p l e = E x 0 , ϵ ∼ N ( 0 , I ) , c , t ∥ ϵ − ϵ θ ( x t , c , t ) ∥ 2 , L_{\mathrm{simple}}=\mathbb{E}_{\boldsymbol{x}_0,\boldsymbol{\epsilon}\thicksim\mathcal{N}(\mathbf{0},\mathbf{I}),\boldsymbol{c},t}\|\boldsymbol{\epsilon}-\boldsymbol{\epsilon}_\theta{\left(\boldsymbol{x}_t,\boldsymbol{c},t\right)}\|^2, Lsimple=Ex0,ϵ∼N(0,I),c,t∥ϵ−ϵθ(xt,c,t)∥2,
其中, x 0 x_0 x0 代表带有附加条件 c c c 的真实数据, t ∈ [ 0 , T ] t∈ [0, T ] t∈[0,T] 表示扩散过程的时间步长, x t = α t x 0 + σ t ε x_t = α_tx_0 + σ_tε xt=αtx0+σtε 是 t t t 步长处的噪声数据, α t α_t αt、 σ t σ_t σt 是 t t t 的预定函数,决定了扩散过程。一旦训练好模型 ε θ ε_θ εθ,就可以通过迭代方式从随机噪声中生成图像。一般来说,在推理阶段会采用快速采样器,如 DDIM 、PNDM 和 DPM-Solver,以加速生成过程。
如果对这里还有疑惑的话可以看我的另外一篇博客,虽然讲的也不是很清楚(因为对底层的概率分布公式我也还没搞清楚),
但是对上面的公式的了解有一定的帮助。
对于条件扩散模型,分类器引导是一种直接的技术,通过利用单独训练的分类器的梯度来平衡图像保真度和样本多样性。为了消除独立训练分类器的需要,无分类器引导通常被用作一种替代方法。在这种方法中,通过在训练过程中随机丢弃 c c c 来联合训练条件扩散模型和非条件扩散模型。在采样阶段,根据条件模型 ε θ ( x t , c , t ) ε_θ(x_t,c,t) εθ(xt,c,t)和非条件模型 ε θ ( x t , t ) ε_θ(x_t,t) εθ(xt,t)的预测结果计算预测噪声:
ϵ ^ θ ( x t , c , t ) = w ϵ θ ( x t , c , t ) + ( 1 − w ) ϵ θ ( x t , t ) , \hat{\boldsymbol{\epsilon}}_\theta(\boldsymbol{x}_t,\boldsymbol{c},t)=w\boldsymbol{\epsilon}_\theta(\boldsymbol{x}_t,\boldsymbol{c},t)+(1-w)\boldsymbol{\epsilon}_\theta(\boldsymbol{x}_t,t), ϵ^θ(xt,c,t