这节课接 Lec 12
Video Transformers#
Video 就是图片加上时间维度(),我们的任务也就变成了分类一段时间内的视频
回顾一下做ViT,如果视频的时间较长,那么token数目也会飞速增长。因此,为了节省算力,主要有两种方法:
- 更改 Attention Operator
- 减少 Token 的数目
Attention#
如果我们像传统的 Attention 算子一样,对所有的 token 都做 Attention 是非常费力的(对于我们上面的模型来说就是所有时间和所有位置的 token 都拿来做 Attention)
一个想法是,能不能把时间和空间的 Attention 分开。如下图,先算同一个位置不同时间上的 Attention ,再算同一帧内不同位置的 Attention,这样信息仍然能完成传递

我们来比较一下计算量,设总共 帧,每张图片 个Token
- 对于左侧,每个token要做 次 Attention
- 对于右侧,Time Attn 要做 次,Space Attn 要做 次,总共
下面看第二个方法
很像 3D CNN,我们把整个空间划分成一些 windows ,每个 window 内部做 Attention。同时,为了信息能够跨层传递,在下一层还会平移这些 Attention 来跨层传播

Tokens#
对于 Self-Attention
| 张量 | 维度 | 含义 |
|---|---|---|
| Query 序列, 个 token,每个维度 | ||
| Key 序列, 个 token | ||
| Value 序列, 个 token | ||
| 注意力分数矩阵 | ||
| 输出序列,长度与 相同 |
最终输出的大小是 ,与 的长度无关,因此可以用卷积或池化等方法缩小和以减少计算量
另一种方式叫做 Tubelets
可以看下图,我们可以把多个帧的同一位置作为一个token,这样的一个 Tubelets 内含时序信息,能够减少 Token 数目

Foundation Models#
之前我们提到的模型都是在某个任务上特殊定制的,有没有能够在不同任务上有通用能力的模型,通过少量微调就可以用于不同任务
上面就是 Foundation Models 的定义。我们后面讨论一些 Foundation Model
CLIP#
一些分类器比如 Resnet 可以提取图片的特征,并将相似的分为一类。CLIP做的是想要将语言也放到其中,让语言和图像联系起来。
CLIP不是从图片中生成出语言,只是从一堆描述中挑出最符合所给图片的那个
其 Loss 采用 InfoNCE:
左侧为图像和不同文字,右侧为文字和不同图像,分子是配对的两个图像和文字,我们期望这个占比较高。相似度来自于图片embedding和文字embedding的点积

写成矩阵形式如下,我们希望对角线上的占比最高

最终训练得到这两个encoder
Usage:
对于一个图像分类问题,我们可以在 image encoder 后面连一个线性分类器,然后再去做一些训练
可不可以不训练这个分类器?
其实我们还有一个 text encoder 没有用。对于每一个分类,我们都可以用一个词或一句话来概括这个类,然后通过 text encoder 得到一个向量,正确的分类向量和图片向量的相似度应该是最高的

当然,有时候一种描述可能具有偏差,我们可以对一个短语用多种相同的描述,都能够增加成功率
现在我们就有了一个可以用于图片分类的model,不需要任何训练数据,且泛化性强
Coca#
CLIP 比较整图与整句的相似度,缺乏细粒度的理解。Coca 引入了一个生成模型来改进 CLIP

看上面的图,Coca 保留 image encoder,加了一个 Decoder。这个 decoder 被切成两半,在上半中加入了 image 向量的 Cross-Attention, 再计算 Caption Loss。下半的 Docoder 生成出 cls-token,和图像向量做 Contrastive Loss(和CLIP类似)