- 这一篇需要有Transformer的基础,所以建议先了解Transformer相关的内容再看CLIP
参考内容:
- 【小白】一文读懂CLIP图文多模态模型_clip模型-CSDN博客
- openai多模态大模型:clip详解及实战_clip模型-CSDN博客
- 使用OpenAI CLIP进行文本到图像和图像到图像的搜索 - 文章 - 开发者社区 - 火山引擎 (volcengine.com)
CLIP原文:Learning Transferable Visual Models From Natural Language Supervision (arxiv.org)
GitHub:openai/CLIP: CLIP (Contrastive Language-Image Pretraining), Predict the most relevant text snippet given an image (github.com)
1. 什么是CLIP?
CLIP
是OpenAI在2021年2月发表的一篇文章,其全称为Contrastive Language-Image Pre-training
,即一种基于对比文本-图像对的预训练方法。
- Text Encoder:用于将文本转换为低维向量表示-Embeding。
- Image Encoder:用于将图像转换为类似的向量表示-Embedding。
CLIP在zero-shot learning的效果很好。
1.1 那什么是zero-shot?
零次学习(Zero-Shot Learning,简称ZSL)假设斑马是未见过的类别,但根据描述外形和马相似、有类似老虎的条纹、具有熊猫相似的颜色,通过这些描述推理出斑马的具体形态,从而能对斑马进行辨认。零次学习就是希望能够模仿人类的这个推理过程,使得计算机具有识别新事物的能力,如下图所示。
- 就是如何在没有对应的样本的情况下去进行推测
2. CLIP结构
CLIP一共有三个阶段:
Contrastive pre-training:预训练阶段,使用图片 - 文本对进行对比学习训练;
Create dataset classifier from label text:提取预测类别文本特征;
Use for zero-shot predictiion:进行 Zero-Shoot 推理预测;
2.1 Contrastive pre-training
- 首先,输入数据是图像-文字对,然后图像传入Image Encoder,文本传入Text Encoder
步骤:
1)将一批大小为32768的图像和文本配对,分别通过文本编码器和图像编码器生成它们的向量表示。
2)训练过程中,通过在整个批次中搜索每个图像对应的最接近的文本表示,来最大化实际图像和文本对之间的余弦相似度。这意味着将实际图像与最相关的文本进行匹配。
3)同时,通过最小化实际图像与其他所有文本之间的余弦相似度,使得实际图像与其他文本区分开来。这样可以确保实际图像在向量空间中远离其他文本。
4)最后,通过对之前计算的相似度分数进行优化,使用对称交叉熵损失来训练模型。这个损失函数可以确保实际图像与其相关文本之间的相似度高,而与其他文本之间的相似度低。
(就是加强绿色部分,减弱橙色部分)
通过这个对比预训练阶段,CLIP算法能够学习到图像和文本之间的关联性,并生成能够将它们统一起来的向量表示。
图像编码器Image Encoder
两种架构:
1)ResNet50
2)Vision Transformer(ViT)
文本编辑器Text Encoder
文本编辑器和图像编辑器类似,都是基于transformer架构。
等训练好了,然后进入前向预测阶段。首先需要对文本类别进行一些处理,拿 ImageNet 数据集的 1000 个类别来说,原始的类别都是单词,而 CLIP 预训练时候的文本端出入的是个句子,这样一来为了统一就需要把单词构造成句子,怎么做呢?可以使用 A photo of a {object}. 的提示模板 (prompt template) 进行构造,比如对于 dog,就构造成 A photo of a dog.,然后再送入 Text Encoder 进行特征提取,就 ImageNet 而言就会得到一个 1000 维的特征向量,整个过程如下:
最后就是推理见证效果的时候,怎么做的呢。这个时候无论你来了张什么样的图片,只要扔给 Image Encoder 进行特征提取,会生成一个一维的图片特征向量,然后拿这个图片特征和 1000 个文本特征做余弦相似度对比,最相似的即为我们想要的那个结果,比如这里应该会得到 A photo of a dog.,整个过程如下:
- 因此CLIP可以完成一个文本到图像,或者是图像到图像的过程:
图像到图像可以看这篇:
使用OpenAI CLIP进行文本到图像和图像到图像的搜索 - 文章 - 开发者社区 - 火山引擎 (volcengine.com)