😁大家好,我是CuddleSabe,目前大四在读,深圳准入职算法工程师,研究主要方向为多模态(VQA、ImageCaptioning等),欢迎各位佬来讨论!
🍭我最近在有序地计划整理CV入门实战系列及NLP入门实战系列。在这两个专栏中,我将会带领大家一步步进行经典网络算法的实现,欢迎各位读者(da lao)订阅🍀
论文下载: https://arxiv.org/pdf/2203.07190.pdf
CLIP Models are Few-shot Learners: Empirical Studies on VQA and Visual Entailment
- Abstract(摘要)
- 1. Introduction(介绍)
- 2. Preliminaries(前置工作)
- 3. Zero-shot VQA(VQA的零样本学习)
- 4. Zero-shot Cross-modality Transfer(零样本跨模态迁移)
- 5. Few-shot Learning for VQA(VQA中的少量样本学习)
- 6. Experiments(实验)
- 7. Related Word(相关工作)
- 8. Conclusions(总结)
Abstract(摘要)
CLIP在很多视觉任务上展现了非凡的零样本学习能力。在一开始,CLIP仅被当成一个强力的视觉编码器。然而,在经过大量的“图片-字幕”的有监督数据集上预训练之后,CLIP已经获得了在多模态任务上的少样本学习能力。在本篇文章中,我们展现了CLIP强大的少样本学习能力。我们首先在标准的视觉问答任务上验证了CLIP的零样本学习能力然后展现了CLIP在视觉继承(visual entailment)任务上的跨模态零样本迁移能力。然后我们提出了一种微调策略来提升其在视觉问答任务的少样本学习能力。我们在没有添加任何额外的预训练流程的情况下使其在视觉问答及视觉继承(visual entailment)任务上获得了可观的零/少样本学习结果。
1. Introduction(介绍)
视觉问答及视觉继承(visual entailment)这种视觉语言理解(VLU)任务的目的是测试系统理解视觉及自然语言语义的能力。有不少工作去建立视觉-语言预训练模型从而去对齐视觉和语言两个模态。尽管他们的方法展现了良好的性能,但是仍不可避免去引入像目标检测或对其图片文字这种需要使用大量人类标注的数据集。建立这种数据集往往意味着要花费很多的精力,所以数据集规模一般相比NLP领域的预训练数据集的不在同一规模。
最近,CLIP的文章中提出利用在互联网上爬取的4亿对图片-文字对来从语言监督中学习视觉概念。CLIP由一个视觉编码器及一个文字编码器组成,并使用对比损失函数来实现视觉和文字对对齐。通过这种方法,CLIP在ImageNet上展现了强大的零样本学习能力。而且,后续有学者提出可以将CLIP作为一个强力的视觉编码器去提出下游多模态任务的性能。然而,在CLIP与先前的视觉编码器有两点主要不同:1)CLIP是在大量的有噪音数据上训练的;2)它在视觉与语言之间的交互很浅。上述第一点保证了CLIP的总结能力并且第二点使其获得了跨模态对齐能力。那么,CLIP在视觉语言理解任务上还能否有强大的零样本学习能力呢?
为了回答这个问题,在本篇文章中,我们研究了如何将CLIP的零样本学习能力迁移到VLU任务重并且将CLIP调整为少样本学习器。我们在VLU任务上进行了两个实验:1)视觉问答任务;2)视觉继承任务,即模型需要确定图像和自然句子之间的继承关系。下图图1展示了两个任务的形式。
成功将零样本学习能力迁移到零样本视觉问答任务的关键是减缓预训练任务与问答任务的差距。受最近NLP少样本学习的工作启发,我们通过提出一个两步自动生成提词策略,其包括自动将问题转变到带遮罩的模板与通过空白填充任务上预训练的T5模型来获得候选答案。
我们通过视觉继承任务探索了零样本跨模态迁移能力。具体,我们在训练时将图片替换为对应字幕并且只更新一个小的分类层。在推理阶段,我们使用正常的图像-文字对来进行测试。这使得我们可以知道在CLIP模型中视觉和语言对齐能力有多好。
我们进一步试着在零样本CLIP模型上添加少样本学习来提升CLIP在视觉问答任务上的性能。我们发现仅优化偏差及归一化参数(bias and normalization, BiNor)可以使其更好地利用有限的样本来获得比最近的少样本学习模型Frozen更好的性能。通过实验,我们确定了CLIP在视觉语言领域也能获得很好的少样本学习能力。
我们的贡献如下:
- 在我们的认知中,我们是第一个研究如何将CLIP的零样本学习能力迁移到视觉理解任务中去的并且我们确定了CLIP也具有很好的少样本学习能力。
- 我们展示了CLIP的零样本学习能力在跨模态上的迁移效果。
- 我们提出了一种微调策略,BiNor,来提升CLIP在视觉问答任务上的少样本学习能力。
2. Preliminaries(前置工作)
2.1 CLIP
CLIP(Contrastive Language-Image Pretraining)是从自然语言监督中学习视觉表征的模型。上图图2中展示了它的关键部分及其工作流程。它由视觉编码器(ResNet或ViT)及文字编码器(Transformer)组成。然后将两个编码器的输出进行内积来当作图片与文字的对齐分数。它的预训练任务是搭配对比损失来判断一堆随机组合的图像文字对是否是相符合的描述。CLIP可以不需要任何微调而直接应用于图片分类任务。然而,直接将CLIP作为视觉语言理解任务是比较困难的。
2.2 Vision-Language Understanding Tasks(多模态理解任务)
Visual question answering.
VQA任务需要模型根据输入图片的细节来回答问题。根据先前的工作,我们在VQAv2数据集上进行实验并将任务当作一个3129类的分类问题(频繁出现的答案)。VQAv2中的图片来自于微软COCO数据集,并且其包含了65种问题的格式,例如"how many"和"what color is"。对于答案,则有三种形式,分别是“yes/no”、“number"和"other”。
Visual entailment.
与自然语言推理(NLI)类似,视觉继承任务是预测前提(premise)与假设(hypothesis)之间的继承关系(包含entailment、neutral和contradiction)。在视觉推理的情况下,视觉继承任务中的前提(premise)是通过图片细节建立的,而不是像NLI中建立在文本描述上。SNLI-VE数据集是通过将SNLLI数据集中的前提(premise)替换为Flickr30k数据集中的图片而形成的。综上考虑,我们使用SNLI-VE数据集来验证CLIP模型对于零样本学习的迁移能力。通过测试零样本学习,我们可以知道CLIP对视觉及语言特征的对齐能力。
3. Zero-shot VQA(VQA的零样本学习)
3.1 A Two-Step Prompt Generation Method(两步提词生成方法)
在先前的工作中,有学者指出直接将CLIP模型应用到多模态任务做零样本学习是不现实的。例如,如果直接将问题和答案组合起来送入模型在VQAv2数据集上训练,得到的结果几乎是随机的。在重新思考CLIP中模板的本质后,我们可以发现成功将零样本学习能力迁移到VQA任务的关键是弥补语言描述和问题答案的形式上的差别。
由上述分析结果启发,我们提出了一个搭配预训练生成模型T5的两步自动生成提词的方法来使得CLIP可以在VQA任务实现零样本学习。这个方法的关键部分在下图图3中进行展示:第一步将问题转换为带蒙版的模板
T
\mathcal{T}
T,第二步是通过语言模型过滤掉不可能的答案来获得候选答案集
V
F
\mathcal{V}_{F}
VF。填充的模板将问题与答案使用一种自然描述的方式连接在一起从而可以将其应用到VQA任务。
Step I: Automatic Template Generation
这一步用来将问题转换为带蒙版的模板。我们这里提出两种方法,一种是“in-context demonstration”方法,另一种是基于“dependency parsing”的方法。
Demonstraion to T5.
这个方法非常简单:通过向T5模型展示问题到模板(带蒙版)的例子,模型就可以间接捕获转换模式。我们对每一个问题定义一些例子然后将问题转换为对应的模板形式。上图图3中展示了转换的例子。T5模型是一个大型文本对文本的预训练Transformer模型。其通过填充一句话中缺失的span来预训练(缺失部分用<extra_id_0>这种特殊标记来指代)。我们将例子、问题与<extra_id_0>进行拼接后送进T5模型来生成模板,生成的模板叫做 T d e m o \mathcal{T}_{demo} Tdemo。
Dependency parsing.
尽管T5模型在大部分情况下都能获得很好的表现,然而它仍然会遇到超出覆盖问题。为了弥补这个不足,我们转而使用一个传统的基于“dependency parsing”的方法。这个方法通过分析它的词性和语法分析(wh-word、root word、auxiliary和copula)以及语法规则来将问题转变为模板。我们使用Stanza来进行POS打标签并且将问题进行语法分析然后空出答案作为蒙版。我们称这个方法生成的模板为 T p a r s i n g \mathcal{T}_{parsing} Tparsing。
Step II: Answer Filtering
作为常识,“the specie of a flower”的答案不可能是花瓶。所以,将不可能的答案过滤掉能对我们在VQA任务上的性能进行提升。给定一个带蒙版的模板
T
\mathcal{T}
T、语言模型
L
\mathcal{L}
L和答案集合
V
\mathcal{V}
V,我们可以通过如下公式对答案进行过滤,过滤后答案
V
F
\mathcal{V}_{F}
VF为:
T
o
p
−
k
v
∈
V
{
log
P
L
(
[
m
a
s
k
]
=
v
∣
T
)
}
\mathop{Top-k}\limits_{v\in\mathcal{V}}\left\{{\log{P_{\mathcal{L}}([mask]=v|\mathcal{T})}}\right\}
v∈VTop−k{logPL([mask]=v∣T)}
其中[mask]是模板
T
\mathcal{T}
T中的答案span。
P
L
P_{\mathcal{L}}
PL是语言模型输出的分布。这里我们使用T5模型来填充答案。在我们获得模板
T
\mathcal{T}
T与过滤后答案
V
F
\mathcal{V}_{F}
VF后,我们依次将模板中的[mask]替换为候选答案集中的单词来生成提词
P
\mathcal{P}
P。
3.2 TAP-C Method for VQA(应用于VQA的TAP-C方法)
我们提出的方法称之为TAP-C。为了更好的利用
T
d
e
m
o
\mathcal{T}_{demo}
Tdemo和
T
p
a
r
s
i
n
g
\mathcal{T}_{parsing}
Tparsing,我们简单的设置一个T5生成分布的阈值来对两种模板进行集成。如果生成置信度很低,我们更推荐使用
T
d
e
m
o
\mathcal{T}_{demo}
Tdemo而不是
T
p
a
r
s
i
n
g
\mathcal{T}_{parsing}
Tparsing。最终,给定图片
i
i
i和生成的模板
P
\mathcal{P}
P,TAP-C能通过以下公式获得零样本学习的VQA预测:
m
a
x
v
∈
V
F
,
p
v
∈
P
{
V
(
i
)
.
T
(
p
v
)
}
\mathop{max}\limits_{v\in\mathcal{V}_{F},p_v\in\mathcal{P}}\left\{{\mathbb{V}(i).\mathbb{T}(p_v)}\right\}
v∈VF,pv∈Pmax{V(i).T(pv)}
其中
V
\mathbb{V}
V和
T
\mathbb{T}
T分别代表CLIP中的视觉编码器和文字编码器。
p
v
p_v
pv是TAP-C方法生成的模板,并使用答案集
V
F
\mathcal{V}_F
VF 中的答案
v
v
v替换模板中的蒙版。
4. Zero-shot Cross-modality Transfer(零样本跨模态迁移)
最近的多语言预训练模型成功展现了在不同语言间的表征能力的迁移性。例如,只需在源语言微调而不需要使用目标语言进行训练便可以进行翻译任务,并且获得了良好的性能。另一方面,CLIP模型在图像到文字及文字到图像展现了强大的零样本学习能力(仅使用两个模态间的内积)。那么,CLIP是否在语言和视觉模态也具有多语言那样的跨模态能力呢?
为了回答这个问题,我们利用了视觉继承任务(2.2小节)来探索它的零样本跨模态能力。上图图4简述了关键想法。具体的,我们将前提和假设的特征进行融合,从而训练一个MLP分类器,融合特征如下:
f
u
s
e
(
v
1
,
v
2
)
=
[
v
1
,
v
2
,
v
1
+
v
2
,
v
1
−
v
2
,
v
1.
v
2
]
fuse(v_1,v_2)=[v_1,v2,v1+v2,v1-v2,v1.v2]
fuse(v1,v2)=[v1,v2,v1+v2,v1−v2,v1.v2]
在训练阶段,将文本前提和假设作为CLIP文本编码器的输出:
M
L
P
{
f
u
s
e
(
T
(
p
r
e
t
)
)
,
T
(
h
y
p
t
)
}
MLP\left\{{fuse(\mathbb{T}({pre}_t)), \mathbb{T}({hyp}_t)}\right\}
MLP{fuse(T(pret)),T(hypt)}
在推理阶段,前提变成图片形式并且送入CLIP图像编码器。训练过后的MLP用来预测答案:
m
a
x
{
M
L
P
{
f
u
s
e
(
V
(
p
r
e
i
)
)
,
T
(
h
y
p
t
)
}
}
max\left\{{MLP\left\{{fuse(\mathbb{V}({pre}_i)), \mathbb{T}({hyp}_t)}\right\}}\right\}
max{MLP{fuse(V(prei)),T(hypt)}}
5. Few-shot Learning for VQA(VQA中的少量样本学习)
在这一节中,我们在视觉问答任务上研究了如何通过少样本学习来提升CLIP的表现。
5.1 Setup of Few-shot VQA(设置)
这里我们简要定义在VQA任务的少样本学习中的术语:
- Number of ways. 原本,它的含义是一个任务中的类别。然而,相比于根据答案字典定义的3129-way任务,我们通过问题种类和答案种类来定义为65x3=195ways,来确定模型对美中问题所能回答答案的总结能力。
- Number of shots. 每种way对样本个数。这里一个shot是指对特定问题和答案的一张图像。
- Support set and query set. 在训练前,我们从VQAv2的训练集中采样了一个195-way K-shot子集。所以共有195xK个样本用于少样本训练。在训练的每个epoch,我们在195ways中挑选出来 C C Cways用来参数优化并且在每个way中按照一定比例将 k k k个shot分为support集和query集。support集用来模型训练,query集用来模型验证。
5.2 Parameter-efficient Fine-tuning(微调)
通过进行少样本学习的设置,我们的目标是通过少样本学习来提升CLIP用作视觉问答的零样本学习能力。具体的,我们通过非常小的训练集来训练
b
i
a
s
bias
bias和
n
o
r
m
a
l
i
z
a
t
i
o
n
normalization
normalization参数。对于ResNet中的BatchNorm或Transformer中的LayerNorm,归一化公式如下:
y
=
x
−
E
(
x
)
V
a
r
(
x
)
+
ϵ
.
γ
+
β
y=\frac{x-E(x)}{\sqrt{Var(x)+\epsilon}}.\gamma+\beta
y=Var(x)+ϵx−E(x).γ+β
γ
\gamma
γ和
β
\beta
β是可学习参数。对于CLIP中的所有线性层和投影层,可以表示如下:
o
=
w
.
h
+
b
i
a
s
o=w.h+bias
o=w.h+bias
其中
h
h
h和
o
o
o分别是输入向量和输出向量。我们方法的所有可学习参数如下:
P
l
e
a
r
n
=
{
b
i
a
s
,
γ
,
β
}
P_{learn}=\left\{{bias,\gamma,\beta}\right\}
Plearn={bias,γ,β}
以上方法称为BiNor,通过对图像提词对使用交叉上损失函数来进行少样本学习。
同时,我们也可以引入3.1中讲述的答案过滤器:
T
o
p
−
k
v
∈
V
{
log
P
L
(
[
m
a
s
k
]
=
v
∣
[
D
,
T
]
)
}
\mathop{Top-k}\limits_{v\in\mathcal{V}}\left\{{\log{P_{\mathcal{L}}([mask]=v|[\mathcal{D},\mathcal{T}])}}\right\}
v∈VTop−k{logPL([mask]=v∣[D,T])}
D
\mathcal{D}
D代表了模版示范。
6. Experiments(实验)
6.1 Experimental Settings(实验设置)
Datasets.
对于视觉问答任务和视觉继承任务,我们继续在VQAv2数据集和SNLI-VE数据集上进行实验。对于VQA任务,我们与Frozen模型一样在VQAv2验证集上计算vqa score。对于视觉继承任务,我们通过sklearn工具计算验证集和测试集的正确率。
CLIP models.
CLIP模型使用不同的视觉编码器(ResNet或ViT)会导致重要的参数(bias和normalization)是不同的。我们在两种编码器中选择两个表现最好的模型(CLIP Res50x16和CLIP ViT-B/16),通过应用迁移方法来研究它们的零/少样本多模态理解能力。
6.2 Results of Zero-shot VQA(VQA的零样本效果展示)
之前的多模态模型严重依赖于物体检测或子模块,这使得它们无法直接应用在零样本学习中。这里我们使用以下两个工作作为多模态零样本学习的基准模型:
- Fronzen. Frozen是一个带有图像表征的32层语言模型。它在对齐的image-caption数据集上进行训练并且是第一个指出可以在VQA任务上应用零样本学习和少样本学习的模型。
- Question irrelevant prompt. 某篇文章直接将CLIP模型应用到VQA任务重。他们使用了如下模板:“question: [question text] answer:[answer text]”。他们这种格式的提词是与问题无关的,所以这里我们统称这种方法为QIP(question irrelevant prompt)。
我们在如上表1中报告了VQA的零样本学习能力,实验结果证实了我们在3.1小节中关于“CLIP模型的提词应该用来描述标签而不是任务”的假设。我们可以看到,QIP方法的结果仅仅比随机猜测的结果好一点。作为对比,我们的TAP-C方法可以使模型在VQA任务获得很好的零样本学习能力。
6.3 Zero-shot Cross-modality Transfer(零样本跨模态迁移)
上表表2展示了各模型的零样本跨模态迁移能力。像在第4小节介绍那样,在训练阶段我们仅通过SNLI-VE数据集的文本数据(将图片替换为它的字幕)来训练一个分类器。在推理阶段,通过将图像和文本作为输入来验证模型。如在结果中的第一组所示,在text-text数据进行训练,各种CLIP变种模型可以成功在图像-文本输入下也可以获得相同的能力。为了确保上述模型真正学习到了文本到图像的迁移能力,我们在推理阶段将图像进行mask来进行二次验证。我们可以看到,结果和随机猜测差不多,这表明图像在跨模态验证中起到非常重要的作用。
现在我们观察语言对于CLIP模型的跨模态迁移能力。我们通过在原始SNLI-VE数据集(图像前提和文字假设)上训练一个分类器来进行相同的实验。在推理阶段,我们在验证集和测试集上使用纯文本数据进行验证,结果如表2中所示。现在纯文本数据比视觉数据的获得代价低很多,第一种迁移更多的目的是进行实验。
6.4 Results of Few-shot VQA(VQA的少量样本效果展示)
我们在上表表3中展示了VQA任务中少样本学习能力。我们将
F
r
o
z
e
n
Frozen
Frozen模型和
F
r
o
z
e
n
b
l
i
n
d
Frozen_{blind}
Frozenblind作为基准对比。在不同的
k
k
k下,我们的方法都可以从有限的样本中进行学习从而与零样本学习能力的结果有提升,这让我们确认CLIP是优秀的跨模态少样本学习器。随着shot数量的提升,other类别问题的表现显著提升,这符合我们的直觉:如果我们在每一个问题类别中采样,other类别的问题没法透露给模型。这导致模型总是可以随着学习来提升。同样的,随着送给T5模型的样本数量提升,答案过滤器也可以被优化来显著使other类问题的性能提升。作为对比,number问题的分数随着
k
k
k的缓慢增大而显著提升。
6.5 Analyses and Discussion(分析与讨论)
The effects of template generation methods.
我们的TAP-C方法使用语法依赖的模板结果
T
p
a
r
s
i
n
g
\mathcal{T}_{parsing}
Tparsing和T5模型生成的模板
T
d
e
m
o
\mathcal{T}_{demo}
Tdemo的集成。这里我们探究了是否有必要进行这样一个集成。我们在如下表4展示了这两种模板的消融实验。结果说明两种模板在不同问题上起到不同的作用,且集成可以发挥它们最大的作用。
The effects of two steps in TAP-C.
TAP-C方法基于两步生成方法(t.gen.)和答案过滤(a.flit.)。这里我们衡量它们对零/少样本学习的贡献有多少。如下表表5所示我们进行了消融实验。当我们移除答案过滤时,零样本学习和少样本学习的性能都下降了约20%,但是模型仍保留了少样本学习能力。我们进一步移除模板生成步骤仅使用QIP:结果性能几乎下降了一半,这表明了无论对于零样本还是少样本,问题都是十分重要的。
Comparisons of fine-tuning methods.
我们在少样本学习时仅更新了偏差和归一化参数(bias和normalization)。为了证明我们的BiNor训练策略是较好的,我们将BiNor与两种微调策略进行比较:
- Full-FT(全微调),我们更新模型的所有参数。
- BitFit,我们仅更新每个层的偏差。
我们在下表表6进行结果对比发现BiNor和BitFit都相对于全微调策略的结果有显著提升:太多的参数很容易过拟合。当 k k k较小时,BiNor和BitFit之间的差距非常小。随着 k k k变大,BiNor开始拉开与BitFit之间的差距。我们的BiNor微调策略与BitFit很像但是我们也更新归一化参数,这使得ResNet CLIP模型在接受新样本时可以因为它的batch归一化参数而变得更灵活。
Limitations of TAP-C.
我们提出的TAP-C方法拓展了CLIP在VQA任务在零/少样本学习方向的潜能。然而,我们也发现了几点不足。首先,CLIP模型对于细粒度的数量识别很不在行,尤其是在一个小区域里面。这个缺点很难通过一种语言方法去改善。同时,CLIP模型很难捕捉到细小的语义差别。比如,当我们询问“what is the man in the background doing?”,几乎CLIP模型在任何时候都会给出预测答案“in the foreground”。在这种情况下,即使TAP-C方法可以完美将问题转换为一个模板,模型最终的结果也并不是很好。然而,我们相信通过给CLIP模型一个强大的文本编码器,这个问题会被很好的解决,并且我们将会在未来的工作中继续探索。
7. Related Word(相关工作)
Vision-language few-shot learning.
通过引入对齐的字幕数据,可以通过图像-文本损失函数及图像分类和跨模态下游任务的强大的零样本总结能力来获得视觉-语言预训练模型。Frozen是最先在视觉-语言领域应用的少样本学习模型。
Language model prompting.
我们的工作也收到了语言模型提词的启发。从最开始的GPT系列,提词开始变成了一种在零/少样本领域流行的处理方式。PET网络提出了一种半监督的提词方法来提升少样本的语言理解任务。
8. Conclusions(总结)
在这篇文章中,我们研究了如何将CLIP模型应用到视觉-语言理解任务。我们首先利用提词法探究了CLIP的零样本VQA能力。然后我们提出了一种微调策略来提升其在少样本VQA的性能。我们也在视觉继承任务上展现了CLIP的跨模态迁移能力。整个实验在VQAv2及SNLI-VE数据集上完成来确保CLIP是一个优秀的少样本学习器。