十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

CLIP与ViT深度解析:对比学习、Prompt工程与多模态应用实践

CLIP与ViT深度解析:对比学习、Prompt工程与多模态应用实践 先说一个可能让很多人意外的事实CLIP之所以能在2021年之后深刻改变整个AI视觉领域靠的不是“更深的网络”或“更强的算力”而是一个听起来特别朴素的思路——让模型同时看图和看字然后自己悟出“图”和“字”之间的对应关系。这个思路放到今天看几乎成了多模态模型的“标准答案”但在当时OpenAI团队是顶着“用4亿张图训练一个分类器”的巨大质疑干出来的。作为一名从ResNet时代一路折腾过来的算法工程师我第一次读完CLIP论文时脑子里只有一个想法这玩意儿把“视觉任务”的定义彻底改写了原来“教AI看懂世界”这件事根本不需要人工标注的固定标签集合而是可以让模型从自然语言里自己学会“世界长什么样”。这篇文章想系统地讲透三件事一是ViT在CLIP里扮演了什么角色为什么OpenAI偏偏选了它二是对比学习到底怎么“骗”模型学到通用特征包括温度系数、batch size这些魔鬼细节三是Prompt工程为什么在CLIP时代变得如此重要以及我在实际项目中踩过的那些和CLIP相关的坑。如果你打算在自己的业务里用CLIP做图文检索、零样本分类或特征抽取这篇文章应该能帮你少走不少弯路。1. CLIP整体设计思路拆解从“固定标签”到“自由文本”的范式转移1.1 传统视觉模型的核心困境在CLIP出现之前做图像分类的标准流程是这样的先确定一个任务比如ImageNet的1000类然后找标注好的数据集训练一个ResNet或EfficientNet最后把输出层的维度设为1000每个维度对应一个类别。这套流程的问题不用我说你也清楚——每换一个任务就得重新标数据、重新训练模型标一个类别几十万张图是家常便饭。更麻烦的是模型学到的特征是被“锁死”在这1000个类别里的你问它“这张图里有没有猫”它只能通过“有没有猫这个类别的概率高于阈值”来间接回答而不是真正理解“猫”是什么。我当年做安防项目时客户要求识别“翻越围墙”这个动作光标注就花了三周模型效果还不稳定因为“翻越”这个语义边界本身就是模糊的不同标注员的理解都可能打架。这种痛苦经历让我后来第一次看到CLIP时特别震撼——原来可以把“标签”从离散的编号变成一个自然语言句子让模型直接学习“图像内容”和“语言描述”之间的匹配关系这样一来模型不再认识“第538类”而是认识“a photo of a person climbing over a fence”这句话。1.2 双塔结构为什么图像和文本各走一条分支CLIP的整体结构可以简单概括为“双塔”图像塔负责把图片编码成一个向量文本塔负责把文字编码成一个同维度的向量然后通过对比学习让匹配的图文对在向量空间里靠近不匹配的远离。这个设计和当时流行的“单塔跨模态模型”比如把图文拼接后一起过Transformer最大的区别在于双塔结构允许图像和文本各自独立编码在线推理时可以预先算好所有文本的向量存起来来一张图只需要算一次图像向量然后做一次向量检索就行。当时我做图文检索需求时对比过单塔和双塔方案单塔模型精度确实略高但线上延迟完全扛不住——每来一个query都得重新算一遍“图片文字”的联合编码。CLIP这种双塔结构在工程上明显更友好。当然这种解耦也付出了代价图像塔和文本塔之间没有深层交互对需要细粒度对齐的任务比如“图里这只猫的左耳朵是黑色的”这种指代理解天然弱势这为后来BLIP、Flamingo等模型用交叉注意力弥补图文交互埋下了伏笔。1.3 数据策略4亿张图文对是从哪来的以及为什么靠谱CLIP的训练数据是4亿张“图像-文本”对OpenAI在论文里说这些数据是从互联网上收集的但没公开具体细节。从后续的各种分析和复现尝试来看这批数据涵盖了大量网页里的图片配文、新闻图说、社交媒体描述等本质上就是互联网上海量“有人用自然语言描述过一张图”的现成数据。这里启发很大与其依赖人工标注的结构化标签不如利用互联网上天然的“弱标注”数据。数据质量决定了模型能力的上限4亿这个量级在当时是碾压性的OpenAI团队后来在论文里做过消融实验指出数据规模比模型规模更关键——在同样模型结构下把训练数据从4000万扩展到4亿零样本分类效果提升非常明显。我自己做业务时也验证过这一点给CLIP做领域微调时搞到几万张高质量图文对的效果往往比把模型结构改得花里胡哨更有效。2. ViT在CLIP中的关键作用为什么OpenAI选择抛弃卷积2.1 从ResNet到ViT视觉特征提取的“工业化”改造CLIP论文里有个容易被忽略的细节OpenAI最初试过用ResNet作为图像塔甚至做了一个叫ResNetD的改进版本把stem改成3x3卷积、增加深度缩放等训练效果也不错。但最终他们发现ViTVision Transformer在同样的计算预算下能拿到更好的效果于是干脆全面转向了ViT架构。ViT的核心操作不复杂把一张224x224的图片切成16x16的patch每个patch线性映射成一个token embedding然后加上位置编码输入Transformer encoder。这个做法和NLP里把句子切成词token几乎一模一样所以它的好处很直接——视觉模型和文本模型的结构终于统一了都是Transformer跨模态的特征对齐更加自然。还有一个容易被忽略的好处ViT在大规模数据下的“吃数据”能力远超卷积网络这也是CLIP对数据量要求极高的情况下ViT能胜出的原因。2.2 ViT训练视觉模型的几个反直觉细节我在实际用ViT做图像塔时发现ViT的训练对超参数和优化器特别敏感。比如warmup step如果太短训练很容易崩Adam的权重衰减设置不当会导致patch embedding层学到一堆噪声。CLIP论文里提到他们用了很大的batch size32768配合LAMB优化器这个组合在当时是“大力出奇迹”的典型代表——大batch size能提供更稳定的梯度估计让对比学习中的负样本更加丰富这一点后面讲对比学习时会重点展开。另外需要注意ViT的position embedding用的是可学习的绝对位置编码。CLIP训练时的分辨率是224x224如果你要微调模型处理336x336的输入位置编码需要做插值这种插值会影响模型性能。OpenAI后来在CLIP的第二个版本里直接把训练分辨率提高到336同时用了一种“额外继续预训练”的方式而不是简单插值这算是一个很实用的经验。如果你要在自己的场景里换分辨率建议也不要用朴素的双线性插值而是在目标分辨率上做短时间的继续预训练来“热启动”。2.3 ViT的归纳偏置缺失问题ViT不像卷积网络那样天然具有局部性和平移等变性它需要从数据里自己学出“相邻patch通常有关联”这件事。在小数据集上ViT会明显输给ResNet因为数据量不够支撑它自己学出这些视觉先验。CLIP之所以能用ViT且效果好根本原因就是4亿数据的规模效应压过了归纳偏置缺失的问题。这对从业者是个重要提示如果你手里只有几万张图直接上ViT往往不是最优解反而用ResNet或EfficientNet更稳。我在一个只有5万张工业质检图片的项目里试过用ViT做图像塔收敛慢、效果差换回ResNet之后指标立刻上去了。等后来数据积累到50万张ViT的优势才逐渐体现出来。所以ViT和CNN的选择本质上不是“谁更强”的问题而是“你的数据量养不养得起谁”的问题。3. 对比学习原理拆解如何让4亿张图“教会”模型语义3.1 核心目标构造正样本与负样本对比学习这个概念本身不难理解你有一对已经配好的图文比如一张柯基的照片和一段“一只柯基在草地上奔跑”的文字这就是一个正样本对同一batch里的其他图文对都算负样本。训练目标就是让模型学会“把正样本对的图像向量和文本向量拉近把负样本对推开”。这个思路很像“让你在一千人里找出你的朋友”你不需要知道每个人的名字只需要知道哪些人和你的朋友长得像、哪些不像。训练数据越多负样本越多样“看世界”的角度就越全面。CLIP的训练有效性和负样本的质量、数量直接相关这就是为什么CLIP要把batch size拉到32768这么大的主要原因——batch越大每个图像样本能看到的负样本就越多对比学习的效果就越好。3.2 CLIP损失函数的数学细节CLIP的损失函数实际上就是InfoNCENoise Contrastive Estimation的一个变体或者更准确地说是一个对称的交叉熵损失。它的流程是先算batch内所有图像向量和文本向量之间的相似度矩阵然后按行按列分别做softmax再求交叉熵。具体计算过程如下假设batch size为N图像塔得到N个图像向量I1到IN文本塔得到N个文本向量T1到TN每个向量的维度为d。先做L2归一化然后计算相似度矩阵S其中S[i][j]表示第i张图和第j条文本的余弦相似度。训练目标就是让S的对角线元素尽量大非对角线元素尽量小。损失由两部分组成——第一部分按行做softmax让第i张图正确匹配到第i条文本第二部分按列做softmax让第i条文本正确匹配到第i张图。这里的温度系数τ非常关键。τ太大会导致所有相似度被“压平”softmax输出接近均匀分布梯度变小模型学不动τ太小则会让模型过于“自信”对负样本区分过猛训练不稳定。CLIP论文里提到他们直接把τ设成了一个可学习参数初始值设为0.07左右训练过程中让模型自己调整。我在复现时踩过坑如果把τ固定为1损失下降极慢模型几乎学不到东西调成0.07之后收敛速度快了不止一个量级。建议你如果自己写对比学习代码一定把这个参数单独拎出来做实验。3.3 为什么CLIP能“看懂”世界模态对齐的本质很多人问CLIP是真的“理解”了图像内容还是只是学会了表面关联我个人的看法是CLIP学到的是“图像内容与语言描述之间的一致性映射”这种理解本质上是统计性的不是人类意义上的推理理解。比如你有两张图一张是“草地上有一只柯基”另一张是“草地上有一只柴犬”CLIP经过大量训练后确实能把这两个文本描述和对应的图像正确对齐但它并不知道柯基和柴犬的生物分类关系也不理解“如果柯基被剃了毛它看起来像什么”这种深层推理。但这恰恰是CLIP强大的地方——它把“理解”这个抽象概念变成了一个“向量空间中距离关系”的问题。下游任务只需要在这个语义空间里做简单的检索或相似度计算就能完成很多以往需要专门训练模型的视觉任务。这种能力在实际业务里非常管用比如商品推荐场景下用户输入“适合去海边度假穿的碎花连衣裙”普通分类模型完全不知道怎么处理这个query但CLIP能直接算出这个文本和几千张商品图之间的相似度排序输出匹配的商品。3.4 对比学习vs生成式预训练两条路线的差异对比学习和生成式预训练比如让模型根据文本生成图像或根据图像生成文本是两种截然不同的训练目标。GPT类模型做的是自回归目标是预测下一个tokenCLIP做的是判别式对比目标是区分匹配和不匹配的图文对。CLIP的训练效率更高因为它不需要逐token生成只需要对比向量但代价是CLIP在生成任务上完全无能只能做特征提取和匹配。后来很多工作尝试把这两种思路合到一起比如CoCaContrastive Captioner同时用对比损失和生成损失训练在一个模型里兼顾对齐和理解能力。如果你在业务里既要做图文检索又要做图像描述生成CoCa这类模型会更合适而纯CLIP只能覆盖检索和分类类需求。这个选型问题在实际项目里经常被忽略值得提前想清楚。4. Prompt工程在CLIP中的应用一句话如何决定模型上限4.1 为什么CLIP对Prompt这么敏感CLIP的文本塔是在自然语言上训练的但它见过的文本表达方式是有限的。训练数据里的文本大多是比较完整的描述句比如“a photo of a dog”“a cat sitting on a sofa”所以到推理阶段你输入的文本形式和训练分布越接近效果越好。最经典的例子是零样本分类你要做CIFAR-100的100类分类直接输入“airplane”“automobile”这类单词效果通常很差但改成“a photo of a {class}”这个模板后准确率立刻提升不少。原因就在于“a photo of”这类前缀在CLIP的训练数据里极其常见模型对紧跟在这个前缀后面的内容有更好的激活响应。后续的研究进一步发现更丰富的上下文描述比如“a satellite photo of a {class}”在你处理特定领域图像时能带来更大的提升比如遥感场景下的分类精度用领域相关性强的prompt模板可以比通用模板高出好几个点。4.2 Prompt工程的常用模板策略我做CLIP零样本分类时总结了一套模板选择方法先看测试图像的领域风格然后仿照训练数据里常见的描述方式去写prompt。通用场景用“a photo of a {class}”或“a photo of the {class}”这两种基本不会出错。医学图像用“a medical image of {class}”其效果峰值往往更明显。遥感图像用“a satellite image of {class}”真的有明显增益。如果目标类别是动作或事件可以把prompt改成“a photo of a person doing {action}”之类更具体的结构。对于类别名本身也值得做一轮文本处理。像“Basenji”一种犬种这种罕见词模型可能没见过但不妨碍直接作为文本输入——因为文本编码器能通过子词切分把词拆成“base”和“nji”之类的token来处理不过如果有已知的别名或更常见的表达换掉之后效果会更稳定。还有一个小技巧把类别名用多个prompt模板做集成即一个类别写多个句子分别编码后取平均这个做法在CLIP官方代码里叫prompt ensembling我实测在ImageNet上能提升约1到2个百分点在细粒度分类数据上提升更明显。4.3 选择文本编码器CLIP中text encoder的特殊性CLIP的text encoder用的是Transformer结构但它和GPT不太一样。CLIP文本塔是双向编码能同时看到句子前后的所有tokenGPT是单向的只能从左往右看。之所以CLIP选择双向是因为对比学习需要的是对整个句子的整体语义表示而不是生成下一个token的条件概率。这一区别会影响你对CLIP的微调方式——不能像微调GPT那样直接做语言建模损失而是应该继续做对比学习或者改成和下游任务匹配的损失函数。文本塔的最大长度是77个token这个限制在实际使用中经常被忽略。我在做电商场景时商品标题往往很长超过77个token后被粗暴截断尾部信息直接消失导致检索效果变差。后来我做了个简单的处理先把标题按关键信息重排把核心描述词前移保证在77个token内覆盖有效的语义信息效果提升明显。另外文本塔输出默认是取整个序列的最终隐藏状态而不是像BERT那样取[CLS] token所以如果你要改造CLIP的文本编码器这个细节需要注意。4.4 Prompt工程的边界手工调优vs可学习Prompt手工设计prompt模板虽然有效但毕竟依赖人的经验。后来研究者提出了CoOpContext Optimization这类方法把prompt的前缀token当成可学习的参数直接在目标任务数据上做反向传播优化。这种做法本质上是在“自动搜索prompt”摆脱了人工设计模板的主观性在多个视觉数据集上效果显著。我在自己的一个商品分类项目里试过CoOp基线的CLIP零样本只有78%的准确率手工模板能到81%CoOp微调后到84%效果还是可观的。但CoOp有个潜在问题如果训练数据很少比如只有几百张图可学习的prompt很容易过拟合导致在测试集上反而比手工模板差。这种情况下一个更稳妥的方案是用手工模板作为初始化或者加上一定的正则约束。说到底Prompt工程目前还是“领域经验数据验证”的结合体纯靠调字符串的朴素hack时代已经过去了。5. 实操过程用CLIP构建一个完整的图文检索与零样本分类流程5.1 环境准备与模型加载如果你只是想快速体验CLIP的效果不建议自己去复现训练直接用OpenAI官方开源的CLIP权重就够了。Python环境需要torch、torchvision以及openai官方提供的clip包或者用HuggingFace的transformers库里的CLIPModel。我习惯用transformers因为它和下游生态衔接更方便加载模型只需要一行代码建议这里给一段代码 python from transformers import CLIPProcessor, CLIPModelmodel CLIPModel.from_pretrained(openai/clip-vit-base-patch32) processor CLIPProcessor.from_pretrained(openai/clip-vit-base-patch32)这个openai/clip-vit-base-patch32表示图像塔是ViT-B/32patch size为32输入分辨率224x224。如果你要更强的效果可以直接换用openai/clip-vit-large-patch14。加载模型时要留意显存需求base版本大概需要1GB显存large版本需要接近3GB如果机器紧张就选base。 ### 5.2 写一个零样本图像分类的完整代码 零样本分类的实现思路是先把候选类别的prompt文本都编码成向量存起来然后来一张测试图编码成图像向量最后计算图像向量和每个文本向量的余弦相似度取相似度最高的那个类别作为预测结果。这个流程可以封装成下面这个函数方便直接拿去做灰度测试。 python import torch from PIL import Image def zero_shot_classify(image_path, class_names, templatesNone): image Image.open(image_path).convert(RGB) if templates is None: templates [a photo of a {}] texts [t.format(name) for name in class_names for t in templates] inputs processor(texttexts, images[image] * len(texts), return_tensorspt, paddingTrue) with torch.no_grad(): outputs model(**inputs) logits_per_image outputs.logits_per_image # 图像与所有文本的相似度矩阵 probs logits_per_image.softmax(dim-1).squeeze(0) best_idx probs.argmax().item() return class_names[best_idx // len(templates)], probs[best_idx].item()实际使用中我一般会把所有文本向量在建索引时就预先计算好而不是每次推理都重算一遍文本。这样在线推理时只需要算一次图像向量然后和预先存好的文本向量做矩阵乘法单张图片的延迟可以控制在几毫秒级别完全能满足线上的实时性要求。5.3 图文检索系统的索引构建与查询如果要构建一个图文双向检索系统文本向量和图像向量都应该预先构建索引。我用过两种方案数据量在百万级别以内时直接用numpy或faiss的IndexFlatIP做暴力检索简单可靠数据量上千万甚至上亿时再用faiss的IndexIVFFlat或HNSW做近似最近邻检索。CLIP的向量是经过L2归一化的所以内积检索等价于余弦相似度检索直接用IndexFlatIP就行。构建索引时有个细节CLIP的向量是1024维large模型是768维维度不高但量大的时候内存占用还是很可观的。100万张图的向量float32存储大概需要4GB内存如果机器内存吃紧可以考虑用product quantization或者把向量转成float16。我在一个爬虫项目里用HNSW把检索延迟从60毫秒压到了10毫秒以内效果还是不错的。5.4 对CLIP做领域微调LoRA是一种低成本方案CLIP的预训练数据虽然覆盖了大量自然图像但在特定领域比如医学影像、工业质检、电商商品通常还有提升空间。如果你有几千到几万张标注的图文对或分类数据可以对CLIP做微调。比较推荐的做法是用LoRALow-Rank Adaptation在冻结原模型参数的情况下只训练低秩分解矩阵这样可以大幅减少可训练参数量同时防止灾难性遗忘。我在一个工业质检项目里用LoRA只训练了CLIP文本塔和图像塔的attention层里的低秩矩阵大约只占全部参数的0.5%在标注了8000张缺陷样本后缺陷分类准确率从82%提升到了94%而且训练只需要一张消费级显卡就能跑完。这个方案如果不用LoRA而是全量微调效果当然可能更好但成本和风险都更高——尤其当你的数据集和CLIP预训练分布差异较大时全量微调很容易过拟合。LoRA在这种场景下是一个性价比很高的选择。5.5 评估CLIP效果的注意事项CLIP的实际效果需要根据任务类型来评估。零样本分类场景要注意和随机初始化分类头的模型做对比而不是和完整微调后的模型对比否则会得出“CLIP不行”的错误结论。图文检索场景要同时看Recall1、Recall5、Recall10等指标因为检索任务对排序质量敏感只看Recall1容易片面对待。一个常见的误区是拿CLIP当通用特征提取器对所有下游任务都直接套用。实际上CLIP提取的特征在细粒度识别比如区分不同品种的鸟上明显弱于专门训练的模型因为CLIP的训练目标是“图像和文本的对齐”而不是“区分相近视觉类别”。所以如果你要做细粒度识别最稳妥的做法是把CLIP作为一种初始特征再叠加一个小型分类头做微调而不是指望零样本就能解决。6. 常见问题与排查技巧实录6.1 损失不下降或收敛极慢如果你在复现对比学习训练、发现损失不降或者下降速度慢到令人发指大概率是以下几个原因。温度系数设置不合理是最常见的坑——τ固定为1往往会导致梯度消失建议直接设成0.07或者初始化为可学习参数。第二个常见问题是相似度矩阵没有做L2归一化导致余弦相似度的取值范围不对softmax输出分布异常。还有一个是batch size太小负样本数量不够模型学不到有意义的区分信息这种情况下即使损失在降低下游任务指标也会很差。训练稳定性方面优化器选择也很关键。CLIP原论文用的是AdamW或LAMBlr设置要特别小心过大会导致训练初期就发散过小则收敛极慢。我的经验是用AdamW配合线性warmup前10%的step做warmup峰值lr设置在1e-4到3e-4之间整体比较稳。6.2 零样本分类准确率偏低很多人第一次跑CLIP零样本分类时感觉效果没有论文里说的那么惊艳这时需要检查几件事。第一prompt模板是不是和训练分布匹配直接输一个裸单词的实验效果通常很惨改成“a photo of a {class}”再试。第二类别名和图像内容的语义间距比如你的类别名是“轿车”但训练数据里图文对用的都是“car”或“sedan”这时候换用英文标签效果可能更好。第三图像预处理是否和CLIP的要求一致CLIP的processor默认会做Resize和CenterCrop如果你用自定义预处理手段图像内容可能被过度裁剪导致关键语义丢失——尤其在目标物体偏小或偏边缘时CenterCrop会直接把目标切掉。6.3 图像向量和文本向量的维度不一致怎么办这个问题的根源通常是模型加载了两个不同配置的编码器比如图像塔是ViT-L/14文本塔是ViT-B/32。两边输出的维度不同相似度矩阵直接计算会报错。解决方案是检查加载模型时是否使用了同一个CLIPModel实例不要自己单独加载两个不同的clip模型来拼接。如果你有特殊需求确实要换文本塔或视觉塔那得确保两边的输出投影维度一致通常可以在CLIPModel的配置里设置projection_dim来统一。6.4 Prompt长度超过77个token被截断CLIP文本塔的最大序列长度是77超过这个长度会被截断。如果你要处理的文本特别长比如长商品标题、长评论建议先做文本预处理。可以按语义重要性排序或重构文本把关键信息放到前77个token内也可以用分句加权池化的方法把长文本切成多个片段分别编码再按权重平均得到整个文本的向量。后者效果更好但工程上复杂度更高我一般只有在长文本占比超过30%时才会启用这个方案。6.5 显存不足或推理速度慢CLIP模型本身的体量并不大base版本大约150M参数large版本大约430M参数。但如果你的输入是大量图片且一次性喂给模型显存很容易爆掉。解决方法是控制batch size分批编码后再把向量拼接起来。另外如果你用的是ViT-L/14这类大模型又不需要微调记得开启torch.no_grad()和torch.inference_mode()甚至可以转成half精度来节省显存和加速推理。实测half精度在检索任务里对精度影响很小速度却能提升60%以上。7. 从CLIP到多模态大模型这套思路的延伸与边界7.1 CLIP之后的多模态模型演进CLIP证明了对比学习做图文对齐的可行性后续的工作基本沿着几个方向继续演进。一个方向是引入更细粒度的图文交互比如BLIP加入交叉注意力模块让图像特征和文本特征不再“各自为政”而是互相融合ALBEF引入动量蒸馏和跨模态注意力在图文检索的细粒度理解上比CLIP好很多。另一个方向是引入生成式训练目标比如CoCa同时用对比损失和生成损失让模型既会匹配又会生成Flamingo则在冻结的视觉塔和语言模型之间加了一层训练好的cross-attention让CLIP的视觉特征可以直接“注入”大语言模型从而支持图文对话。如果你在业务里需要做多模态问答或者图像生成纯粹的CLIP是不够的但CLIP底层的双塔对齐思想依然是这些复杂模型的基石。理解CLIP之后再看BLIP、Flamingo的结构会轻松很多。7.2 CLIP在真实业务里的局限性我必须强调一点CLIP的“零样本”能力强不等于“无限样本”能力强。当你的目标类别非常细粒度比如区分几十种工业零件型号或者标签分布和自然语言描述差异较大时零样本效果会大打折扣。还有一个问题是鲁棒性CLIP对图像扰动比较敏感比如对图像做轻微旋转、添加噪声检索排名可能发生明显变化这在安防、医疗等对稳定性要求很高的场景里是硬伤。补一个例子我之前做一个农业项目需要分类不同品种的玉米叶片病害。CLIP零样本的准确率只有60%左右后来用领域数据做LoRA微调之后提到了87%。这说明CLIP的能力边界是可以通过下游适配来扩展的但零样本不是万能的。如果你的需求正好在CLIP的弱区别硬扛直接做微调才是务实的选择。7.3 未来趋势能进化的CLIP还有多少空间CLIP之后出现的一批工作是让它“持续学习”——比如在增量数据上不断更新图文对齐能力而不是每次从头训练。这类研究的难点在于避免灾难性遗忘同时保持已有模态对齐的稳定性。另一个趋势是把CLIP从静态特征抽取器发展成可交互的“感知底座”比如接入大语言模型后模型可以通过对话来引导视觉注意力做指代理解、视觉问答甚至具身智能决策。这也是目前业内讨论最多的方向。我个人的感觉是CLIP作为一篇2021年的论文它的思想价值已经远远超过了模型本身。对比学习双塔结构自由文本标签这三板斧构成了现代多模态智能的重要基石。不管你是做计算机视觉、自然语言处理还是多模态方向理解这套范式的来龙去脉都会对看问题和做项目有实质性的帮助。从ViT到CLIP这条路我从个人实操中得到的最大体会是模型结构固然重要但决定能力上限的往往是你怎么设计训练目标和组织数据。CLIP用4亿张图告诉我们一个足够好的对齐目标真的能让人工智能在“看图说话”这件事上脱胎换骨。如果你正打算在业务里引入多模态能力不妨从CLIP开始先跑通零样本再做领域微调这条路既稳妥又高效。
返回列表