MiniGPT-v2 代码解析
paperreading
本文字数:1.7k 字 | 阅读时长 ≈ 6 min

MiniGPT-v2 代码解析

paperreading
本文字数:1.7k 字 | 阅读时长 ≈ 6 min

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\times 448$,整个训练过程都冻住

线性投影层:利用线性投影层将所有的视觉 token 投影到语言模型空间,对于高分辨率的图片$448\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 标识后,模型的幻觉进一步减轻

4月 06, 2025
3月 10, 2025
12月 31, 2024