MiniGPT-v2代码解析

1. MiniGPT-v2论文解析

MiniGPT-v2: large language model as a unified interface for vision-language multi-task learning. KAUST, Meta AI

1.1 论文动机

LLM在各种语言任务中表现出了令人印象深刻的能力,受此启发,作者目标是构建一个统一的接口来完成vision-language任务,包含图像描述,VQA,visual grounding等等。难点在于如何设计instruction来将这些任务进行统一。

为了实现上述目标,作者提出了MiniGPT-v2,作者提出在训练模型时,对于不同的任务使用不同的标识符(identifiers),这些标识符能够很好的区分不同任务的指令,并提高相应任务的学习效率,经过三个阶段的训练,模型能够取得很好的效果。

1.2 论文介绍

现在的MLLM(multimodal large language model)可以从LLM中继承其先进的能力,当利用vision-language instructions对MLLM进行合适的微调时,可以在下游任务上达到很好的效果。

然而,由于不同任务之间的复杂继承关系,相同的用户指令在不同任务中会有不同的理解,例如“tell me the location of a person”,在referring expression comprehension中会回答一个人以及相应的bbox;在visual question-answering任务中可能会用人的自然语言描述一下物体的空间位置;对于person detection任务,模型可能会识别每个人的空间位置。为了减轻这种歧义问题,本文提出了一个task-oriented instruction,即对于每一个任务,提出了一个task identifier token,例如对于visual question answering任务,提供了一个**[vqa] identifier token**,在训练过程中,一共有留个task identifier token。

为了更好地visual perception,作者使用了更高分辨率的图片进行训练,但会产生更多的视觉token,为了使得训练更加有效,作者将每四个相邻的视觉token拼接为一个,将视觉token数量降低了75%,文章采用了3阶段的训练策略,weakly-labeled,fine-grained image-text datasets以及multi-modal instructional datasets。

效果:模型在各种各样的视觉语言任务上进行了实验,,包含caption,VQA以及visual grounding。

在一些benchmark上的结果如下所示

1.3 方法细节

1. 网络结构

网络结构包含三部分:一个视觉backbone,一个线性投影层和一个大语言模型。

视觉backbone:采用EVA作为视觉backbone,分辨率为448×448448\times 448,整个训练过程都冻住

线性投影层:利用线性投影层将所有的视觉token投影到语言模型空间,对于高分辨率的图片448×448448\times 448,投影结束之后会有1024个token,这会占用大量的LLM的输入token,同时显著降低训练和推理的效率,因此作者将每四个相邻的视觉token拼接为一个,然后投影到LLM中,最终将Token数量降低了75%。

大语言模型:采用LLaMA2-chat(7B)作为大语言模型,对于visual grounding任务,直接采用输出文本表示的方法来表示空间的bounding box信息

模型整体框图如下所示

2. 多任务指令模板

如之前所述,仅仅通过image-text pair的对齐很难让模型理解用户到底想做什么任务,例如是caption还是VQA。因此作者提出了一个multi-task instruction template来让模型识别不同的任务设置

General input format

通用的输入模板如下所示,与LLaMA-2相似

[INST] <Img><ImageFeature></Img> [Task Identifier] Instruction [/INST]

如上所示,[INST]是用户角色,[/INST]是assistant角色,<Img><ImageFeature></Img>[Task Identifier]Instruction是用户的三个输入

Task identifier tokens

作者使用了6个与视觉相关的token,与视觉无关的任务不使用identifier token,这6个任务分别是:visual question answering, image caption, grounded image captioning, referring expression comprehension, referring expression generation, and phrase parsing and grounding

Spatial location representation

对于referring expression comprehension (REC), referring expression generation (REG), and grounded image captioning,上述三个任务需要输出空间位置信息,坐标被归一化到[0, 100],表示如下

{<Xleft> <Ytop> <Xright> <Ybottom>}

3. 多任务训练

训练一共分为三个阶段,所使用的数据集如下所示

第一阶段:Pretraining。通过许多weakly-labeled image-text数据和高质量的fine-grained vision-language标记数据构建广泛的视觉语言知识,其中对于若标记的数据,作者提供高的采样率。本阶段用来拓展模型的vision-language知识。

数据集:弱标记数据集(LAION,CC3M,SBU和GRIT-20M),细粒度数据集(COCO caption,text captions,RefCOCO,RefCOCO+,RefCOCOg,ReferCOCO,GQA,VQA-v2,OCR-VQA,OK-VQA,AOK-VQA)

第二阶段:Multi-tasks training。使用多个任务的细粒度数据来改进模型,排除第一阶段的GRIT和LAION等弱监督数据,并根据每个任务的频率更新采样率,这种策略能够让模型有限考虑高质量的对齐的image-text对。

第三阶段:Multi-modal instruction tuning。采用更多的多模式指令和语言数据及来微调模型,增强模型能力的同时使其像一个chatbot,除了使用第二阶段的数据,还加入了指令微调数据,例如LLaVA,Flickr30K数据,自己创建的混合多任务数据以及语言数据集。作者对第二阶段的细粒度数据进行了较低的采样率,对新的指令微调数据进行了高的采样率。第三阶段微调的一个原因是经过第二阶段训练的模型通常只能生成较短的caption以及包含甚少数量的视觉物体

1.4 训练细节

视觉backbone冻住,训练投影层,通过LoRA微调LLM,其中r=64,使用AdamW优化器,余弦学习率衰减

第一阶段:400K steps,bs=96,GPU:8-A100,lr=1e-4,大约90h
第二阶段:50K steps,bs=64,GPU:4-A100,lr=1e-5,大约20h
第三阶段:35K steps,bs=24,GPU:4-A100,lr=1e-5,大约7h

1.5 实验结果

对于referring expression的评价方法,作者表示模型输出的bounding box与GT的IOU大于0.5即可

在评价模型幻觉的时候,作者使用CHAIR数据集进行了评测,有两个结论:1. 模型在幻觉方面的表现比其他模型都好;2. 在模型中加入特定task标识后,模型的幻觉进一步减轻

Error: Not Found