
前置知识基石
LDM
IP-Adapter 是构建在预训练的文本到图像扩散模型基础之上的,论文中使用的是 Stable Diffusion v1.5。相较于 DDPM,SD 的核心改进在于引入了潜在空间:
- 它首先使用一个预训练好的 Autoencoder(如 VQ-VAE)将大尺寸图像压缩成低维的特征矩阵。
- 扩散过程全部在这个低维的 latent 空间中进行,这就大大降低了计算复杂度。
- 最后,再用 Autoencoder 的 Decoder 将去噪后的 Latent Code 还原成像素图像。 IP-Adapter 并没有改变这个宏观的扩散过程,它冻结了 SD 原本的 U-Net,只在里边增加了一些新结构。
交叉注意力
在 SD 中,我们需要根据文本生成图像,这就需要用到 Cross-Attention 层 把文本信息喂给 U-Net。 在 SD 的 U-Net 中,图像的 Latent 隐变量提取出 Query,而文本特征提取出 Key 和 Value。 注意力计算公式为: 而这正是这篇论文动刀子的地方。以前的文本生成图像是用文本特征做 和 ;现在我们要用图像做 Prompt,把图像特征变成 和 融合进去。
CLIP 模型
论文中反复提到 CLIP Text Encoder 和 CLIP Image Encoder。 CLIP 是一个通过对比学习训练出来的多模态模型,它包含一个文本编码器和一个图像编码器。 它的神奇之处在于:它把一张图片和这张图片的描述文字,映射到了同一个特征空间里。 本篇论文使用冻结的预训练 CLIP 图像编码器来提取参考图像的特征。因为 CLIP 提取出的图像特征天然和文本特征在同一个维度空间,这就为替换或融合文本特征提供了基础。
CFG
在条件扩散模型中,为了让生成的图像更强烈地贴合我们的条件(比如给定的文本),通常会使用无分类器引导 。
- 训练时: 有一定的概率(比如 10%)把条件(文本或图像)扔掉(置空),让模型同时学习“有条件生成” 和“无条件生成” 。
- 推理时: 通过一个权重 (Guidance Scale)来放大条件的影响力: 本篇论文在训练 IP-Adapter 时同样使用了随机丢弃图像条件的方法,以支持推理时的 CFG。
研究背景与动机
当前文生图模型的痛点
目前像 Stable Diffusion 这样强大的扩散模型,主要是用文本来生成图像的。但文本有很明显的局限性:
- 难以精准描述:写出能生成理想内容的优质文本 prompt 并不容易,往往需要复杂的提示词工程
- 信息量瓶颈:文本在表达复杂场景或抽象概念时显得不够丰富,这成了内容创作的阻碍。 俗话说“一图胜千言” 。比起绞尽脑汁去描述一个人物的五官、打光、画风,直接扔给模型一张参考图显然是最直观、最自然的选择。
Image Prompt
Image Prompt(图像提示)指的是提供“全局语义、内容和风格”的参考图像。 它的作用类似于文本提示词,就像你说“画一只水彩风格的小狗”,Image Prompt 则是直接丢给模型一张水彩小狗的图片,告诉模型:“我要这种画风、这种氛围、这种主体内容”。 论文中明确指出,Image Prompt 使用的是预训练 CLIP 图像编码器提取的全局图像嵌入(global image embedding),这种特征包含了图像丰富的风格和内容信息,并且天然与文本描述对齐。
这里的 Image Prompt 与 ContorlNeXt 里的空间控制信号 不同。 边缘图(Canny)、深度图(Depth)或者骨骼关键点等,属于结构/空间控制。它们的作用是“像素级”对齐的,也就是严格规定了生成的图像在这个位置必须有这个轮廓或结构。 而在 IP-Adapter 以及类似的论文中,Image Prompt(图像提示)指的是提供“全局语义、内容和风格”的参考图像。
提取图像特征时,什么时候用卷积,什么时候用 CLIP? 决定用 CLIP 还是用卷积,取决于是想控制全局语义和风格,还是想控制局部空间和结构。
- 用卷积块: 当你输入的是边缘图、深度图、人体骨架或语义分割图时。需要模型生成的图像在特定的 坐标上,严格遵循你给定的轮廓或姿势。 卷积神经网络的核心优势是保留空间分辨率。一张输入图经过几层卷积后,仍然是一个带有高度和宽度的特征图。ControlNeXt 会把这些空间特征直接通过加法 注入到 UNet 对应的残差块中,实现精准的空间对齐。
- 用 CLIP: 当你输入的是一张普通的参考图,想告诉模型“给我生成一只长这样的狗”或者“使用梵高的星空画风”时 。你不在乎狗在画面的左边还是右边,你只在乎它的“长相”和“氛围”。 CLIP 是一个多模态模型,它在训练时就已经把“狗的图片”和“狗的文本描述”映射到了同一个高维特征空间里 。既然扩散模型的 Cross-Attention 是为了接收文本特征设计的 ,那使用和文本同构的 CLIP 图像特征自然是最顺理成章的。 IP-Adapter 默认使用的是 CLIP 提取出的全局图像嵌入个过程会把整张图片压缩成一个一维的特征向量,这就故意丢弃了具体的空间位置信息,只保留了最纯粹的语义和风格
前人工作的局限性
为了让纯文本扩散模型支持图像提示,在 IP-Adapter 出现之前,具体做法有两种,且都有致命缺陷。
- 方式一:直接替换并全局微调(如 SD Image Variations) 直接用 CLIP 提取出的图像特征替换掉原来的文本特征,然后把整个扩散模型重新训练(微调)一遍。这确实是做交叉注意力,但代价是算力成本极高,而且一旦微调完,这个模型就“丧失”了原本听懂文本的能力,再也无法兼容常规的文本提示词了。
- 方式二:特征拼接后共用注意力层(如早期的简单适配器) 如果不微调原模型,前人(比如 T2I-adapter 的 style adapter 或是 Uni-ControlNet 的全局控制器)的做法是:把 CLIP 提取出的图像特征经过一个小网络映射后,直接与文本特征拼接在一起构成一个更长的特征向量。然后把这个拼合的特征喂给原扩散模型 UNet 里的交叉注意力层。 这篇论文一针见血地指出了拼接方式的缺陷:原来扩散模型里的交叉注意力层,它的投影权重矩阵(比如 Key 和 Value 的权重矩阵)是专门为了适应文本特征而训练出来的。如果强行把图像特征塞进这个为文本量身定制的注意力层里,图像特征就不得不去向文本特征“妥协对齐”,这就导致图像特有的、细粒度的信息在计算过程中丢失了,最终只能实现非常粗糙的风格控制。
核心架构设计
整体设计原则
- 冻结基座,即插即用:在训练阶段,预训练的文本到图像扩散模型(U-Net)的参数是完全冻结的。
- 只训练新增模块:只有新添加的模块(投影网络和解耦交叉注意力层中的参数)会被训练。这就保证了模型原有的文本生成能力丝毫不受破坏。
图像特征处理
- 提取全局特征:IP-Adapter 使用了一个预训练且冻结的 CLIP 图像编码器来从图像提示中提取特征 。具体来说,它使用的是 CLIP 的全局图像嵌入,因为这个嵌入很好地对齐了图像的字幕,能够代表图像丰富的风格和内容 。
- 特征维度对齐:提取出来的特征不能直接用,作者引入了一个小型的可训练投影网络(由一个线性层和层归一化 Layer Normalization 组成) 。这个网络的作用是将全局图像嵌入投影成一个长度为 (本研究中 )的特征序列,并且让它的维度与预训练扩散模型中的文本特征维度保持一致。
因为原始的 Cross-Attention 机制是为处理一系列文本 Token 设计的。将单一的全局图像特征投影成 4 个 Token 的序列,是为了模拟文本输入的序列格式,使其能顺利进行注意力矩阵计算。
解耦交叉注意力机制
原版 SD 的交叉注意力
在原版 SD 冻结的 UNet 中,图像的潜在特征作为 Query,我们称之为 。输入的文本特征作为条件,我们称之为 。 原版交叉注意力的输出 公式如下:
- (从图像空间特征提取 Query)
- (从文本特征提取 Key)
- (从文本特征提取 Value) 这里面的 、、 都是 SD 模型在海量图文对上预训练好的权重矩阵。它们已经记住了如何处理文本特征。如果像以前的方法那样,把图像特征直接拼接到 里面扔进去,这些权重矩阵就会“水土不服” 。
IP-Adapter 的解耦设计
为了不干扰原来处理文本的 和 ,IP-Adapter 决定给图像特征 单独开辟一个通道 。 作者在 UNet 的每一个交叉注意力层里,新增了一个只负责处理图像特征的交叉注意力层 。这个新层的输出 公式如下:
这里的投影矩阵变了:
- (从图像特征提取专门的 Key)
- (从图像特征提取专门的 Value) 值得注意的是,在计算 时,使用的 和文本注意力层使用的 都是 。 这意味着:UNet 当前正在生成的图像空间特征(Query),同时向“文本”和“参考图”发出了同样的询问:“我现在在这个像素位置该画什么?” 文本给出了它的回答,参考图也给出了它的回答。
最终的特征融合
既然分成了两路算,最后怎么合在一起喂给 UNet 的下一层呢? 极其简单粗暴——直接相加。
这就是这篇论文最核心的数学公式。 在这个过程中,由于原始的 UNet 模型是冻结的,所以上面的公式里只有 和 这两个矩阵是可训练的。为了加快模型收敛速度,也为了在训练初期让图像提示分支的输出尽可能贴近原本的文本分支,从而保证训练过程的稳定性,这两个新矩阵在初始化时,直接使用了原来文本矩阵 和 的权重。
核心优势
因为原有的模型基座完全没有被改变,这种即插即用的轻量级设计带来了极高的灵活性:
- 参数量极小:因为原版 UNet 是被冻结的,所以在整个庞大的扩散模型中,需要训练的仅仅只是每一层新增的那两个小矩阵: 和 !这外加一个极小的图像特征投影网络,总共才引入了约 22M 的可训练参数 。
- 模型通用性:在基础扩散模型上训练好的 IP-Adapter,可以直接拿去用在从同一个基础模型微调出来的其他自定义模型上(比如动漫风、真实风模型) 。
- 生态兼容性:它完美兼容 ControlNet,可以同时用边缘图控制动作,再用 IP-Adapter 控制长相和画风 。
- 多模态融合:因为文本和图像的注意力层是解耦的,可以同时输入文本 Prompt 和 Image Prompt,实现真正的多模态图像生成 。
训练策略与推理控制
我们刚才推导了 ,但这带来了一个实际应用中的问题:如果既给了文本提示,又给了图像提示,模型最后生成的图,到底该多听文本的,还是多听参考图的?
推理时的权重调节
为了实现灵活的控制,作者在推理阶段对我们刚才推导的那个加法公式做了一个极其微小但至关重要的改动。 作者引入了一个权重因子 (论文公式 8):
- 如果 ,后面那一项就没了,模型退化成了完全只听文本的原版 Stable Diffusion。
- 如果 ,这就是我们之前推导的标准 IP-Adapter,文本和图像的权重是平起平坐的。
- 如果把文本置空(空字符串),且 ,模型就完全变成了“只看图说话”的生成器。
- 在实际做多模态生成时,我们可以通过调高或调低 ,来寻找画风(图像)和场景描述(文本)之间的完美平衡点。
训练时的随机丢弃
为了让模型在推理时能够支持无分类器引导 ,并且能自由地应对“只有文本”、“只有图像”或“既有文本又有图像”的各种情况,作者在训练时设计了非常巧妙的随机丢弃策略:
- 像往常一样,以 0.05(5%)的概率把文本条件丢弃(置空)。
- 同样,以 0.05 的概率把图像条件丢弃(把 CLIP 图像特征全置为 0)。
- 再以 0.05 的概率把文本和图像同时丢弃。 通过这种“强迫”模型在部分信息缺失的情况下还要努力生成图像的训练方式,模型就学会了如何在推理时根据权重 和 来放大这些条件信号。
实验设计与结果
训练配置
训练数据
作者使用了两个非常著名的开源大规模图文对数据集:LAION-2B 和 COYO-700M,总共挑了大约 1000万对图文数据来训练。
- LAION-2B:它是 LAION-5B 数据集的一个英文子集,包含了约 20 亿(2 Billion)个通过爬取网页并经过清洗过滤的“图像-文本”对。它是绝大多数开源文生图模型(包括 Stable Diffusion)进行预训练的基石。
- COYO-700M:由 Kakao Brain 开源,包含了 7 亿(700 Million)个高质量的图文对。它同样来源于网页爬取,但采用了一套独立的清洗规则,数据质量非常高。
模型基座与特征提取
基于 Stable Diffusion v1.5 。使用了 OpenCLIP ViT-H/14 作为提取图像特征的编码器。
训练代价
作者在 SD 的 16 个交叉注意力层中都加了新的图像交叉注意力层。整个 IP-Adapter 只有约 22M 的可训练参数。他们用了 8 张 V100 显卡跑了 100 万步就训完了。
评估指标
在文本到图像领域,很难用一个绝对客观的数字来衡量一幅画的美丑,但我们需要衡量它“有多听话”。作者选用了 COCO2017 验证集(包含 5000 张带文字描述的图片)来进行定量评估。他们主要使用了两个极其核心的指标:CLIP-I, CLIP-T。
COCO 2017 验证集
MS COCO (Microsoft Common Objects in Context) 是计算机视觉领域最权威的基准测试集之一。它主要包含人们日常生活中复杂的场景,每张图片里通常有多个物体。
- 为什么用它:COCO 的特点是每张图像都配有高质量的人工标注文本描述(Captions)。这使得它成为测试“图文对齐”和“语义理解”能力的完美基准。
- 论文中的用法:作者使用了 COCO 2017 的验证集,里面包含 5000 张图像及其对应的描述文本。为了进行公平的定量比较,针对这 5000 个样本,作者以它们为图像 prompt,为每个样本生成了 4 张图片,总共得到了 20,000 张生成的图像用于后续的指标计算。
CLIP-I
衡量生成的图像与作为 Prompt 的参考图像之间的相似度。
- 计算逻辑:将生成的图片 和参考图片 分别输入 CLIP 的图像编码器 ,提取出两个全局特征向量。
- 核心公式: 得分越接近 1,说明生成的图和参考图在画风、内容上越相似。
CLIP-T
衡量生成的图像与“参考图像原本对应的文本描述”之间的匹配程度。
- 计算逻辑:将生成的图片 输入 CLIP 图像编码器得到图像特征,将原始真实的文本标注(Caption)输入 CLIP 文本编码器得到文本特征。
- 核心公式:计算这二者的余弦相似度(学术界计算 CLIPScore 时通常还会乘以一个常数权重 作为缩放): 这个指标能证明模型不仅抄了原图的画风,而且真的理解了画面的核心语义。
对比实验
为了证明自己厉害,作者找了三类对手来 PK,并在论文的 Table 1 中展示了结果:
- 从头训练的模型(如 Versatile Diffusion) 。
- 彻底微调的模型(如 SD Image Variations,参数量高达 860M) 。
- 前人的拼接适配器(如 T2I-Adapter style、Uni-ControlNet) 。
- PK 结果:仅仅只有 22M 参数的 IP-Adapter,其 CLIP-T 指标达到了 0.588,CLIP-I 达到了 0.828,远超其他适配器,并且媲美甚至超越了那些参数量几百兆的全面微调模型。这就证明了“解耦交叉注意力”的威力。 
强大的泛化与兼容性
这也是 IP-Adapter 现在能在业界爆火的根本原因。作者做了丰富的定性实验(看生成的图):
- 无缝兼容社区模型:在官方 SD v1.5 上训好的这 22M 参数,可以直接套用在 Anything v4(二次元)、Realistic Vision V4.0(写实风)等社区微调模型上,甚至向下兼容 SD v1.4 。
- 完美兼容 ControlNet:可以用 ControlNet 提取的人体骨架图(结构控制),同时叠加 IP-Adapter 输入的参考图(画风/长相控制),两者互不干扰。
- 多模态融合 (Multimodal Prompts):可以同时输入文字和图片。比如给一张普通马的参考图,再输入文本“在雪地里”,模型就能生成这匹马站在雪地里的画面。
消融实验
在论文最后,作者必须回答两个可能被审稿人质疑的问题,以证明自己的设计是唯一的最佳选择:
- 证明必须“解耦”:作者做了一个没有解耦的“简单适配器”(就是把图像和文本特征像前人那样强行拼接在一起) 。对比发现,IP-Adapter 生成的图片质量更高,也更贴合参考图。
- 证明必须用“全局特征”:这就印证了我们之前聊过的那个神仙细节。作者尝试了不提取 CLIP 的全局特征,而是提取带有一定空间信息的“网格细粒度特征” 。结果发现,模型不仅学到了画风,连参考图里人物的姿势都学过去了,这大幅降低了生成图像的多样性。这也反面证明了,要想把图像当作纯粹的 Prompt,全局特征才是最佳选择。
- 全局特征 (Global Image Embedding):这是 IP-Adapter 默认使用的特征。ViT 在处理完所有的图像小块后,会输出一个统合了所有信息的特殊向量(通常是
[CLS]token)。它把整张图片压缩成了一个高度浓缩的特征向量,包含了极其丰富的画风和内容信息,但故意丢弃了所有的空间位置信息。正因如此,生成的图像才不会死板地照抄原图的姿势,从而保持了极好的多样性。- 空间细粒度特征 (Grid/Fine-grained Features):在论文的 4.4.2 节,作者尝试提取了 CLIP 图像编码器倒数第二层的“网格特征” 。这些特征对应着图像切分后的各个二维小块(比如它知道狗的头在左边,身子在右边)。虽然用细粒度特征生成的图像和参考图在视觉上更一致,但它同时也让模型学到了参考图的“空间结构信息”,导致生成的图像在姿势和构图上非常死板,降低了模型生成的多样性。这也反向证明了:如果只是想把图像当成 Prompt,全局特征是更好的选择。
个人思考与启发
很多时候,解决复杂问题不需要用大锤(比如前人耗费巨大算力去全局微调整个庞大的模型 )。IP-Adapter 的美妙之处在于其数学表达上的克制与优雅。面对“特征污染”的问题,作者没有设计极其复杂的特征隔离网络,而是仅仅利用了矩阵加法分配律的思想——既然大家都要乘以同样的查询向量 ,那我就单独算 再相加。这种以极小代价(仅仅 22M 参数 )撬动巨大收益的思路,非常值得借鉴。