CogCoM:通过操作链深入细节训练大型视觉语言模型
如果您喜欢我们的项目,请在 GitHub 上为我们点个星 ⭐ 以获取最新更新。
📣 新闻
- [2024/6/15] 🎉 发布我们准备的数据集,包括合成的84K数据和人工标注的7K数学数据(参见 Data 或 HuggingFace)。
- [2024/2/26] 🎉 发布对话模型 CogCoM-chat-17b。
- [2024/2/26] 🎉 发布定位模型 CogCoM-grounding-17b。
- [2024/2/4] 🎉 发布基础模型 CogCoM-base-17b。
😮 亮点
CogCoM 使视觉语言模型能够逐步解决各种视觉问题并提供证据,无需涉及外部工具。
📖 CogCoM 简介
- CogCoM 是一个通用的开源视觉语言模型(VLM),配备了操作链(CoM),使 VLM 能够逐步解决复杂的视觉问题并提供证据。
- 我们在初步实验的基础上正式设计了 6 种基本操作,能够处理各种视觉问题。
- 我们引入了一个基于可靠大型语言模型(如 LLM,语言注释器)和视觉基础模型(如 VFM,视觉注释器)的级联数据生成流程,可以自动生成大量无错误的训练数据。我们使用这个流程收集了 70K 个 CoM 样本。
- 然后,我们设计了一个与典型 VLM 结构兼容的多轮多图像模型架构。
- 基于包含精选语料库的数据配方,我们最终训练了一个配备 CoM 推理机制的通用 VLM,名为 CogCoM,它具备对话、描述、定位和推理的能力。
- 详情请参阅我们的论文。
🤗 演示
我们支持两种模型推理的图形界面,Web 演示和命令行界面。如果您想在 Python 代码中使用它,可以很容易地修改命令行脚本以适应您的情况。
Web 演示
现在您可以使用我们使用 Gradio 实现的本地代码进行 GUI 演示。请切换到 demo/
目录并运行:
# 本地 Gradio
python web_demo.py --from_pretrained cogcom-base-17b --local_tokenizer path/to/tokenizer --bf16 --english
命令行演示
我们还支持使用 SAT 进行交互式命令行推理。如果您想在 Python 代码中使用它,可以很容易地修改命令行脚本以适应您的情况。程序将自动下载 SAT 模型并在命令行中进行交互(可以简单使用 vicuna-7b-1.5 分词器)。
# 启动交互式环境
python cli_demo_sat.py --from_pretrained cogcom-base-17b --local_tokenizer path/to/tokenizer --bf16 --english
程序将自动下载 SAT 模型并在命令行中进行交互(可以简单使用 vicuna-7b-1.5 分词器)。您可以通过输入指令并按回车键生成回复。输入 clear
清除对话历史,输入 stop
停止程序。
我们还支持模型并行推理,将模型分割到多个(2/4/8)GPU 上。以下命令中的 --nproc-per-node=[n]
控制使用的 GPU 数量。
提示:
-
如果您想手动下载权重,可以将
--from_pretrained
后的路径替换为模型路径。 -
我们的模型支持 SAT 的 4 位量化和 8 位量化。您可以将
--bf16
更改为--fp16
,或--fp16 --quant 4
,或--fp16 --quant 8
。
例如
```bash
python cli_demo_sat.py --from_pretrained cogcom-base-17b --fp16 --quant 8
```
- 程序提供以下超参数来控制生成过程:
用法:cli_demo_sat.py [-h] [--max_length MAX_LENGTH] [--top_p TOP_P] [--top_k TOP_K] [--temperature TEMPERATURE] 可选参数: -h, --help 显示此帮助消息并退出 --max_length MAX_LENGTH 总序列的最大长度 --top_p TOP_P 核采样的 top p --top_k TOP_K top k 采样的 top k --temperature TEMPERATURE 采样温度
🐳 模型库
如果您从代码仓库运行 demo/cli_demo*.py
,它将自动下载 SAT 或 Hugging Face 权重。或者,您可以选择手动下载必要的权重。
模型名称 | 输入分辨率 | 简介 | Huggingface 模型 | SAT 模型 |
---|---|---|---|---|
cogcom-base-17b | 490 | 支持定位、OCR 和 CoM。 | 即将推出 | 链接 |
cogcom-grounding-17b | 490 | 支持定位、OCR 和 CoM。 | 即将推出 | 链接 |
cogcom-chat-17b | 490 | 支持对话、定位、OCR 和 CoM。 | 即将推出 | 链接 |
⚙️ 要求和安装
我们推荐以下要求。
- Python == 3.11
- SwissArmyTransformer>=0.4.8
- torch>=2.1.2
- CUDA >= 11.7
- Transformers == 4.37.0
- xformers == 0.0.24
- pydantic == 1.10.1
- gradio == 3.50.2
- 安装所需包:
pip install -r requirements.txt
python -m spacy download en_core_web_sm
[!警告]
🚨 请安装适当版本的 `pydantic` 以确保顺利推理,如 [问题3](https://github.com/THUDM/CogCoM/issues/3) 中所述。
🗝️ 训练和验证
微调 CogCoM
您可能希望在自己的任务中使用 CogCoM,这需要不同的输出风格或领域知识。所有用于微调的代码位于 finetune.sh
和 finetune.py
文件中。
硬件要求
-
模型推理:
- 对于 INT4 量化:1 * RTX 3090(24G)
- 对于 FP16:1 * A100(80G) 或 2 * RTX 3090(24G)
-
微调:
- 对于 FP16:4 * A100(80G) [推荐] 或 8* RTX 3090(24G)。
评估
点击查看 GQA、TallyVQA、TextVQA、ST-VQA 的结果。
方法 | GQA | TallyVQA-s | TallyVQA-c | TextVQA | ST-VQA |
Flamingo | - | - | - | 54.1 | - |
GIT | - | - | - | 59.8 | - |
GIT2 | - | - | - | 67.3 | - |
BLIP-2 | 44.7* | - | - | - | 21.7 |
InstructBLIP | 49.5* | - | - | - | 50.7* |
Qwen-VL | 49.5* | - | - | - | 50.7* |
CogCoM | 71.7 | 84.0 | 70.1 | 71.1 | 70.0 |
点击查看定位基准的结果。
RefCOCO | RefCOCO+ | RefCOCOg | ||||||
验证集 | 测试集A | 测试集B | 验证集 | 测试集A | 测试集B | 验证集 | 测试集 | |
CogCoM-grounding-generalist | 92.34 | 94.57 | 89.15 | 88.19 | 92.80 | 82.08 | 89.32 | 90.45 |
🍭 示例
CogCoM展示了适应不同多模态场景的灵活能力,包括论证性视觉推理、视觉定位、基于定位的描述、图像描述、多项选择和详细描述。
💡 使用指南
任务提示
-
一般多轮对话:随意说话。
-
操作链:显式启动CoM推理。
- 我们随机在CoM链中添加启动提示来解决细致的视觉问题,因此您可以通过添加以下启动提示来明确让CogCoM以CoM机制运行(我们随机生成了大量启动提示以提高灵活性,详见
com_dataset.py
):
请通过一系列操作逐步解决问题,每一步你可以选择性地采用以下操作之一:GROUNDING(短语)->框,OCR(图像或区域)->文本,CROP_AND_ZOOMIN(给定图像上的区域)->新图像,CALCULATE(可计算目标)->数字,或者如果有帮助的话发明一个新的操作。{问题}
- 我们随机在CoM链中添加启动提示来解决细致的视觉问题,因此您可以通过添加以下启动提示来明确让CogCoM以CoM机制运行(我们随机生成了大量启动提示以提高灵活性,详见
-
视觉定位。我们的模型与MultiInstruct和CogVLM的定位指令兼容,这里我们提供三个功能的基本用法:
-
视觉定位(VG):根据物体描述返回定位坐标(边界框)。使用指令模板中的任意模板。例如(将<expr>替换为物体描述):
"在图像中找到"<expr>"所描述的区域。"
-
基于定位的描述(GC):根据边界框坐标提供描述。使用指令模板中的模板。例如(将<objs>替换为位置坐标):
"描述图片中*[[086,540,400,760]]*的内容。"
-
带坐标的图像描述(IDC):带有定位坐标(边界框)的图像描述。使用caption_with_box模板中的任意模板作为模型输入。例如:
你能提供图像的描述,并包含每个提到物体的坐标[[x0,y0,x1,y1]]吗?
-
**坐标格式:**模型输入和输出中的边界框坐标使用[[x1, y1, x2, y2]]
格式,原点在左上角,x轴向右,y轴向下。(x1, y1)和(x2, y2)分别是左上角和右下角,值为相对坐标乘以1000(前面补零至三位数)。
常见问题
- 如果您访问huggingface.co有困难,可以添加
--local_tokenizer /path/to/vicuna-7b-v1.5
来加载tokenizer。 - 使用🔨SAT下载模型,模型将保存到默认位置
~/.sat_models
。通过设置环境变量SAT_HOME
来更改默认位置。例如,如果您想将模型保存到/path/to/my/models
,可以在运行python命令之前执行export SAT_HOME=/path/to/my/models
。
🔒 许可证
本仓库中的代码基于Apache-2.0许可证开源,而使用CogCoM模型权重必须遵守模型许可证。
✒️ 引用 & 致谢
@article{qi2024cogcom,
title={CogCoM: Train Large Vision-Language Models Diving into Details through Chain of Manipulations},
author={Qi, Ji and Ding, Ming and Wang, Weihan and Bai, Yushi and Lv, Qingsong and Hong, Wenyi and Xu, Bin and Hou, Lei and Li, Juanzi and Dong, Yuxiao and Tang, Jie},
journal={arXiv preprint arXiv:2402.04236},
year={2024}
}