Crd233's Notebook
Home
Courses
Languages
Math
CG
CV
AI
Reading
其它
— order: 17 —
1
Learning Transferable Visual Models From Natural
Language Supervision
●
时间:
2021.2
1.1
标题
&
摘要
&
引言
●
Learning
Transferable
Visual Models From Natural Language
Supervision
,利用自然语言监督的信号来训练一个可迁移的视觉文本
多模态模型
●
zero shot
:
能够在没有任何训练样本的情况下
(
no fine-tuning)
进行迁移学习,即
transferable
○
多模态特征适合
zero shot
迁移
●
模型名字叫
CLIP: Contrastive Language-Image Pre-Training
●
CV
领域使用有标注的数据仍有诸多限制,而
NLP
领域已经常用无监督学习。
CLIP
使用大规模的无监督信号(图像和文本的匹配,近
乎无需标注)训练
●
输入是文字和图片的配对,各自通过一个
encoder
得到特征,然后做对比学习(只需要有正样本和负样本的定义即可,配对的样本是
正样本,即
矩阵中对角线
是正样本)
●
正常的
CLIP
是没有分类头的,因此要额外进行
prompt template
,
即将类别转成一个句子(例如
This is a <class>
)然后抽取文本特
征,图片抽取特征,然后计算相似度
●
在预测的时候,把图像进行编码,然后对预先定义的类别进行编码,计算相似度并取最大的类别作为预测结果
1.2
方法
●
数据集:
WIT
(
WebImage Text
)
●
论文的想法实际上并不新,但是之前的工作说法混淆、规模不够大、
NLP
模型不够好,当
Transformer
解决
NLP
大一统问题之后容易
获得语义特征了
○
CLIP
是
ConVIRT
的简化版本,但是在数据和模型大小上大大提高了
●
之前的预训练工作在
ImageNet1K
上就需要数十个
GPU/TPU
年的训练时间,而
OpenAI
注重效率,所以选择对比学习。而其他
OpenAI
工作都基于
GPT
,
仅有
CLIP
基于对比学习
○
一开始采用类似
VirTex
,
图像
CNN
文本
Transformer
,
给定图片预测其对应文本。但是图片的描述有很多可能,所以预训练非常慢
○
当把预测型任务换成对比型任务,判断图片与文本是否是配对就比较简单(生成式变判别式),效率提高
4
倍
●
作者没有使用非线性投影层(之前的对比学习中提升了近
1
0
个点)因为作者发现多模态中提升不大,只做了随机裁剪的数据增强
●
伪代码
1.
抽取特征
2.
点乘一个
𝑊
,这个投影是为了将单模态信息转成多模态信息,然后归一化
○
在多模态里是非常常见的做法,
fusion
学习一个
joint representation space
(
投影到同一个语义空间)
3.
算相似度
4.
算
loss
,
正样本是对角线上,对称式的
loss
函数
●
关于大模型训练,参考:
How to Train Really Large Models on Many GPUs? | Lil’Log
1.3
实验
●
之前的自监督无监督学习到一个特征之后,还需要对下游任务做有监督的微调
●
prompt engineering and ensembling
○
为什么要
prompt
:
比如
ImageNet
中有两个类
construction crane
(
起重机)和
crane
(
鹤),文本多义性可能导致问题;另外输入
输出要尽可能保持一致,避免
distribution gap
○
作者使用
prompt template
,
类似
A phot of {label}
,还可以加一些例如
A photo of {label}, a type of pet
○
ensemble
,
用多种提示模板,
CLIP
共使用了
8
0
个模板
●
大规模迁移学习结果:
○
这里
Linear Probe
表示将前面的模型
freeze
掉只从中抽特征,然后训练一个
FC
来做分类任务。普通物体
zero shot
任务比较好,
但是比较难的任务(
DTD
纹理分类,
CLEVRCounts
物体计数)效果一般
○
Few Shot
的结果:其中
BiT
为
Big Transfer
,
本身就是谷歌为了迁移学习设计的
○
所有数据:略
●
和人类对比的实验,图一乐
●
去重实验,证明泛化性强
1.4
讨论
&
局限性
●
目前和基线模型水平相近,但和
SOTA
水平还有差距,同时扩大
CLIP
规模也很难实现
SOTA
●
在某些细分类任务或抽象概念效果很差,不知道什么是异常什么是安全
●
虽然
zero shot
在某些数据集还可以,但是如果推理和训练的数据差的太远,还是不行的,
out-of-distribution
(
例如
MNIST
,
原因是
4
亿数据集中都是自然图片,没有合成数字图片)
●
CLIP
需要给一个类别来判断,不能做到图片加
caption
这种生成。之后可能会把对比式和生成式的目标函数合在一起
●
CLIP
对数据利用效率不高;另外数据是从网上爬的,没有被清洗过,存在偏见和可能的不当使用
●
CLIP
存在用
ImageNet test
训练的问题,
2
7
个数据集也用到了,最好有一个专门的用来
zero-shot
的数据集
●
复杂的任务或概念不能用语言描述,所以做下游任务泛化的时候能提供一些训练样本
(
Few-Shot)
也是有必要的,但是
CLIP
的提出不是
为了
Few-Shot
,
所以会有提供一些训练样本还不如
zero-shot
的情况,和人不太一样
1.5
总结
●
文本经过
Encoder
得到文本特征,图像经过
Encoder
得到图像特征,然后进行文本图像对的对比学习
●
做分类任务的时候:将类别通过
prompt template
通过文本编码器形成很多
query
,
然后图像通过图像编码器得到一个图像特征,然后
相当于依次问
query
,
得到图像特征和文本特征之间的相似度
2
CLIP
改进工作(串讲)
2.1
分割
●
图像分割本质上和分类很像,只是把分类的粒度变成了像素级别。这就导致每当分类有了什么突破,分割领域马上就能有所跟进,
CLIP
也不例外
●
CLIP
出来以后,大家要么是用一下
CLIP
预训练的参数做一些简单的改动把它和下游任务结合起来
(
LSeg)
;
要么是利用
CLIP
目标函
数
(
GroupViT)
,
或者它的其它特性
2.1.1
Language-Driven Semantic Segmentation(LSeg)
●
模型总览图
○
跟
CLIP
有点像但其实不是
zero-shot
,
本质上还是在传统的有监督训练中引入了文本那一支信息。它终究不是无监督学习,目标函
数也不是对比学习
○
跟
CLIP
的区别主要是说,图像这边输入是一张图片,抽取的特征是一个
dense feature
而不是
CLIP
那种一张图一个向量
○
图像这边经过一个
encoder(DPT: ViT + Transformer)
,
得到
̃
𝐻
×
̃
𝑊
×
𝐶
的特征;文本那边经过
encoder
得到
𝑁
×
𝐶
的特征。两边
一乘就得到
̃
𝐻
×
̃
𝑊
×
𝑁
,也就是回到了传统有监督分割的领域
■
text encoder
用的就是纯
CLIP
冻结参数,
image encoder
可以也这样做但效果不如自己整一个(基于实验科学)
○
然后最后还多了一个
spacial regularization block
来多学习一点(其实不是很重要,随便一个
MLP
就可以)
●
实验的话,把
PASCAL, COCO
等数据集均分,在其中一份上训练然后
zero-shot
到其它份。结果来看,比以往的
zero-shot
或
few-
shot
都好不少,但比监督训练(
ResNet
,
非
large model
)
还是差了不少
2.1.2
Semantic Segmentation Emerges from Text Supervision(GroupViT)
●
介绍
○
Grouping
是
CV
分割方面已有的一个技术,利用区域生长的思想(自下而上地从聚类中心开始发散)
○
GroupViT
在已有
ViT
的框架中加入
group blocks
和可学习的
group tokens
●
训练
○
首先依旧是把图像分成
patch
,
然后把
patch embedding
送到
Transformer
里面,但是要加上
group tokens
■
group tokens
可以理解成之前的
cls token
,
但之前是想学到每个图片一个特征,现在是多个特征用来分割,把那些语义相似的点
归结到这
6
4
个
clusters
里面。
○
经过一系列
Transformer Layers
互相学习之后,
group tokens
学得差不多了。然后用
group blocks
把图像
patch embedding
给
assign
到
group tokens
里去(相当于合并为更大的
group
,
同时也是一种减小序列复杂度)
○
用类似
attention
的机制算一个相似度,然后用
gumbel softmax
完成可导(
argmax
不可导)的聚类分配,实现降维和合并
○
这些新的
tokens
就看做之前的
patch embedding tokens
,
再加入一些
group tokens
来重复以上过程,得到
8
个大的
group tokens
○
(为了跟
CLIP
对齐)这学到的
8
大块特征做一个
avg pooling
(
相当于
8
个类别物体特征融合来表征这一张图片)再
MLP
一下,然
后这张图对应的文本那边跟
CLIP
一样
encoder
得到一个特征,然后后续就跟
CLIP
一样做
contrastive learning
●
推理
○
然后是如何做
zero-shot
推理,图像经过左边的编码器得到
8
个类别特征,右边各种
class
经过
prompt
和
text encoder
得到文本特
征,算相似度
○
另外,为了区分出背景类,需要设置一个阈值,低于这个值就认为是背景,这个值比较讲究,低了可能会导致错误分类,高了会导
致全是背景类
○
感觉这边训练和推理不是很一致?另外不是很懂分割领域里面最后
group
究竟是怎么还原回原图的
■
(?)
group token
对应回图像靠的就是把
gumbel_softmax
再变成
argmax
,
这样就知道某个
group token
具体对应哪些像素了
●
结果
○
可视化:
stage 1
的分割比较小(眼睛、四肢),
stage 2
的分割就大了一点(草地、狗)。
○
数值上比较,比之前的自监督方法高了不少,但跟有监督方法还是差了不少(
30
个点),不过这毕竟是首个将文本信号应用在自监
督分割分割的第一个工作
●
目前的局限性
1.
更多是一个图像
encoder
,
没有很好地利用
dense prediction
的特性
○
Dilated Convolution, pyramid pooling, U-Net
等,获得更多的上下文信息和多尺度信息
2.
另一个就是分类阈值的问题难以界定,以及(实验证实)模型其实分割对了,但是分类错了(这个主要怪
CLIP
只能学到明确的物
体信息,对模糊的代表很多很多类的背景学得不太好)
○
改进思路,根据每个类各自设置阈值,阈值可学习,调整
zero-shot
推理过程,训练中加入背景概念的约束等
2.2
目标检测
2.2.1
Open-vocabulary Object Detection via Vision and Language Knowledge
Distillation(ViLD)
●
时间:
2021.4
●
目标检测一般要比分类分割复杂一些,但丝毫不影响这篇文章出来的速度(两个月做大规模实验
+
投稿,太卷了)
●
看到标题就知道是把
CLIP
当做
teacher
进行蒸馏的工作
●
这篇文章的引言非常好,上来就是一张图,展示模型能力的同时根据这张图问出论文想要解决的问题:
open-vocabulary
的目标检测
●
模型总览图
○
这篇论文有点把锚框的提出和分类解耦的意思,图里都只画了第二阶段,即
proposal
拿到之后再开始做
●
方法部分,分别为
vanilla detector
作为
baseline
,
然后
ViLD-text
和
ViLD-image
,
两支合在一起得到
ViLD
,
最后还有
ViLD-
ensemble
1.
baseline
其实就是一个
maskRCNN
,
为两阶段分类器,第一阶段提出
N
个
region proposal
,
过一个
detection head
得到
region
embedding
,
过
classifier
得到分类
2.
ViLD-text
,和
CLIP
的思路差不多,都是图像文本分别抽特征算相似度。图像这边跟
baseline
相比,就只多了
projection layer
和
L2-norm
,
得到
region embedding
;
图像那边用冻结的
CLIP text-encoder
得到
embedding
,
concatenate
上可学习的背景类
embedding
。
两边特征做点乘得到相似度,与
ground truth
有监督地算
cross entropy loss
。
目前为止都是
classify base(CB)
,
对于
不在基础类中的物体都塞给背景
○
那如何拓展到
classify novel(CN)
呢?于是提出了
ViLD-image
。
主要思路是说,
CLIP
那边的图像和文本
encoder
都做得很好,那
我这边既然用了
text-encoder
,
那图像
encoder
得到的
embedding
跟
CLIP
尽可能一致就好了,于是引出知识蒸馏
3.
ViLD-image
,具体而言,就是把
region proposal
经过裁剪和变换
送入作为
teacher
的
CLIP-image
,
预测结果替换
ground truth
做一个
L1-loss
。
现在预测不再局限于
CB
,
而是
CB+CN
○
另外有点怀疑这篇文章就是蒸馏了一下
CLIP
,
然后包装了个比较好的运用结果而已
……
○
为了让训练更快,避免
region proposal
反复前向
CLIP image-encoder
造成极大计算负担,
image embedding
其实是预先
RPN
得到、裁剪变换并前向算完的,蒸馏的时候只需要从硬盘
load
○
ViLD
,最后把
ViLD-text
和
ViLD-iamge
合并,相当于在训练的时候有两个目标函数(测试的时候右边
image
那一支是丢掉的)
●
最后
ViLD
模型的汇总图
●
实验结果
○
在
LVIS
数据集上实验(一个基于
COCO
的长尾数据集),把其中的
𝐴
𝑃
𝑐
,
𝐴
𝑃
𝑓
(
𝐴
𝑃
是目标检测常用指标,为
“
准确率
-
召回率
”
曲线
下方的面积)
作为
CB
来训练,把只见过一两次的记作
𝐴
𝑃
𝑟
,看作
zero-shot
推理
○
表格显示,用
ResNet-50
作为
backbone
,
Supervised + RFS(repeated factor sampling)
作为
baseline
只有
1
2
.
3
%
,
ViLD
可以达到
1
6
.
1
%
■
但其实这是可以理解的,因为
baseline
即使重采样了,它也没见过几次新类别,没怎么发挥
Supervised
效果,而
ViLD
仅比它
好一点,略微有些取巧。从总的
𝐴
𝑃
来看,
ViLD
比
baseline
还弱一点
■
不过,换用更强的
backbone
以后,它的效果变得更强,仅比
2020
性能冠军弱一点,还是有实力的
○
另外作为
zero-shot
的模型,肯定是可以直接用到其它数据集上的,于是就用到
PASAL, VOC 2007, COCO, Objects365
上,结果
显示跟这些数据集上
Supervised
模型比还是有一定差距
●
评价
○
ViLD
是第一个在
LVIS
这么难的数据集上做
open-vocabulary
的目标检测的工作,还是有里程碑意义的
○
它使用了
CLIP
的预训练参数,借鉴
CLIP
的一些思想,得到了不错的效果
2.2.2
Grounded Language Image Pre-training(GLIP)
●
时间:
2021.12
●
对标分割领域的
Group-ViT
,
目标检测这边的
GLIP
,
名字上跟
CLIP
相比只是把
contrast
换成
grounded
●
研究动机
○
跟分割一样,精心标注的数据很贵,希望用一个巨大的预训练模型处理
open-vocabulary case
,
所以希望像
CLIP
一样利用图像文
本对
○
Vision Language
里有一类下游任务是给一段话把图像里对应物体圈出来,这种
phrase grounding
任务和
object detection
结合,同
时如果再加入伪标签那一系列
self-training
的方法,就能大大扩大数据集了
●
loss
处理
○
目标检测这边的
loss
一般是
ℒ
=
ℒ
cls
+
ℒ
loc
,后者其实大家都差不多,主要根据模型和锚框生成方式决定;但是分类
loss
就不一
样了,而且对于这里
object detection
(
label
是一个
one-hot
单词)
和
visual grounding
(
label
是一个句子)的处理是不一样的,
我们需要把它统一到一个框架里
○
object detection
这边相对简单,
𝑂
∈
ℝ
𝑁
×
𝑑
,
𝑊
∈
ℝ
𝑐
×
𝑑
,
𝑆
cls
∈
ℝ
𝑁
×
𝑐
,
𝑇
∈
{
0
,
1
}
𝑁
×
𝑐
,分别为
region embedding, classifier weight,
ground truth
𝑂
=
Enc
𝐼
(
Img
)
,
𝑆
cls
=
𝑂
𝑊
𝑇
,
ℒ
cls
=
loss
(
𝑆
cls
;
𝑇
)
■
图像先经过图像
encoder
得到目标
/
区域特征
𝑂
,然后经过一个分类头(也就是乘权重矩阵
𝑊
),得到输出类别的
logits
,
然后计
算与真实类别的
cross entropy loss
○
visual grounding
这边相对复杂,
𝑃
∈
ℝ
𝑀
×
𝑑
,
𝑆
ground
∈
ℝ
𝑁
×
𝑀
为
text embedding
和点乘得到的相似度
𝑂
=
Enc
𝐼
(
Img
)
,
𝑃
=
Enc
𝐿
(
Prompt
)
,
𝑆
ground
=
𝑂
𝑃
𝑇
,
ℒ
cls
=
loss
(
𝑆
ground
;
𝑇
′
)
■
这里的操作其实类似于
ViLD
中的
ViLD-text
分支,图像和句子分别经过各自的
encoder
得到
feature embedding
,
然后计算匹配
度。但现在得到的
region-word aligment scores
𝑆
ground
跟
ground truth
不匹配,
(
sub)-word tokens
的数量
𝑀
总是比
text prompt
中的
phrases
数量
𝑐
要大
■
作者列了
4
个原因,在此从略。解决方法是,如果一个
phrase
是正匹配,那么所有
sub-words
都是正匹配,且额外添加的
tokens
对所有
image features
都是负匹配,这样把
𝑇
转化为
𝑇
′
∈
{
0
,
1
}
𝑁
×
𝑀
(?)
○
其实这两种方式都差不多,只需要小小改动
positive match
和
negative match
的方式就能联合起来。作者在小数据集上确认了方法
的有效性,然后迁移到大数据集上
○
具体是怎么个迁移法呢?首先对于
object
数据集和
grounding
数
据集是可以拿来直接用的,然后又想利用图像文本对
(
caption)
数
据,但这些数据没有
bounding box label
,
所以采用了伪标签的形
式
——
把前面训的小模型的推理结果拿来当
ground truth
,
这样
大大增大了数据集量
●
然后来看模型总览图
○
首先两个模态经过
encoder
得到
embedding
○
Deep Fusion
:
得到
embedding
后,理论上可以直接计算相似度了,但是直接算的话,图像文本的
joint embedding space
还没有
学的很好(
Lseg
通过
conv
继续学习)。多加一些层数融合一下,最后算相似度也更有针对性。具体就是用
cross attention
交互了
一下
○
然后就是用上面的方式算一下
ℒ
cls
,再用
L1-loss
另外算一下
ℒ
loc
,这样训练
●
结果
○
同期的一些纯视觉工作
(
DyHead, SoftTeacher)
没有
zero-shot
能力,但是经过微调后在
COCO
数据集上能够达到
6
0
左右的
AP
。
GLIP-L
具有
zero-shot
的能力,能够达到将近
5
0
的
AP
,
而且微调后也能达到
6
0
多一点的
AP
。
整体来看效果还是不错的。
●
后续还推出了
GLIPv2
,
又多加了几个任务(
Object Detection, Instance Segmentation, Vision Grounding, Visual Question Answering,
Image Captioning
等全放一起,把
text encoder
变得更花哨),这某种程度上也算是一种多模态任务的趋势,能用更多的数据把模型训
练得又大又好
2.3
AIGC
2.3.1
CLIP Passo
:
Semantically-Aware Object Sketching
●
时间:
2022.2
●
其实是一篇计算机图形学领域的文章(
CG, CV
交叉)
●
研究动机:标题为保持语义信息的物体素描,
CLIP + Picasso
。
把
图片变成简笔画
的形式,可生成
各种层次的主要轮廓
并且保留其
主
要视觉特征
。不仅要把原来的物体变成非常简单的形象,也需要模型抓住原来物体最关键的一些特征
●
相关工作
○
之前的研究都是取收集好的、抽象层次固定的数据集,属于一种
data driven
的方式。这种方式生成的素描画在风格和形式上受到限
制,违背图像生成的初衷(不同层次),同时种类不能做到很丰富。
○
相比之下,
CLIP
由于图像语义配对的学习方式,对物体的语义信息抓取的特别好,而且又有出色的
zero-shot
能力,不受图像风格
的限制,能把图像特征编码的非常好。
●
主体方法
○
任务就是在白纸上随机生成
Bezier
曲线,然后通过不停的训练,这些曲线就组合成了简笔画
○
具体来说,先
初始化参数
,然后通过
Rasterizer
将笔画映射到二维画布上
■
这个
Rasterizer
怎么跟我熟知的不太一样。。。不是三维物体、相机、光源
→
二维图像的嘛?
○
文章的主要贡献有两点
1.
一是一开始如何选择更好的初始化
(
saliency)
:
用一个训练好的
ViT
,
把最后一个多头自注意力取加权平均做成
saliency MAP
,
在这些映射上去看哪些特征更显著,然后在显著的区域上去采点(在显著的区域上采点,就是已经知道了一个物体或者说物体边
界去画贝兹曲线了)
2.
二是选择了一个更合适的目标函数(
CLIP
作为
teacher
作蒸馏)和损失函数(
Lg
:
模型前几层的输出,即
低层次的空间信息
——
动作或位置、结构
尽可能接近;
Ls
:
简笔画和原始图像的特征应尽可能接近)
○
为了更好的效果,会多生成几张分别算
loss
,
最后输出最小的那张
●
亮点
1.
训练很快,一张
V100
能在
6
分钟完成
2000
次迭代
2.
不受物体类别限制,可以为不常见的物体生成简笔画
3.
通过笔画数任意控制抽象程度
●
局限性
1.
图像有背景时,效果大打折扣;可以用别的模型抠掉背景做
2-
step
的方式,但不够
end2end
;
未来可以考虑把这种
mask
设计到
loss function
里面
2.
简笔画是同时生成而非逐步序列,不像人;加入
auto regressive
的方式
3.
提前设定的笔画数一方面很灵活,但另一方面对不同图片不方便;考虑把这作为
learnalbe parameter
2.4
视频理解
2.4.1
CLIP4Clip: An Empirical Study of CLIP for end to end Video Clip Retrieval and
Captioning
●
时间:
2021.4
●
视频检索,
video text retrieval
,
根据文本检索最相关的视频片段
●
标题玩了个双关,
CLIP
模型用作
clip
视频片段
●
CLIP
模型本身很适合做
Retrieval
任务,因为它就是做图像和文本之间相似性,根据相似性可以去做
ranking, atching, retrieve
等任
务。而且由于双塔结构(图像文本编码器分开),得到的
image, text embedding
做一步点乘就可以计算相似度,因此非常容易扩展
(比如并行、预提取之类的)
●
模型
○
文本这边没什么区别,得到
text embedding
,
视频这边多了时间维度。
𝑁
个视频帧每一帧打成
patch
作为编码器输入,得到
𝑁
个
CLS Token
。
每个文本特征对应
𝑁
个图像特征,该怎么算相似度呢?本文是一个
Empirical Study
,
就把以往的三种方法都尝试了一
遍,选出来最好的
1.
Parameter-free type
,最简单的做法,直接对时间维度取
mean pooling
。
但是这种方法没有考虑时序的特性,也就是前后帧之间
先后关系(
e.g.
一个人坐下和站起)。即使如此,这种方式也是目前最被接受的方式
2.
Sequential Type
,时序信息
+
Positional encoding
,
用
LSTM / Transformer Encoder
建模。属于
Late FUsion
(
文本和图像特征
抽完之后融合)
3.
Tight Type
,属于
Early Fusion
。
用
Transformer Encoder
将文本和
𝑁
个图像帧直接融合,用
MLP
直接输出相似度特征。有点像
是把文本特征作为
cls token
,
不仅融合了时序信息,还同时融合了图文信息
●
实验结果与
insight
1.
CLIP
的预训练模型很能打,微调或
zero-shot
都比之前方法提高
2
0
多个点
2.
如果训练数据量不那么大,
Mean pooling
这种非学习方法效果反而是最好的。而
Tight Type
可能是由于下游任务数据量少过拟合
的原因,效果较差
3.
图像转到视频,存在域偏差
(
domain gap)
,
如果视频这边找到足够多的数据集再去预训练,这样迁移的效果会更好
4.
视频
ViT
领域的
2
D patch
和
3
D patch
。
2D patch
在这里效果更好一些,但
3
D
也很有前途
5.
CLIP
用在
video text retrieval
领域,学习率这个参数非常敏感
2.4.2
Action CLIP
:
A New Paradigm for Video Action Recognition
●
时间:
2021.9
●
动作识别,本质上是加了时序信息的分类任务,自然很容易应用
CLIP
●
传统的动作识别模型
○
视频进一个
encoder(2D/3D)
,
与有标签的
ground thuth
计算
loss
。
○
受限于有监督学习,难以做大数据集的规模;
○
并且不像图像分类那种
“
一一对应
”
关系,在视频动作识别中,比如
“
open the door”
一个短语对应三个单词,另外,
open
这个词可以
描述很多动作。这时就有一个
trade off
1.
如果标记很多类,人工标注成本提高,
softmax
效果也不好,常规的分类算法可能表现都很差
2.
如果只标注大类,就无法预测细粒度的小类
■
最理想的方法就是摆脱标签的限制,从大量的视频数据中学一个好的特征,然后再去
zero-shot
或者
few-shot
迁移至下游任务。
于是自然想到
CLIP
●
那这篇论文改进了什么呢?
1.
一是如何让
image encoder
能处理视频,也就是每一帧的特征如何与文本特征计算相似度,这与
CLIP4clip
非常类似
2.
二是动作识别领域的标签矩阵,当数据集相对小且
batch
比较大的时候,不是对角线的地方也可能是正样本(比如一个
batch
中可
能有多个描述跑的动作)。这个问题将交叉熵损失换成
KL
散度(衡量两个分布的相似性)就可以解决
●
主体架构
○
视频和文本变成
token
后经过各自的
encoder
,
得到各自的特征后计算相似度然后与
ground truth
计算损失(
KL
散度)
○
但是加了
Textual Prompt, Pre-network Prompt, In-network Prompt, Post-network Prompt
来加快迁移。其实除了文本的那个算是正
统
prompt
,
其它三个都是为了写作连贯性而称作
prompt
罢了
1.
Pre-network Prompt: Joint
。
输入层面加入了时序信息,即
Temporal Encoding
2.
In-network Prompt: Shift
。
每个
ViT
模块间加入
shift
模块,在特征图上做各种移动,
zero cost
地达到更强的特征建模能力
3.
Post-network Prompt: Transf
。
就是
CLIP4clip
中的三种相似度计算,一模一样
○
感觉有点搭积木(
●
实验结果(消融实验)
1.
多模态的框架
(
ActionCLIP)
表现不错,相较于单模态
(
Unimodality)
的框架可以提升
2-3
个点。也就是说用
Language guidance
的方
式更合理
2.
Pre-train
是否重要?毋庸置疑,不用预训练疯狂掉点,不过值得注意的是
Vision
这边对
pre-train
的依赖性明显比
Language
那边
要强
3.
Prompt
是否重要?文本不用
prompt
基本不掉点,但是视觉这边,如果不用
joint
,
会掉
2
.
7
4
个点,如果不用
shift
,
会掉
5
.
3
8
个点
(都用
MeanP
)。
另外这里在
post-network
中平均池化的效果不是最好的了,原因应该是数据量相对大了
4.
Fine-tune
和
zero-shot
的比较。以往模型的
zero-shot
能力为零,如果
zero-shot
的话,大家都在涨点,但
ActionCLIP
依旧碾压
2.5
其它
●
快速过一下其它文章
1.
How Much Can CLIP Benefit Vision-and-Language Tasks?(CLIP-ViL)
:
第一个大规模把
CLIP
作为预训练模型应用到各种下游任务上
的
Empirical Study
,
答案是效果不错,没什么创新
2.
AudioCLIP:Extending CLIP to Image, Text and Audio*
●
音视频里面,语言、视频、音频基本是成对出现的,很容易模仿
CLIP
的方式加音频模块,单个模态两两算相似度矩阵最后
loss
加
起来
3.
PointCLIP: Point Cloud Understanding by CLIP
●
把
2
D
图像的
CLIP
应用到
3
D
的点云,想法就是把点云做成深度图(深度放在颜色那一位)。因为
CLIP
啥都见过所以这个也能迁
移,效果还不错
4.
Can Language Understand Depth?
●
CLIP
在物体抓取很有实力,但对比学习在学概念方面不是很好,深度也有点概念的意思,因此验证一下
●
想法跟上面那篇一样,然后把深度硬分类成
giant, close, far
等(回归任务变成分类任务),非常巧妙地运用了
CLIP
2.6
总结
●
对
CLIP
模型的使用基本是
3
种
1.
使用
CLIP
来抽特征,原有框架不动,只是用更好的特征加强我模型的训练,改动最小的方式
2.
拿
CLIP
作为
teacher
来蒸馏,不论我是什么模态还是
2
D/3D
,
都可以借助
CLIP
更快收敛
3.
不借助
CLIP
预训练参数,但借用它多模态对比学习的思想,定义自己的正负样本
●
总而言之,在大模型当道的当下,不可能对每一个任务都训练大模型,而是借助大模型并加上可学习的小模块,可能会是一个更有用
而且
更做得动
的方向