🐝 Honeybee: 用于多模态大语言模型的局部增强投影器
这是Honeybee: 用于多模态大语言模型的局部增强投影器的官方PyTorch实现,作者Junbum Cha*、Wooyoung Kang*、Jonghwan Mun*、Byungseok Roh。[论文]
新闻和更新
2024.04
🔥🔥🔥 Honeybee被CVPR 2024接收为亮点论文。- 在2719篇被接收的论文中,324篇(11.9%)被选为亮点论文。
精选示例
环境
- PyTorch
2.0.1
pip install -r requirements.txt
# 演示所需的额外依赖
pip install -r requirements_demo.txt
模型库
我们提供了预训练(PT)和微调(FT)阶段的检查点。
- 与其他最先进方法的比较(表6)
模型 | 检查点 | MMB | MME | SEED-I | LLaVA-w | MM-Vet | MMMU | POPE |
---|---|---|---|---|---|---|---|---|
Honeybee-C-7B-M144 | PT / FT | 70.1 | 1891.3 | 64.5 | 67.1 | 34.9 | 35.3 | 83.2 |
Honeybee-D-7B-M144 | PT / FT | 70.8 | 1835.5 | 63.8 | 66.3 | - | - | - |
Honeybee-C-13B-M256 | PT / FT | 73.2 | 1944.0 | 68.2 | 75.7 | 35.6 | 36.4 | 84.3 |
Honeybee-D-13B-M256 | PT / FT | 73.5 | 1950.0 | 66.6 | 72.9 | - | - | - |
- 推动Honeybee的极限(表7)
模型 | 检查点 | MMB | MME | SEED-I | LLaVA-w | ScienceQA | MM-Vet | MMMU | POPE |
---|---|---|---|---|---|---|---|---|---|
Honeybee-C-7B-M256 | PT / FT | 71.0 | 1951.3 | 65.5 | 70.6 | 93.2 | 38.1 | 37.3 | 85.5 |
Honeybee-C-13B-M576 | PT / FT | 73.6 | 1976.5 | 68.6 | 77.5 | 94.4 | 42.2 | 36.2 | 85.6 |
数据准备
下载以下所有数据后,将数据组织在./data
中。
然后,修改configs/data_configs/train_dataset
和configs/tasks
中的数据特定参数文件,如注释和图像根路径。
预训练
对于预训练阶段,我们使用BlipCapFilt和COYO数据集。鉴于它们的大小,我们建议按照这里提供的指南下载它们,并以webdataset格式存储。
请注意,我们使用的是原始COYO-700M数据集的过滤子集,特别是COYO100M子集。这个子集排除了CLIP相似度得分低于0.3的图像-文本对,这是使用CLIP ViT-B/32确定的。
微调
请从官方来源下载微调用的数据集:
- VQA(开放式):VQAv2、GQA、OCRVQA、VSR
- VQA(多选):ScienceQA、A-OKVQA
- 指代表达理解:RefCOCO、RefCOCO+、RefCOCOg、VisualGenome
- 指令:LLaVA150K、ShareGPT
评估
请遵循官方指南准备基准数据集:MMB、MME、SEED-Bench、ScienceQA、LLaVABench、MMVet、MMMU、POPE和OwlEval。
对于基于GPT的评估,包括LLaVABench、MMVet和MMB(gpt匹配器),OpenAI API信息应分别填写在tasks/llavabench/gpt_eval.py
、tasks/mm_vet/mmbet_eval.py
和tasks/mmb/eval_mmb_gpt.py
中。
示例命令
### 预训练
bash scripts/pt.sh {实验名称} ${参数1} ${参数2} ...
### 微调
bash scripts/ft.sh -p {预训练检查点} {实验名称} ${参数1} ${参数2} ...
### 评估
bash scripts/eval_all.sh {检查点路径}
使用各种数据集组合进行指令微调的简单运行示例
- 请仔细遵循下面示例中的引号用法。
- 例如,在定义
data_config/train_dataset
时,应该用单引号('
)将其包裹起来。
# 示例
预训练检查点=<预训练检查点路径>
微调输出目录="output/ft/<输出路径>"
mkdir -p ${微调输出目录}
# 第一个示例:使用单引号的采样权重
deepspeed ./train.py \
--config-name=finetune output_dir=${微调输出目录} pretrained_ckpt=${预训练检查点} \
'data_config/train_dataset=[llava150k,sqa,vicuna40k]' \
data_config.train_cfg.sampling_weights='[0.5, 0.2, 0.3]' \
2>&1 | tee ${微调输出目录}/train.log
# 第二个示例:不使用单引号的采样权重;值之间不应有空格。
deepspeed ./train.py \
--config-name=finetune output_dir=${微调输出目录} pretrained_ckpt=${预训练检查点} \
'data_config/train_dataset=[llava150k,sqa,vicuna40k]' \
data_config.train_cfg.sampling_weights=[0.5,0.2,0.3] \
2>&1 | tee ${微调输出目录}/train.log
严格复现官方结果
我们在评估中使用了批量推理来加速实验。批量推理不会显著改变平均分数,但个别分数可能会略有变化(约±0.1~0.2)。为严格复现官方结果,需要使用8个设备(GPU);设备数量会影响批次构建,从而影响最终分数。
除了最大模型(Honeybee-C-13B-M576
)因内存限制使用B=8外,我们使用了每个任务配置中指定的默认批量大小。
推理和演示
推理的示例代码提供在inference_example.ipynb中。
./examples
中的示例图片采用自mPLUG-Owl。
我们还提供了gradio演示:
python -m serve.web_server --bf16 --port {端口} --base-model checkpoints/7B-C-Abs-M144/last
引用
@inproceedings{cha2023honeybee,
title={Honeybee: Locality-enhanced Projector for Multimodal LLM},
author={Junbum Cha and Wooyoung Kang and Jonghwan Mun and Byungseok Roh},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
year={2024}
}
许可证
源代码采用Apache 2.0 许可证。 预训练权重采用CC-BY-NC 4.0 许可证。
致谢:本项目基于mPLUG-Owl开发,该项目同样采用Apache 2.0 许可证。
免责声明
Kakao Brain "Honeybee"是多模态大语言模型(MLLM)开源项目的名称,而非客户服务品牌。