CLIP(Contrastive Language–Image Pretraining) 是 OpenAI 提出的一个多模态模型,能够将文本和图像联合表示在一个共享的潜在空间中。它在多模态任务(如图像分类、图像-文本检索等)中表现出了强大的泛化能力。
CLIP 的核心思想
-
对比学习(Contrastive Learning)
CLIP 通过对比学习的方式,让模型学会将配对的文本和图像映射到共享的潜在空间中。其目标是:- 相似对靠近:将描述相同语义的文本和图像的向量表示尽量靠近。
- 不相似对分离:将语义不相关的文本和图像表示尽量分开。
-
模态对齐
CLIP 通过一个文本编码器和一个图像编码器,将两种模态的数据对齐,确保文本和图像可以在同一个空间中被比较。
对比学习(Contrastive Learning):是一种无监督学习方式,通过比较样本之间的相似性和差异性来学习有效的特征表示。这也会牵扯正样本和负样本,正样本:语义相关的样本对,例如:一张狗的图片及其对应的描述“a dog in the park”。负样本:语义无关的样本对,例如,狗的图片与描述”a car on the street”。而学习的目标就是最大化正样本相似性,最小化负样本的相似性。
这里给出简单的案例来进一步说明对比学习图片和文本对齐:
假设有以下图像和文本:
·图像1:一张猫的图片
·图像2:一张狗的图片
·文本1:“a cute cat sitting on a chair”
·文本2:“a playful dog in the yard”
对比学习的过程:
编码表示
- 图像1和图像2分别通过图像编码器得到图像特征向量
V1和V2。 - 文本1和文本2分别通过文本编码器得到文本特征向量
T1和T2。
计算相似性
- 对所有可能的图像-文本组合计算相似性分数,例如通过点积
- S(V1, T1), S(V1, T2), S(V2, T1), S(V2, T2)
对比损失(Contrastive Loss)
- 正样本对:
S(V1, T1)和S(V2, T2)。 - 负样本对:
S(V1, T2)和S(V2, T1)。 - 损失的目标是:
- 提高正样本对(
V1-T1,V2-T2)的相似性分数。 - 降低负样本对(
V1-T2,V2-T1)的相似性分数。
- 提高正样本对(
CLIP 的架构
-
文本编码器
- CLIP 使用一个基于 Transformer 的文本编码器(如 GPT 或类似架构)。
- 输入:一段自然语言文本。
- 输出:文本的向量表示。
输入格式:文本首先被转为离散的单词或标记(Tokens),这个在我之前的文章中其实也简单的介绍过:AIGC-Stable Diffusion_aigc和stable diffusion-CSDN博客
什么叫标记化呢?举个例子:
输入为:”I love natural language processing.”
在标记化的过程中,这个句子可能会被分解成以下单词标记:
- “I”
- “love”
- “natural”
- “language”
- “processing”
每个单词可能会被映射到一个唯一的数字或向量表示。例如我此时输入为:a girl, beautiful
通过对我输入prompt标记化后,得到的token ID如下:(很多的49407是padding后的结果)
tensor([[49406, 320, 1611, 267, 1215, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407, 49407,
49407, 49407, 49407, 49407, 49407, 49407, 49407]])
这些token ID都是提前设置好的49406表示text的开始,49407是text结束,其他token如下:
“a“: 320
“girl“: 1611
“,“: 267
“beautiful“: 1215
“>”: 49407
然后再把这些标记好的token ID送入嵌入层(得到词嵌入,或者说词的特征)。 这个文本特征将会与图像特征对比学习。
-
图像编码器
- CLIP 使用一个视觉编码器(如 ResNet 或 Vision Transformer)。
- 输入:一张图像。
- 输出:图像的向量表示。
-
共享潜在空间
- 文本和图像的向量都被投影到同一个潜在空间中。
- 通过对比学习,模型确保相似的文本和图像向量在空间中接近,不相似的向量分离。
-
对比损失
- CLIP 使用一种对比损失函数(Contrastive Loss),通过最大化匹配对(图像-文本)的相似性和最小化非匹配对的相似性来训练模型。
CLIP 的训练
-
大规模跨模态数据集
- CLIP 使用了一个包含 4 亿对图像和文本描述的大规模数据集进行训练。这些数据通常是从互联网上获取的,覆盖了广泛的语义内容。
-
自监督学习
- CLIP 不依赖于特定任务的标注数据,而是通过自监督对比学习的方式从海量未标注数据中学习。
CLIP 的特点
-
强泛化能力
- CLIP 不需要针对特定任务进行微调,能够直接在许多下游任务(如零样本图像分类、图像-文本检索等)中表现优异。
-
跨模态能力
- CLIP 能够理解文本和图像之间的语义关系,适用于跨模态检索任务。
-
多任务能力
- CLIP 通过一个统一的架构,能够在许多不同的任务中表现良好。
CLIP 的应用
-
零样本图像分类
- CLIP 可以通过文本提示(如 “a photo of a dog”)直接对图像进行分类,而无需为特定类别训练。
-
跨模态检索
- 在图像和文本之间进行搜索。例如,通过一段文字找到相关的图片,或通过一张图片找到相关的文字描述。
-
图像生成的辅助
- CLIP 可以作为生成模型(如 Stable Diffusion)的一部分,用于指导图像生成,使其与输入文本语义更一致。
总结
CLIP 是一种强大的多模态模型,能够在统一的潜在空间中高效对齐和对比文本与图像。这使得它在跨模态任务中表现卓越,尤其是在需要泛化能力的场景下,如零样本学习和跨模态检索。
文章来源于互联网:AIGC-Stable Diffusion进阶2-CLIP
5bei.cn大模型教程网










