CLIP微调方式

CLIP微调方式

CLIP 利用互联网上大量的图像文本对作为训练数据,利用文本作为监督信号,展现出了令人惊叹的视觉 zero-shot 分类能力。同时,CLIP 的视觉编码器也是一个很强的视觉 backbone,在很多视觉任务上都能取得不错的性能。然而,互联网数据数据虽然规模巨大,但是数据质量终归不如人工标注数据。CLIP 模型受到预训练数据噪声和数据分布的影响,有着很大的 bias。在很多下游应用任务中,zero-shot 并不是唯一的选择。收集少量特定下游任务的数据,在 CLIP 预训练的基础上进行微调,也是一种有效的方式。

本文调研了几种对 CLIP 进行微调的方式。不同于常规的视觉预训练方式(如在 ImageNet 1K 分类数据集上进行有监督预训练),文本塔的存在赋予了 CLIP 极强的灵活性。首先,像原文中的做法一样,CLIP 可以直接进行 zero shot 的图像分类,这在 CV 领域是极其少见的;其次,文本塔的存在使得我们也可以借鉴在 NLP 领域已经取得一些研究成果的 prompt engineering 的方式,来微调多模态模型。除此之外,最近流行的 Adapater 的方式也很适合 CLIP 模型,通过少量参数微调达到 SOTA 的性能。

CoOp

导言

Zeroshot 是 CLIP 最令人惊艳的能力,原文作者通过使用一些简单的文本 prompt(如 A photo of [CLASS])来构造分类器,就在 ImageNet 上得到了不错的结果。然而,prompt 的设计比较繁琐,我们不知道什么样的 prompt 是合适的。对于神经网络而言,可能 prompt 中微小的措辞变化,就会造成结果的巨大差异。而且,对于不同的任务,不同的数据,我们往往需要设计不同的 prompt。在 CLIP 原文中,作者为了适应 ImageNet 一个数据集中的数据分布,就设计了 80 个 prompt 模板。

CoOp(Context Optimization)的出发点是让模型自己学习构建 prompt。最终模型学习出的 prompt 可能对于人类来说是无意义的、不可读的,但是对于模型来说,在给定数据上确实可以得到更优的结果。这与语义空间的连续性有关。

观察图 1,我们可以发现不同的 prompt 在不同的数据集上确实会造成巨大的性能差异,而使用 CoOp,让模型自己学习 prompt,性能有显著的提升。

在这里插入图片描述

图1. 手工prompt engineering与CoOp对比

方法

CoOp 的方法框架如图 2 所示。在 CLIP 使用图像文本对进行对比学习预训练之后,常规的 zeroshot 方法是设计一些 prompt 模板,如 A photo of [CLASS],将类别名填入构造出文本,然后比较图像特征和各个类别文本特征的相似度,预测图像的类别。而 CoOp 则是在类别名前面加上一组可学习的 token [ V ] M [V]_M [V]M。然后前向传播计算出文本特征和图像特征,再根据标签计算交叉熵损失,反向传播,更新可学习 token [ V ] M [V]_M [V]M 的参数。

在这里插入图片描述

图2. CoOp方法框架

几点细节说明:

  1. 网络的其他部分都是固定的,只更新 prompt token [ V ] M [V]_M [V]M 的参数
  2. CoOp 有几种不同的变体,
    • 改变可学习 token 的个数
    • 将类别名加到 [ V ] M [V]_M [V]M 中间
    • 对不同的类别学习不同的 prompt token

实验

图 3 展示了 CoOp 在 11 个数据集上与 Linear Probe CLIP 的少样本对比实验。可以看到:

  1. 整体而言,CoOp 这种学习 prompt 的方式,相比于直接线性微调,在少样本时优势比较明显
  2. 不同的数据集(数据分布),对 prompt 的敏感程度差的比较大。如第三行第一列的 Food101,学习 prompt 的提升不大,但是线性微调还是有提升。
  3. 和 CLIP 原文中的结论一样,对于 CLIP 来说,很多时候给几个样本微调,还(远远)不如直接 zeroshot,比如 Food101 数据集。

在这里插入图片描述

图3. CoOp在11个数据集上与Linear Probe CLIP的少样本对比实验

消融实验的结果就不贴了,感兴趣可以直接去原文看。

表 1 展示了CoOp在不同数据集上学习到的prompt token在词表中最接近的词。可以看到,几乎没啥可解释性。

在这里插入图片描述

表1. CoOp在不同数据集上学习到的prompt token在词表中最接近的词

总结

以学习 prompt 的方式来进行少样本学习,性能提升的同时还能保持 CLIP 模型本身参数不动。挺有用的一篇工作,虽然这种 prompt 的方式在 NLP 中早就有了,但应用到多模态 CLIP 中还是有一些意义的。

CLIP Adapter

导言

本文通过在 CLIP 的文本编码器、图像编码器中插入 adapter 模块,对比 CoOp 实现了更优的微调性能。

方法

CLIP Adapter的架构及其与其他方式的对比如图 4 所示。一张图片经过 CNN / ViT 得到视觉特征 f f f ,即图中彩色的 embedding 条。

  • 朴素的分类器是直接学习一个分类器矩阵权重 W W W
  • CLIP 是人工设计一些 prompt,与类别名一起构建文本,并通过文本编码器提取出文本特征,多个类别的文本特征组成矩阵 W W W
  • CoOp 也是通过学习 prompt token 构造文本,得到文本特征,组成矩阵 W W W
  • 最下方的 CLIP-Adapter 则是通过在文本塔和视觉塔中插入一个可学习的 adapter,并将其得到特征与原特征残差相加,得到最终的输出特征。

在这里插入图片描述

图4. CLIP Adapter的架构及其与其他方式的对比

实验

主要结果和 CoOp 差不多,稍高一点。

TIP-Adapter

导言

Tip-Adapter 是 Training-free CLIP-Adapter 的简写,顾名思义,Tip-Adapter 可以做到在不学习任何参数的条件下,将 CLIP 适配到 few-shot 分类任务。Tip-Adapter 通过构建 key-value cache model 来将 few shot 样本的知识结合进来,再加上 CLIP 本身的图文相似度计算能力,完成下游分类任务。无需任何参数更新的 Tip-Adapter 就达到了与当时微调 SOTA 接近的性能。而 Tip-Adapter 再加上参数微调的版本 Tip-Adapter-F 则能取得更高的性能。

方法

给定一个训练好的 CLIP 模型和 N-way K-shot(N 个类,每类 K 个样本) 的 few-shot 分类任务训练集,目标是同时利用 CLIP 的图文相似度计算能力和 NK 个样本的特定知识来创建一个 N 类的分类器。Tip-Adapter 的方法框架如图 5 所示。

few shot训练集中有 NK 张图像,经过 CLIP 视觉编码器,得到视觉特征 F t r a i n ∈ R N K × C \bf{F}_{train}\in\mathbb{R}^{NK\times C} FtrainRNK×C ,其中 C 是视觉特征的维度。对 N 个类别取 OneHot 标签,得到 L t r a i n ∈ R N K × N \bf{L}_{train}\in\mathbb{R}^{NK\times N} LtrainRNK×N 。将 F t r a i n \bf{F}_{train} Ftrain 作为 keys,将 L t r a i n \bf{L}_{train} Ltrain 作为 values,我们就能够构建出 key-value cache model 了,这个 cache model 中包含了 few shot 训练集中的全部知识,与预训练的 CLIP 结合,进行下游分类任务。这个过程中没有任何的参数训练。

在测试时,给定一张测试图片,先用 CLIP 的视觉编码器得到其特征 f t e s t ∈ R 1 × C f_{test}\in\mathbb{R}^{1\times C} ftestR1×C ,分别经过 cache model 和 clip classifier,将得到的 logits 进行加权融合,得到最终的 logits,用于图像分类。最终的 logits 的计算公式为:
logits = α ⋅ exp ( − β ( 1 − f t e s t F t r a i n T ) L t r a i n + f t e s t W c T \text{logits}=\alpha\cdot\text{exp}(-\beta(1-f_{test}F_{train}^T)L_{train}+f_{test}W_c^T logits=αexp(β(1ftestFtrainT)Ltrain+ftestWcT
其中 α \alpha α 是权重系数, W c W_c Wc 是 CLIP 预训练的分类器(即 CLIP 原文中进行 zero-shot 分类的方式), exp ( − β ( 1 − f t e s t F t r a i n T ) L t r a i n \text{exp}(-\beta(1-f_{test}F_{train}^T)L_{train} exp(β(1ftestFtrainT)Ltrain 则是 cache model 的工作方式。其中 ( 1 − f t e s t F t r a i n T ) (1-f_{test}F_{train}^T) (1ftestFtrainT) 相当于计算测试图像的特征与 few shot 训练集各个图像特征的欧氏距离,取指数保证值全正, β \beta β 用于调制分布的锐度。这个过程相当于在 cache model 中检索出最相似的 value。

在这里插入图片描述

图5. Tip-Adapter的方法框架

实验

观察在10个数据集上的 few shot 分类实验结果,Tip-Adapter 不训练任何参数,在多个数据集上得到了与 CoOp、CLIP-Adapter 等微调方式接近的性能,甚至在某些数据集上更高。而加上参数微调的 Tip-Adapter-F 优于现有的 CLIP few shot 微调方法,达到 SOTA 性能。

在这里插入图片描述

图6. Tip-Adapter在10个数据集上的few shot分类性能

总结

cache model 的思路类似于 proto(原型) 的方法,在很多 few shot、meta learning 的方法(如 MAML、matching network 等)中早已经出现,Tip-Adapter 将其用于 CLIP few shot learning 中,再借鉴 CLIP-Adapter 中残差连接的方式,将 key-value cache model 中的 few-shot 样本知识与预训练 CLIP 中图文相似度计算的能力综合起来,取得了 CLIP few shot 微调的 SOTA 性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值