任务
Image captioning,即看图说话,对输入图像做有意义且有效的文字描述。应用可以是:目标检测。
方法
- 使用CLIP的image encoder(冻结)将图片转换为embedding;
- 将embedding和学习得到的常量输入到mapping network(轻量,基于transformer),得到Prefix embedding;
- (推理时)将Prefix embedding输入到语言模型(冻结的GPT2),得到Caption tokens。
只有mapping network需要训练,一张1080使用300万样本训80小时即可。
训练
给定(image,caption)数据集合,我们的目标是从没见过的image生成有意义的caption(看成padding到定长的token序列)。训练目标:
是可训练的参数(mapping network的参数)。
我们将图片语义(由CLIP的image encoder提供语义丰富的embedding)这一condition作为caption的前缀。由于图片语义已经包含在了前缀中,我们可以使用自回归语言模型,在不考虑未来token的情况下,预测下一个token。
所以训练目标就是:
怎么把图片语义转化成前缀用作自回归的condition呢?这里用到mapping network,它以为输入),输出(个embedding vector),每个embedding vector和语言模型的token embedding形状相同。
在训练中,我们拼接和得到。损失函数用了二分类交叉熵:
语言模型微调
训练中最大的挑战在于,怎么互译CLIP和语言模型的给出的表征。即便语义都很丰富,表征空间仍是不同的,并且训练数据集也会带来差异。因此要在训练mapping network的同时对语言模型做微调。但微调会让训练的参数量大大增加。所以作者参考Prefix Tuning设计了一个附加的量,而让语言模型在训练中冻结。(作者还解释了下为什么不对CLIP的image encoder做微调,因为试了没用)
Prefix Tuning还没看完
。。。。。。。。。。。。。。。。。