InstructBLIP 指令微调训练多模态大语言模型

InstructBLIP 指令微调训练多模态大语言模型

Scroll Down

想系统且细致的看一下LLM及MLLM的工作,之前一直跟到了BLIP2,后面的就了解的不全面了。这一系列的文章会有一个章节进行扫盲,比如这个工作里提到的held-in和held-out之类的。开始开始!
image.png

Motivation

NLP里instruct tunning用的很多了
但还没在VLM上做过验证,因为视觉任务和相关信息更加多样,想让一个uni的model,在多样的任务上微调之后,又可以适应多样的任务,且对于一些unseen的任务也可以做得不错,这对finetune的方法泛化性要求高。

InstructBLIP 数据集构建

为了保证数据及任务的多样性,作者构建数据如下图所示。
image.png
文中选择了26个数据集11中任务,其中白色的是held-out的数据,黄色的是held-in。
对于每个任务,作者构造10-15个instruct的templates,如下图所示:
image.png
这里需要暂停一下,之前其实自己也有想过用多模态的数据进行微调,比如把image的embedding和text放在一起,但当时下意识觉得这样行不通,看来还是了解的太少。
值得注意的是,因为数据集和任务都很多,为了防止模型有过拟合的问题,作者设计了采样策略,其实很简单,多的少采一些,少的多采一些。

InstructBLIP训练

首先回顾一下BLIP2的模型结构和训练过程,模型结构如下:
image.png
训练分为两阶段:

  • 没有LLM,带上freezed imgae encoder,预训练初始化Q-Former。
  • 带上LLM,微调Q-Former
    InstructBLIP基于BLIP2,方法结构如下:
    image.png
    其实和BLIP的比较一致,重点看一下Q-Former的改变。通过一个self-atten让learnable queries和instruction先交互一下,后面再和image的feature做cross-atten,这样我认为会多出来和任务相关的信息。其他的训练策略其实就和BLIP2一致了。

定量/定性实验结果

image.png
结果上确实比BLIP2好上不少。
再看定性结果:
image.png
从定性结果上看,回答更加简洁了,也就是和任务更相关。
image.png
从这个例子中,虽然变得“不简洁”了,但这个问题本身就是要发现不正常的地方,给一个更加详细的描述和问题更贴切,因此效果应该也是更好了一些。

扫盲

held-in:也就是在训练的时候被看到的数据
held-out:与上文相反就是训练时没有被看到的数据