在早上的部分内容里, 我们针对多模态展开了交流, 当前呢, 我们要深入探讨一个核心模型——CLIP(这个CLIP是具有对比语言-图像预训练功能也就是 -Image Pre- 的), 接下来在这一篇章详细地阐述它是如何运作的, 以及怎样运用它这个事实情况。
CLIP 的核心理念:用文字教模型看图
原来的传统图像分类模型究竟是怎样进行训练的呢? 首先, 要由人工针对数量达到上千万张的图片去进行打标签的操作, 比如标注为“这是猫”、“这是狗”之类的, 然后再促使模型去学习其中存在的对应关系。然而, 存在的问题是,进行标注这种操作所需要花费的成本是极其高昂的, 并且模型所学到的分类是全然固定不变的, 一旦出现了新的类别, 那就必须得重新进行标注。
CLIP的思路全然不一样, 是直接从网络上抓取图文对来学习, 有4亿张图片, 还有与之对应的文本描述, 并不需要人工进行标注。
怎么学?关键在 对比学习( )。
训练过程一句话:把匹配的图文对拉近,不匹配的推远。
具体来说,CLIP 有两个编码器:
训练之际, 一个 batch 当中存在 N 个图文对, 举例而言, 像 32,768 对这样。模型所要达成之事为, 使得每一张图片的向量跟其确切对应的文本向量达成“距离最近”的状态, 也就是具备高余弦相似度, 并且与其他 32,767 个文本向量呈现出“距离较远”的情形, 即拥有低余弦相似度。这无疑是一场具有超高难度的配对游戏。
训练结束之后, CLIP学到了些什么呢? 它学到的是把图片与文本映射进相同的语义空间之中。
CLIP 怎么用?实战场景
场景一: 零样本分类, 要对图片进行分类,不借助训练集, 仅仅需撰写几段文字描述, 分别是: “一张呈现猫的照片”、“一张展现狗的照片”、“一张体现汽车的照片”。CLIP 对图片向量与每段文字计算相似度, 选取其中相似度最高的那个类别。其准确率在这方面能够达到 76%, 并且未曾运用任何方面的训练数据。
场景二:图片搜索, 针对一段文字“夕阳下的海滩”, 于海量图片库之中寻找与之最为匹配的, 而 CLIP 将每个候选图片编码成为向量, 随后与文本向量比较相似度, 进而返回 Top-K。
从 2025 年起始进行跨模态检索场景三, 几乎全部主流多模态模型(GPT - 4V、Pro)运用 CLIP 或者其变体当作视觉编码器, 先是将图片压缩成“视觉 token”, 接着把它喂给大模型用于理解。
场景四:实际代码就几行
import clip model, preprocess = clip.load("ViT-B/32") image = preprocess(Image.open("cat.jpg")).unsqueeze(0) text = clip.tokenize(["a cat", "a dog", "a car"]) with torch.no_grad(): logits_per_image, _ = model(image, text) probs = logits_per_image.softmax(dim=-1)输出
0.97, 0.02, 0.01
→ 97% 概率是猫,零样本完成分类。
CLIP 的局限性也要知道
对于细粒度分类是不行的, 比如“一种褐色的猫”与“另一种褐色的猫”之间, 分辨率不足, 对于抽象概念(像统计图、流程图)的表现较为普通, 存在社会偏见, 因为互联网数据自身存在偏见, CLIP会继承这种偏见, 训练成本高昂, 例如4亿图文在256块V100上训练了2周。
但CLIP的现身, 使计算视觉的面貌得以改变, 它令“不训练便可进行分类”成为了实际情况, 还为GPT - 4V等多模态模型, 提供了视觉理解的基础框架, 后续的改进涵盖(开源复现)、(改进版)之类。
明天, 我们会踏入GPT - 4V的领域, 关于怎样达成多模态理解, 大家敬请期待!
#多模态##大模型##ai##多模态大模型#