BLIP和上一篇论文是同一个作者,22年5月发表。
BLIP这篇论文从两个角度提出他们的动机。
首先是从模型架构层面,之前的多模态工作有编码器结构的和编码器-解码器结构的,前者不太容易做生成类任务,后者又不太容易做图文检索类任务。
这篇论文提出的编码器-解码器架构在理解和生成两类任务上做到了模型的统一。
之后是从数据层面,这篇论文提出的captioning and filtering方法能够利用带噪音的数据集,生成一个规模更大质量更好的数据集。
这是模型的结构,使用了编码器-解码器架构。这里改成了解码器,相比ALBEF能更好处理生成类任务,这也是它的第一个创作动机,将理解和生成类任务统一起来。
和ALBEF类似,预训练阶段同样有三个损失,不同点在于将完形填空损失换成了下一个token损失,因为这里使用的是解码器结构。
如果不看最右边那个解码器,把中间的文本编码器挪到这里,那其实和ALBEF就是一样的了,ALBEF是把Bert切成两半,做了一个串行结构,这里因为用了共享参数的自注意力,所以可以做成并行结构。图中颜色相同的模块都是共享参数的。
在做ITC任务时同样沿用了ALBEF里的动量模型以及动量蒸馏。
在做ITM任务时也是用了对比学习时找到的hard negatives样本。
在做LM任务时就和GPT预训练时一样。
这里是这篇文章的第二个创作动机,作者说网上爬下来的图文对噪声很大,用这样的数据训练模型肯定效果不好,他提出了一个方法过滤掉有噪声的数据。
图中绿色的是干净的数据,红色的是有噪声的数据。先用这两类数据预训练一个BLIP,然后用干净数据微调得到一个判别器和一个生成器,判别器能判断一个图文对是否匹配,生成器则可以根据图像生成caption。生成器可以对任意一张图片生成caption,不过生成出来的也可能带噪音。
有了判别器就可以对一开始有噪声的数据和刚生成的数据进行一波滤除,得到干净的数据,与原始数据拼起来作为新数据集去预训练一个新的BLIP。
这是数据过滤的效果,拿第一张图举个例子,groundtruth是从我家附近的桥上,没法描述出这张图片内容是什么,只是说了下这张图片的拍摄地点。新生成的caption就很准确了。
下面是作者做的消融实验,加上它的数据过滤方法提升很大,基本能有两个点的提升。