多模态信息抽取_CLIP模型

Title: Learning transferable visual models from natural language supervision

论文:https://arxiv.org/pdf/2103.00020

代码:https://github.com/OpenAI/CLIP

论文就不需要看了,全文 48 页基本也很难看完,感兴趣可以看李沐大神的 partner 讲解

https://www.bilibili.com/video/BV1SL4y1s7LQ/?spm_id_from=333.337.search-card.all.click

对于我们普通人来说,基本也复现不了

  • 全篇文章充斥着金钱的味道,几千 T 的存储,几千 GPU 年的算力;
  • 论文作者都不优化超参数,原文里说是不需要优化,实际是训练一轮几百万美金的花费;
  • 并且作者也是在前人的模型基础上修改优化,但是指出他们的训练数据不够大(他们没有钱)

1. 经典图像分类器

在训练模型检测图像是猫还是狗时,一种常见的方法是向模型提供猫和狗的图像,然后根据误差逐步调整模型,直到学会区分两者。

猫狗图像分类示例

这些模型仅在其训练的范围内表现良好。

2021 开年,顶着地表最强语言模型 GPT-3 的光环,OpenAI 在自然语言处理领域一路高歌猛进,推出两个跨越文本与图像次元的模型:DALL·E 和 CLIP。

CLIP 是一个预训练模型,就像 BERT、GPT、ViT 等预训练模型一样。首先使用大量无标签数据训练这些模型,然后训练好的模型就能实现,输入一段文本(或者一张图像),输出文本(图像)的向量表示。

CLIP 和 BERT、GPT、ViT 的区别在于,CLIP 是多模态的,包含图像处理以及文本处理两个方面的内容,而 BERT、GPT 是单模态的,ViT 是单模态图像的。

CLIP 多模态架构示意

因此 OpenAI 到网上爬了 4 亿个图像-文本对,构建了数据集 WIT(WebImageText)。WIT 数据集中的文本都是图像相关的 sentence,而不是 single-word,因此提供了足够的自然语言数据(光文本的存储就需要 100 个 T)。

2. CLIP 模型架构图详解

CLIP 模型架构总览

CLIP 全称是 Contrastive Language-Image Pre-training,根据字面意思,就是对比-图像预训练模型,只需要提供图像类别的文本描述,就能进行图像的分类。

该模型学习将图像和文本映射到同一个 Embedding 空间中,使得匹配的图和文 Embedding 彼此靠近,而不匹配的图和文 Embedding 彼此相距较远。这种学习预测事物是否属于同一类或不属于同一类的策略通常被称为"对比学习"(contrastive Learning)。

对比学习:图文嵌入空间映射

正负样本分布示意

对于一个包含了 N 个图像-文本对的 batch 而言,其中的正样本是每张图像及其对应的文本,一共有 N 个(正样本),而其他所有的图像-文本的组合都是不成对的,也就是负样本是 N × N - N 个。

如下图所示,CLIP 的主要结构是一个文本编码器 Text Encoder 和一个图像编码器 Image Encoder,然后计算文本向量和图像向量的相似度来预测他们是否是一对。

CLIP 文本与图像编码器结构

CLIP 是一种 High-Level 的框架,不局限于某个具体的网络结构,可以使用各种不同的子组件来实现相同的结果。

2.1. 文本编码器

CLIP 中的文本编码器将输入文本转换为表示文本含义的 Embedding 向量(数字列表)

文本编码器:将文本转为 Embedding 向量

  • CLIP 的效果对文本编码器不敏感

2.2. 图像编码器

图像编码器将图像转换为表示图像含义的 Embedding 向量(数字列表)

图像编码器:将图像转为 Embedding 向量

图像编码器有两种架构:

  • 使用 ResNet50 作为基础架构;
  • 使用 Vision Transformer(ViT) 进行实验;

2.3. CLIP 的训练样本

我们可以将这些 Embedding 视为将输入(图片或者文本)表示为高维空间中的某个点。

将这个二维空间视为多模态嵌入空间,并且我们可以训练 CLIP(通过训练图像和文本编码器)从而将这些点映射到图文彼此接近的位置。

多模态嵌入空间映射示意

  • 目标是期望对角线上的预测为正样本,其他位置预测为负样本

对比学习损失:正样本靠近、负样本远离

图文匹配相似度计算

  • 当图像和文本匹配的时候,他们的向量是相似的,否则他们就是不相似;

CLIP 训练对比矩阵

对比学习损失函数可视化

3. 基于对比学习的损失函数

3.1. 训练过程

  • 第一步,根据 Encoder 计算出文本和图片的 Embedding;
  • 第二步,计算任意图像和文本的相似度、文本和图像的相似度;
  • 第三步,已知对角线上的是正样本,其他位置是负样本,用交叉熵损失函数优化;

3.2. 文字描述

3.3. 训练代码

CLIP 这篇工作最大的贡献,是他打破了之前固定种类标签的范式,不论在你收集数据集的时候,还是在训练模型的时候,你都不需要像 imagenet 一样做 1000 类,或像 Coco 那样做 80 类,直接就搜集这种图像文本对就可以了,然后用无监督的方式,要么去预测它的相似性,要么去生成它。

4. CLIP 的使用

4.1. 图像分类任务

CLIP 图像分类任务流程

  • 用提示词增强扩充类别信息,OpenAI 搞了 80 个提示词模板;

CLIP 提示词模板示例

  • 获取文本的 embedding;

获取文本 Embedding

  • 获取图片的 embedding, 计算出最可能的类别;

计算图像 Embedding 并匹配类别

CLIP 分类结果对比

  1. 加载 CLIP 模型并进行图像分类:

CLIP 模型加载与推理流程

4.2. CLIP 的其他应用

CLIP 采用的训练策略允许我们做各种各样的事情:

  • 图像搜索
  • 特征抽取
  • 文本生成