自从ChatGPT问世以来,人工智能领域经历了一场令人眼花缭乱的变革,特别是在视觉-语言模型(Vision-Language Models, VLMs)的研究和应用上更是如此。VLMs通过结合视觉感知能力和自然语言理解能力,已经在诸如图像描述、视觉问答以及图像和视频的自动标注等多个方面展示出其惊人的潜力和应用价值。随着技术的不断进步,VLMs在处理复杂视觉和语言任务时的性能得到了显著提升,同时也为解决现实世界问题提供了新的视角和工具。
在过去的一年中,VLMs技术取得了飞速发展。本文旨在对这些技术进步进行梳理与思考,但将避免深入具体的论文细节,而是用简明扼要的方式介绍每篇研究的核心思想。若想了解更多细节,可参考相关论文的链接。
整体进展
引言:ChatGPT等语言模型没有视觉处理能力,大家认为实现强大的视觉模型可能还需要一段时间。然而,2023年3月份发布的GPT-4彻底改变了这一预期。GPT-4刷新了多个视觉榜单记录,并且展现出很强的图片理解能力。此外,相比ChatGPT,关于GPT-4的资料相对更少,使其更显神秘。
2022年11月,OpenAI发布了ChatGPT 3.5,一经推出便引起了轰动。紧接着在2023年3月,OpenAI发布了支持多模态输入的GPT-4,并展示了其强大的图像理解能力。这一突破立即在学术界引发了热烈反响,Vision-Language Models (VLMs) 的相关研究工作迅速增长。正如下图所示,无论是开源还是闭源的模型,都层出不穷,更新速度令人目不暇接。
From BradyFU (updated on April 2, 2024)
从下图Opencompass榜单上可以看到,尽管GPT-4在模型效果上表现卓越,但追赶它的速度也很快。许多新发布的模型正迅速缩小与GPT-4之间的差距,不断刷新我们的预期。
红框内为开源模型 from Opencompass
从榜单中可以清晰地看到以下几点:
- GPT-4毫无争议地排名第一,尤其是最近发布的GPT-4o版本表现尤为突出
- 其他相关模型也在快速追赶,并在榜单上超过了GPT-4v 20231106版本
- 虽然国内模型相对OpenAI的产品还有一定差距,但与其他国外厂商如谷歌的GeminiVision相比,仍处于同一梯队
- 令人欣喜的是,许多开源模型在榜单上也名列前茅,甚至超过了一些闭源模型
以开源模型 internvl-chat-1.5 为例,其在文档问答、图片描述、图片问答的能力令人印象深刻。相关效果示例如下图:
internvl-chat-1.5 demo
但需要注意的是:
- 大模型的评估本身也是一件复杂的任务,评估方法和指标还在不断完善中。因此,上述OpenCompass榜单上的指标只能作为参考,实际应用中哪个大模型表现更好还需要在具体业务场景中进行实测。
- 模型输出中仍然存在幻觉、输出不稳定和泛化性问题,特别是对于一些较小的模型,这些问题更加明显。
- 当前的视觉大模型在处理速度上依然存在较大限制,因此在现阶段许多实时性要求较高的业务应用中,使用小模型仍然是更可行的选择。
这些挑战提醒我们,在享受VLMs快速发展的同时,也需要理性对待其当前的局限和不足。
小结:开源vlms从最初的Demo级别,迅速发展到现在许多业务中都已具备实际使用的能力,近一年进展可谓飞速。接下来,我们将探讨一下VLMs在过去一年中取得的进步,以及哪些方面仍需持续改进。
代表性工作 — LLaVA
引言:回顾一下代表性工作LLaVA,可以帮助我们更好地理解VLMs的基本范式,并分析其存在的问题以及近一年来的相关改进。
LLaVA(2304)作为VLMs的代表性工作,只需要几个小时的训练,即可让一个LLM转变为VLM。低成本训练,代码数据全部开源,极大的助力了社区对于VLMs的探索。
LLaVA在模型结构上十分简洁,将视觉图像视作一种“外语”,利用vision-encoder和projection将“图像翻译成文本信号”,并微调LLM适应图像任务。
- Vision-Encoder: ViT-L/14
- Projection:单个线性层,后续改为两层MLP
- LLM:Vicuna-7B
训练数据包括:
- 预训练数据:过滤CC3M后得到的595K image-text caption pairs数据
- SFT数据:
- 通过gpt-4生成的问答数据:158K instruction-following data
- Science QA问答数据集:21K多模态选择问答题
整个训练包含二个阶段,一阶段利用caption数据只训练projection,二阶段sft数据训练projection和LLM。整个训练阶段冻结vision encoder。
初版本LLaVA的效果在很多业务问题上只能说是Demo级别,还有很多问题需要解决:
- LLaVA只支持224,实际场景中224分辨率根本不够用,怎么处理高分辨率?
- vision-encoder用vit合适吗?projection使用简单的mlp对吗?视觉token和文本token这样简单连接在一起对吗?
- 这么点训练数据够吗?视觉encoder不需要训练吗?
- 没法做精细化图像感知任务,没法输出检测框和分割框,ocr能力弱
- 接入视觉信号,vicuna本身文本的能力怎么样,变强了还是变弱了?
- ...
让我们带着这些问题来看近一年的工作,有些问题已经解答的比较好,有些问题还在持续探索中。
小结:现在看LLaVA初版效果一般,但在当时几个小时训练好,代码数据开源,诚意满满,让很多小成本玩家也能玩得起多模态。
高分辨率问题
引言:LLaVA默认的224分辨率远远不够,尤其对于文档任务来说至少需要896以上的分辨率;而直接扩大图像尺寸,会让图像token数据快速增加,不希望训练代价太大。
业务上会发现224分辨率根本不实用,在很多任务无法做到有效提取关键信息,学术圈也很快对高分辨率进行改进和支持。
- 方式一:引入高分辨率分支,相关论文有 vary(2312) 引入一个高分辨率分支,该分支加量不加价(输入大尺度图像1024*1024,但在网络设计上保证高分辨分支和低分辨率分支图像token数保持一致)
- 方式二:滑动切块,相关论文有UReader(2310)、 monkey(2311)、 llava-uhd(2403)、 InternLM-XComposer2-4KHD(2404)、 internvl-1.5(2404)等
方式一有个问题,如果要求分辨率比1024还大怎么办,并且高分辨率分支还需要额外训练。解决分辨率更恰当的方案可能还是滑窗切块。大致的思路是将高分辨率图像切分成N个子图,每个子图resize到224或448,用同一个VIT提取N个子图的特征,然后将子图特征又聚合在一起。上述论文处理高分辨率都是采用这个逻辑,但在切块和聚合的细节上略有不同。
- 其他细节问题
- 切图是否会正好把文字切成两半影响性能呢?TextMonkey(2403)借鉴swin transformer添加shift滑窗机制。
- 有些任务需要大分辨率,有些其实小分辨率就够了,怎么自动决定用多大分辨率呢(上述动态切块都是自适应宽高比,不能自适应分辨率)?相关论文DualFocus(2402)让VLMs自己学会放大镜功能。
- 其实上述之所以要手动滑窗切块是因为VIT使用固定位置编码,无法像卷积一样任意扩大分辨率,如果使用swin transformer这类backbone是否可以实现任意分辨率而不用手动切块,或者将VIT修改为相对位置编码。
小结:个人认为分辨率问题在近期的VLMs研究中得到了相对较好的解决,尤其是在需要高分辨率支持的任务(如文档问答)方面,进展尤为显著。
数据
引言:LLaVA使用的训练数据相对较少,所以在业务上会发现泛化性不足,难以应用实际的业务;相比文本数据,视觉数据形式更多样,存储和采集更困难,我们该怎么构建好数据呢?
毫无疑问,数据才是训练一个好的VLMs的重中之重。
为了让vlm充分理解物理世界,我们要构造什么样的视觉数据呢?大致可以想到这些:
- 基础的认知数据(caption):知道什么是什么
- 感知定位数据(检测、分割):有精确的定位能力
- 文档OCR相关数据:现实生活中非常重要的一类数据
- 复杂一点的思维链数据:需要用来激活VLM逻辑能力
- 3D数据/视频数据:这类数据才是真实的物理世界
- 其他行业图像:如医学图像、x光图像、雷达图等
- ...
这里每一项数据由于图像特性又可以分全局描述和局部描述,使得表现形式极为丰富;另一个问题是当前VLMs受限于只能输出文本,必须有image-text pairs,目前还没有做到像LLM一样"无监督预训练"(LLM预训练数据是人类产生的,其实也算是有监督,但是label很容易获取)。【如何充分挖掘利用好互联网上图文数据OmniCorpus(2406)?或者就直接用图像自回归训练?】
所以训练数据的收集和构造对于VLMs来说是一个大难题,学术界对于这个问题也没有形成定论,大致是分成两类数据,一是预训练对齐数据,二是SFT数据。预训练数据会更偏向于感知,看上去更简单一点;SFT数据会要求更强的逻辑推理,看上去会更难一些。【具体哪部分数据放在预训练好?哪部分放在SFT好呢?哪部分数据又是真的有效呢?Dataset Selection(2405)】
在训练数据的构造问题上建议直接查看开源论文的工作 internvl-1.5(2404)和 deepseek-vl(2403),论文中收集的数据比较全,并且描述比较细。如下图所示为internvl-1.5训练数据:
这么多数据集,光下载就费劲,真是让人头大。一是期待有人能构建处理好的数据供直接下载;二是这么多数据大部分人其实没有资源去训练尝试。所以对大部分人更有意义的是如何构造业务上高质量的SFT数据。这里可以查看 Awesome-Multimodal-Large-Language-Models 持续跟踪最新的数据集相关的工作。
具体到笔者熟悉的文档领域,可以参考
mPLUG-DocOwl 1.5(2403), TextSquare(2404), Fox(2405) 等相关论文的工作。
其他细节问题:当前VLMs对于检测框的bbox要么直接用归一化的数字(0~1000)表示,要么用特殊标记符(bbox_0~bbox_1000),合理吗?检测框还能用四个值表示,分割呢? PSALM(2403),PixelLLM(2312)
小结:数据这一块还没有收敛,也是各大公司的核心机密。无论是在学术研究还是商业应用中,数据始终是第一优先级,做好数据准备工作至关重要。对于大部分人员来说,如何获取和构建高质量的业务SFT数据尤为重要。