u-LLaVA 是一个多模态多任务大型语言模型框架,旨在通过 LLM 统一处理多种视觉-语言任务。该项目由 OPPOMKLab 开发,已被 ECAI 2024 主赛道接收。
用途
u-LLaVA 的主要用途是统一多模态任务,包括视觉理解、视觉分割和视觉定位。具体任务涵盖:
- 视觉理解:图像描述、视频描述、视觉问答(VQA)
- 视觉分割:指代表达分割(RES)、显著目标分割、语义分割、实例分割
- 视觉定位:指代表达理解(REC)
主要能力
- 多模态多任务统一:通过 LLM 处理多种视觉-语言任务。
- 支持多种数据集:包括文本、图像-文本、视频-文本等混合数据集。
- 训练流程:分为 Stage I 预训练和 Stage II 微调,支持多 GPU 和单 GPU 训练。
- 评估:提供批量评估和定性推理功能。
- 已发布资源:代码、分割权重、Salient-15k 数据集。
使用方式
- 安装依赖:
pip install -r requirements.txt - 构建 GroundingDINO 的 CUDA 核心:
cd ./models/GroundingDINO && ./install.sh && cd ../.. - 下载标注和图像数据:根据提供的链接下载 ullava 修改的标注、LLaVA 预训练和微调标注,以及图像存储。
- 准备开源 LLaMA 模型:注意 LLaMA2 使用 bf16 训练,Stage I 使用 fp16 可能导致收敛错误;Llama-2 的 tokenizer.legacy 默认为 False,可能引发分词不匹配错误。论文中使用的基座 LLM 是 Vicuna-v1.1,而非 LLaMA2。
- 训练 Stage I:使用多 GPU 或单 GPU 命令,例如
python train_ullava_core.py --cfg_path './configs/train/ullava_core_stage1.yaml'。Stage I 使用 4 张 A100 80G 和 bf16 训练 1 个 epoch 约需 6 小时。 - 训练 Stage II:使用多 GPU 或单 GPU 命令,例如
python train_ullava.py --cfg_path './configs/train/ullava_stage2_lora.yaml'。 - 评估:修改
evaluation/inference_ullava_core.py和evaluation/inference_ullava.py中的解析器进行批量评估和定性推理。
适用场景
u-LLaVA 适用于多模态任务的研究和开发,如视觉问答、图像/视频描述、图像分割和视觉定位等。它可以帮助研究人员和开发者在一个统一的框架下探索多模态任务。
限制
- 训练需要较高的计算资源(如 A100 80G)。
- 部分权重和功能(如 grounding&segmentation 权重、ViT-336 支持等)尚未发布,预计在 2024 年 7 月或 8 月前发布。
- 需要遵循原始数据集的许可证要求。
- 项目采用 Apache 许可证。