DeCap: DECODING CLIP LATENTS FOR ZERO-SHOT CAPTIONING VIA TEXT-ONLY TRAINING
论文:https://arxiv.org/abs/2303.03032
代码:https://github.com/dhg-wei/DeCap
OpenReview:https://openreview.net/forum?id=Lt8bMlhiwx2
TL; DR:拿 CLIP text encoder 用 text-only 数据训一个 text decoder,基于 CLIP 图文特征的对齐性质,拿 image embedding 送到 text decoder 中解码,实现 zeroshot captioning。为了缓解 CLIP text-image 联合特征空间中 modality gap 带来的影响,提出了基于映射的解码方法,把 image embedding 映射为 text embedding 支撑集的加权和。captioning 的结果倒是不是很在意,真要做captioning也不至于绕这么大个圈子,主要想看一下关于 CLIP text-image 联合特征空间中 modality gap 的最新研究成果。 understanding modality gap in CLIP models through zero-shot captioning ^^
方法
拿 CLIP 的 text encoder 和 text-only 的数据去训一个 text decoder,推理时拿 CLIP 的 image encoder 提的图像 embedding 作为输入,实现 zeroshot 的 captioning。为了缓解 CLIP text-image 特征空间中 modality gap 的问题,提出了一种基于映射的方法,维护一个 text embedding 的支撑集,将 image embedding 映射为文本支撑集特征的加权和。大幅度优于直接拿 image embedding 进行生成。
训练 text decoder
只需要文本语料库即可,是一种 text-only + self-supervised 的训练方式。这样的 text decoder 训练方式有两个好处:
- 可以自由控制生成文本的风格,因为就是输入语料的风格
- 只需要 text 数据,由于是 clip text encoder 的 embedding,对齐了 image embedding,方便后面接受图像输入,做 zeroshot 的 caption
解码方法
CLIP text-image 联合特征空间中虽然说是对齐了图文特征,但是存在明显的 modality gap ref。估计直接用 image embedding 去在 text embedding 上训练的 text decoder 上进行解码效果不会好。
这里作者提出了 PD(Projection-based Decoding)。先找一个语料库,用 CLIP text encoder 提取 text embedding,作为 support memory。做 captioning 时,提取到 image embedding 之后,把 image embedding 映射为 support memory 中 text embedding 的加权和。其中权重就是 image embedding 和各个 text embedding 的余弦相似度,乘一个温度系数之后 softmax 归一化。
作者还找了几个其他的 decoding 的 baseline 作为对比:
- CLPRe:直接检索各 text embedding 和 image embedding 最近的那个文本
- Visual Decoding(VD):直接拿 image embedding,用 text decoder 解码
- Nearest Neighbor Decoding(NND):在 support memory 中,直接找和 image embedding 相似度最大的一个 text embedding,用 text decoder 解码
实验结果
定量结果
zero-shot captioning 的结果如下。我们主要看下各 decoding 方式的对比。PD 的结果当然是最好的,NND 相当于是 PD 的 argmax hard 版本,比 PD 低不少,但也还行。CLIPRe 按说应该和 NND 差不多,但是没有用到 decoder,稍差一些。VD 也用了 decoder,却是最差的,遥遥落后,也就是说 text/image embedding 并不怎么 align。说明 CLIP 中的 modality 确实是不可忽视的,直接拿 image embedding 用 text-only 数据训的 text decoder 作解码,是完全不可行的。
可视化
文章附录的最后贴了两个可视化结果,都是 t-SNE 可视化。
第一个是对 10k 个 COCO 数据集中的文本,使用 CLIP text encoder 提取 text embedding,然后 t-SNE 降到二维,进行可视化。可以看到,COCO caption 中的文本确实按照类别聚集在一起的。不过我没看懂这个实验和文章主题有啥关系
第二个可视化还是有点意思的。取 500 个图文对,提取 image embedding 和 text embedding 进行降维可视化。图 (a)(b) 可见,image/text embedding 确实是分得很开的,这就是 modality gap 现象,和文章里的结果一致。再看图 © 发现 PD 的解码方式确实给力,经过映射的的 projected embedding 能和 text embedding 分布在一起了。再看图 (d),确实 projected embedding 和人类标注对应 5 个 text 的 embedding 很接近。CLIPRe 的结果也很接近,但是 PD 比 CLIPRe 更位于 5 个标注的中心。但是文章说能很好地保持视觉信息,这个从可视化中没怎么看出来。
总结
文章提出的 Projection Decoding 的方式来弥合 CLIP text/image embedding 之间的 modality gap 还是很有意思的。可能也能做图像的生成?现在 SD 都是拿 CLIP text encoder 来做文本引导,这篇看下来直接拿 image embedding 做应该是不行了,但可能拿 PD 做个映射,也能有结果?