一、CLIP的背景
1.1 什么是CLIP?
CLIP是由OpenAI在2021年提出的一种视觉-语言预训练模型,全称是对比语言-图像预训练(Contrastive Language–Image Pretraining)。其核心思想是通过大规模图像-文本对数据,联合训练一个图像编码器和一个文本编码器,使它们能够将图像和文本映射到同一个高维嵌入空间,并在该空间中捕捉图像与文本之间的语义关联。
与传统计算机视觉模型(如ResNet、EfficientNet)不同,CLIP不仅能处理图像,还能理解与之相关的文本描述。其独特之处在于“零样本学习”(Zero-Shot Learning)能力,即无需针对特定任务进行微调,CLIP就能在多种下游任务上表现出色。
1.2 为什么需要CLIP?
传统计算机视觉模型通常需要为每个任务(如图像分类、目标检测)训练专用模型,依赖于标注数据集(如ImageNet)。这种方法存在以下局限性:
- 数据依赖性强:需要大量高质量的标注数据,标注成本高。
- 泛化能力有限:模型通常只适用于训练时见过的任务和类别,难以推广到新任务。
- 缺乏语义理解:传统模型难以理解图像与自然语言之间的关系。
CLIP通过学习图像和文本的通用表示,解决了这些问题,实现了以下目标:
- 跨模态理解:将视觉和语言信息统一到同一个语义空间。
- 零样本能力:无需针对新任务重新训练即可完成分类、检索等任务。
- 高效泛化:利用互联网上丰富的图像-文本对数据,模型能够学习到更广泛的语义知识。
1.3 CLIP的灵感来源
CLIP的灵感来源于自然语言处理(NLP)中的预训练模型(如BERT、GPT)和对比学习(Contrastive Learning)。具体来说:
- 预训练思想:像BERT一样,CLIP通过大规模无监督数据预训练,学习通用表示。
- 对比学习:受SimCLR、MoCo等对比学习方法的启发,CLIP使用对比损失函数来对齐图像和文本的表示。
二、CLIP的原理
CLIP的核心是通过对比学习,在大规模图像-文本对数据上联合训练一个图像编码器和一个文本编码器,使它们能够将图像和文本映射到同一个高维嵌入空间,并捕捉两者之间的语义关联。CLIP通过学习通用的跨模态表示,实现了零样本学习和广泛的任务适应性。以下是CLIP原理的详细拆解。
2.1 CLIP的核心思想
2.1.1 跨模态语义对齐
CLIP的目标是将图像和文本的表示统一到一个共享的嵌入空间,使得匹配的图像-文本对(例如,一张狗的图片和描述“一隻狗在草地上跑”)在该空间中的嵌入向量距离很近,而不匹配的图像-文本对(例如,狗的图片和“一只猫在树上”)距离较远。这种对齐使得CLIP能够理解图像和文本之间的语义关系,并支持多种任务,如图像分类、图像-文本检索等。
2.1.2 对比学习的直观理解
对比学习的核心是通过“比较”来学习表示。想象一个相册,里面有很多照片和对应的文字描述(例如,“日落”对应一张夕阳的图片)。CLIP的任务是:
- 让每张照片的表示(嵌入向量)与对应的文字描述的表示尽可能接近。
- 同时,让照片与不相关的文字描述(例如,“日落”照片与“雪山”描述)尽可能远离。
通过这种“拉近匹配对、推远不匹配对”的方式,CLIP学习到了图像和文本的通用表示。
2.1.3 零样本能力的来源
传统计算机视觉模型(如ResNet)通常需要针对特定任务(如ImageNet分类)进行监督训练,依赖标注数据。而CLIP通过大规模、任务无关的图像-文本对数据进行预训练,学习到了通用的语义表示。在推理时,用户可以直接输入任意文本描述(如“A photo of a dog”),CLIP通过计算图像与文本的相似度完成任务,无需针对特定任务重新训练。这种灵活性是CLIP零样本能力的核心。
2.2 模型架构
CLIP的架构由两个主要模块组成:图像编码器和文本编码器,它们分别处理图像和文本输入,并将两者映射到同一个高维嵌入空间。以下是详细说明:
2.2.1 图像编码器
- 功能:将输入图像(像素数据)编码为一个固定维度的嵌入向量。
- 架构选择:
- 卷积神经网络(CNN):OpenAI在CLIP中尝试了ResNet系列(如ResNet-50、ResNet-101)作为图像编码器。ResNet通过残差连接缓解深层网络的梯度消失问题,适合处理高分辨率图像。
- 视觉Transformer(ViT):CLIP的主要模型使用了ViT(如ViT-B/32、ViT-L/14)。ViT将图像分割为固定大小的块(例如16×16像素),将每个块视为一个“token”,通过Transformer的注意力机制处理这些token。ViT在捕捉全局语义关系方面优于CNN,尤其在处理复杂场景时表现更好。
- 输入:图像通常被调整为固定分辨率(如224×224像素),并进行归一化处理。
- 输出:一个ddd-维的嵌入向量(例如,d=512d=512d=512),表示图像的语义内容。
- 细节:
- ViT-B/32表示基础版ViT,输入图像被分割为32×32像素的块。
- ViT-L/14表示大型ViT,输入图像被分割为14×14像素的块,模型更大,性能更强。
- 图像编码器的最后一层通常是一个全连接层或池化层,将特征图转换为固定维度的向量。
2.2.2 文本编码器
- 功能:将输入文本(自然语言描述)编码为一个固定维度的嵌入向量。
- 架构:基于Transformer的编码器,类似于BERT或GPT的编码器部分。Transformer通过自注意力机制捕捉文本中的语义关系。
- 输入:
- 文本被分词为一个个词或子词单元(例如,使用WordPiece或BPE分词器)。
- CLIP支持最大77个token的输入,超长文本会被截断。
- 文本通常以提示(prompt)形式输入,例如,“A photo of a {class}”。
- 输出:一个ddd-维的嵌入向量(与图像编码器的输出维度相同,例如d=512d=512d=512),表示文本的语义内容。
- 细节:
- 文本编码器通常使用12层或24层的Transformer,具体取决于模型规模。
- 最后一层的输出通常通过池化(如取[CLS] token或最后一个token的表示)转换为固定维度的向量。
2.2.3 共享嵌入空间
- 关键点:图像编码器和文本编码器的输出向量具有相同的维度(例如512维),这使得它们可以在同一个嵌入空间中进行比较。
- 归一化:为了便于计算相似度,CLIP通常对嵌入向量进行L2归一化(即将向量长度缩放到1),确保向量只关注方向(语义)而非长度(幅度)。
- 直观解释:你可以将嵌入空间想象成一个高维球面,匹配的图像-文本对(如一张狗的图片和“A photo of a dog”)在球面上靠得很近,而不匹配的对(如狗的图片和“A photo of a cat”)则相距较远。
2.2.4 模型规模与变体
CLIP有多种模型变体,主要区别在于图像编码器的架构和规模:
- ResNet变体:如ResNet-50、ResNet-101,参数量较小,适合资源受限的场景。
- ViT变体:如ViT-B/32(基础版,约8700万参数)、ViT-L/14(大型版,约3亿参数)。ViT模型通常性能更强,但计算成本更高。
- 文本编码器:通常是12层或24层Transformer,参数量约为6000万到1亿。
2.3 训练目标:对比学习
CLIP的训练目标是通过对比学习优化图像编码器和文本编码器的参数,使得匹配的图像-文本对在嵌入空间中具有高相似度,而不匹配的对具有低相似度。CLIP使用的是InfoNCE损失函数,以下是详细讲解。
2.3.1 训练数据的组织
- 输入:假设有一个批量(batch)包含NNN个图像-文本对:{
(I1,T1),(I2,T2),...,(IN,TN)}\{(I_1, T_1), (I_2, T_2), ..., (I_N, T_N)\}{(I1,T1),(I2,T2),...,(IN,TN)},其中:
- IiI_iIi是第iii张图像(例如,一张狗的图片)。
- TiT_iTi是对应的文本描述(例如,“A photo of a dog”)。
- 目标:让图像IiI_iIi的嵌入向量viv_ivi与文本TiT_iTi的嵌入向量tit_iti尽可能接近,而与其他文本Tj(j≠i)T_j (j \neq i)Tj(j=i)或图像Ij(j≠i)I_j (j \neq i)Ij(j=i)的嵌入向量远离。
2.3.2 编码过程
- 图像编码:
- 图像编码器f(Ii)f(I_i)f(Ii)将图像IiI_iIi映射为嵌入向量vi∈Rdv_i \in \mathbb{R}^dvi∈Rd:
vi=f(Ii)v_i = f(I_i)vi=f(Ii) - 其中,ddd是嵌入空间的维度(例如512)。
- 图像编码器f(Ii)f(I_i)f(Ii)将图像IiI_iIi映射为嵌入向量vi∈Rdv_i \in \mathbb{R}^dvi∈Rd:
- 文本编码:
- 文本编码器g(Ti)g(T_i)g(Ti)将文本TiT_i

最低0.47元/天 解锁文章
2894

被折叠的 条评论
为什么被折叠?



