GPT4RoI: Instruction Tuning Large Language Model on Region-of-Interest :fire: Demo :fire:
单区域理解
多区域理解
介绍
GPT4RoI: Instruction Tuning Large Language Model on Region-of-Interest
张石龙*, 孙培泽*, 陈守发*, 肖敏, 邵文琦, 张文伟, 陈凯, 罗平
(*共同贡献)
[演示] [论文] [中文介绍]
更新
- [7月25日] GPT4RoI-7B-delta-V0 已发布! :fire::fire::fire: 您需要根据 GPT4RoI 权重 部分将我们的 delta 与原始 LLaMA 权重结合起来。
- [7月7日] 所有训练和推理代码已发布,您可以在 这里 试用演示 :fire::fire::fire:
目录
安装
- 克隆
GPT4RoI
git clone https://github.com/jshilong/gpt4roi.git
cd gpt4roi
- 创建环境
conda create -n gpt4roi python=3.10 -y
conda activate gpt4roi
pip install --upgrade pip # 启用 PEP 660 支持
pip install setuptools_scm
pip install --no-cache-dir -e .
# 请使用 conda 重新安装 torch,pip 可能会丢失一些运行时库
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
- 安装
flash-attn
包
pip install ninja
pip install flash-attn --no-build-isolation
- 安装
mmcv-1.4.7
包 确保你的nvcc -V
与python -c "import torch;print(torch.version.cuda)
的 cudatoolkit 版本一致。
cd mmcv-1.4.7
MMCV_WITH_OPS=1 pip install -e .
数据
我们的数据集包括 RefCOCO, RefCOCO+, RefCOCOg, Visual Genome, Flickr30K 实体和 VCR 数据集。我们对这些数据集的创造者,特别是 VCR 数据集的创造者深表感谢,为他们创造这些前瞻性的数据集表示感谢。
此存储库的数据集部分可能显得有些杂乱,特别是 VCR 部分(仍在完成中),可能导致 GPT4RoI 不太友好。目前我们正在努力将数据集整理成统一格式,并将配合更强大的模型。请继续关注更新。
您可以从官方网站下载相应的数据集并组织如下。然后,您可以修改 gpt4roi/configs/dataset_config.json
文件,以选择您想要使用的特定数据集:
GPT4RoI
├── data
│ ├── coco_det
│ │ ├── annotations
│ │ │ ├──instances_train2017.json
│ │ ├── train2017/
│ ├── mdetr_annotations
│ │ ├──finetune_refcoco_train.json
│ │ ├──finetune_refcoco+_train.json
│ │ ├──finetune_refcocog_train.json
│ │ ├──final_flickr_mergedGT_train.json
│ ├── coco_imgs/
│ ├── flickr30k-images/
│ ├── visual_genome
│ │ ├──train.json
│ │ ├──vg_all/
│ ├── llava
│ │ ├── llava_instruct_150k.json
│ │ ├── llava_150k_bbox_pred_results.pkl
│ ├── vcr
│ │ ├── train.jsonl
│ │ ├── vcr1images/
注意
- coco_imgs 应包含所有 coco 图片(你可以将它们软链接到此目录。
- 我们使用 Visual_Genome_Dataset_V1.2,可从 OpenDataLab 下载。 确保下载 train.json,并将所有 VG 图像软链接到目录
vg_all
。 - llava_150k_bbox_pred_results.pkl 包含 EVA-02-DET 的检测预测结果。我们感谢他们的工作。
权重
由于 LLaMA 的许可限制,GPT4RoI-7B 的 delta 权重是由 LLaMA-7B 生成的。要获取 GPT4RoI 权重,你需要将我们的 delta 与原始的 LLaMA 权重结合。
第一步. 下载原始 LLaMA-7B 权重
原始 LLaMA 权重可供下载。使用以下命令:
git lfs install
git clone https://huggingface.co/decapoda-research/llama-7b-hf ./llama-7b
或者,访问 网页 下载文件。
第二步. 下载 GPT4RoI-7B 的 delta 权重
GPT4RoI-7B 的 delta 权重可使用以下命令下载:
git lfs install
git clone https://huggingface.co/shilongz/GPT4RoI-7B-delta-V0 ./GPT4RoI-7B-delta
你也可以直接从这个 网页 下载文件。
第三步. 将 delta 权重应用到原始 LLaMA-7B 权重
将 delta 权重应用到原始 LLaMA-7B 权重上。请注意,此转换命令需要大约 30 GB 的 CPU 内存。
export PYTHONPATH=`pwd`:$PYTHONPATH
python3 -m scripts.apply_delta \
--base ./llama-7b \
--target ./GPT4RoI-7B \
--delta ./GPT4RoI-7B-delta
训练
GPT4RoI 在 8 个 A100 上训练,使用以下代码。
阶段 1
Vicuna-v0,是一个经过指令调优的聊天机器人,是此设置的基础模型。为了准备它,首先下载 这里 提供的 delta 权重。要获取原始权重,请按照这里 提供的说明将这些 delta 权重整合到 LLaMA-7B 中。
请确保下载以下投影器权重文件:LLaVA-7b-pretrain-projector-v0-CC3M-595K-original_caption.bin。
此外,你可以灵活选择不同版本的 Vicuna(例如 13B 版本或 llama v2 聊天机器人)以及对应的投影器权重,从 LLaVA 以有效满足你的特定需求。
exp/stage1
是工作目录。
bash train_stage1.sh exp/stage1
# 在阶段1中重新开始训练
# bash train_stage1.sh exp/stage1
阶段 2
exp/stage2
是工作目录,你应该提供阶段 1 的工作目录,以便我们加载相应的权重作为预训练模型。
# 在阶段2开始时
bash train_stage2.sh exp/stage2 exp/stage1
# 在阶段2中重新开始训练
# bash train_stage2.sh exp/stage2
Gradio
请先安装 Gradio Box。
python gpt4roi/app.py
注意事项
GPT4RoI 中的提示格式
在首次绘制图像中的新边界框时,你应始终使用<region1>, <region2>...
。然后可以在对话中使用普通的region 1
来引用实例。- 你应该始终点击
clear all
按钮,并等待清除过程完成后再开始新的对话。
多轮对话
致谢
如果你发现 GPT4RoI 对你的研究和应用有用,请使用以下 BibTeX 进行引用:
@article{zhang2023gpt4roi,
title={Gpt4roi: Instruction tuning large language model on region-of-interest},
author={Zhang, Shilong and Sun, Peize and Chen, Shoufa and Xiao, Min and Shao, Wenqi and Zhang, Wenwei and Chen, Kai and Luo, Ping},
journal={arXiv preprint arXiv:2307.03601},
year={2023}
}