【多模态大模型】--BLIP3

文章目录


BLIP3

今天学习一下BLIP3,BLIP3相对BLIP2做了比较大的改进,主要是针对BLIP2的下面几个问题:
1. 只支持单图像输入,不能算是一个自然的多模态交互形式
2. 损失函数由三部分组成,可能存在多任务目标不一致的情况。
3. 数据上,数据量小,多样性不足。

针对上述问题,我们来过一下BLIP3的核心内容。

架构

BLIP3舍弃了BLIP2提出的Q-Former架构,而是采用了Flamingo提出的Perceiver Resampler的做法,其实二者的核心都差不多,都是讲图像编码器得到的视觉token的输入再映射到一个固定数量的token。整体架构如图所示:

Any-Resolution Vision Token Sampling

任意分辨率视觉token采样:

  1. 首先匹配最近的分辨率
  2. 再进行切分patch,因为sigLIP的输入的分辨率是384x384,所以将一个768x768的图片切分为4个patch,外加一个resize的整体的patch,应该就是下采样,使其分辨率降低。所以总共有5个patch。
  3. 将这5个patch输入到视觉编码器,得到5x24x24xd=5x576xD.
  4. 然后将其输送到Perceiver Resampler得到5x128xD=640xD这个token数量的维度,然后再作为图像信息输进去
    其实上述的核心就是图像信息更加细粒度了,另一个是不管任意分辨率,都能得到固定长度的图像表示。
    这一点确实是合理的,如果直接输到视觉编码器里面,patch划分后是更粗粒度一些,但是也包含所有的信息,这种做法,其实也不是很理解。

训练

整个训练分为预训练,指令微调,DPO偏好对齐

数据

本文产生了大量的数据集。现在看来,最大的贡献其实就是数据集,整个的架构目前感觉用MLP连接更合理,也不需要将得到的视觉的token转换为一个固定的数量。