首个GPT风格的通用视觉模型仅使用普通ViT统一了各种视觉任务。没有负迁移。
这个仓库是ECCV2024 口头报告论文GiT: 通过通用语言接口实现通用视觉Transformer及其后续工作的官方实现。我们尽最大努力确保代码库简洁、易读、最先进,并且只依赖最少的外部库。
GiT: 通过通用语言接口实现通用视觉Transformer
王海洋*, 唐浩*, 江力 $^\dagger$, 石少帅, Muhammad Ferjad Naeem, 李宏生, Bernt Schiele, 王立威 $^\dagger$
- 主要联系人: 王海洋 ( wanghaiyang6@stu.pku.edu.cn ), 唐浩 ( tanghao@stu.pku.edu.cn )
📣 新闻
- [24-8-12] 🤗 我们的GiT被ECCV2024接收为口头报告。
- [24-7-01] 🤗 我们的GiT被ECCV2024接收。
- [24-3-15] 🚀 训练和推理代码已发布。
- [24-3-15] 👀 GiT已在arXiv上发布。
💫 我们想做什么
各种AI领域的模型架构正在朝着多层普通Transformer的方向收敛。
- 语言建模 (GPT)
- 2D图像建模 (ViT)
- 3D点云建模 (DSVT)
- 2D图像和3D点云联合建模 (UniTR)
- 图建模 (Graphormer)
- $\cdot \cdot \cdot$
减少模型架构设计中的人为偏见
我们旨在通过普通Transformer统一视觉和语言的模型架构,减少人为偏见,如特定模态的编码器和特定任务的头部。深度学习的一个关键进展是从手工设计特征转向自主学习特征,这启发我们减少架构中人为设计的方面。此外,受益于普通Transformer的灵活性,我们的框架可以扩展到更多模态,如点云和图。
🤔 我们的成果
构建一个跨所有任务的通用计算模型是人工智能的基石,减少了对特定任务设计的需求。在这个项目中,我们引入了GiT (Generalist Vision Transformer)。GiT具有以下特点:
- 😮 类似LLM的极简架构设计:GiT仅由单个Transformer组成,不包含额外的视觉编码器和适配器。
- 🚀 覆盖所有类型的视觉理解任务:GiT解决了一系列视觉任务,包括对象级任务(如目标检测)、像素级任务(如语义分割)和视觉-语言任务(如图像描述)。
- 🤗 通过统一语言接口实现多任务能力:类似于LLM,GiT在多任务训练中观察到任务协同效应。它促进了任务间的相互增强,与单独训练相比取得了显著改进。没有负迁移现象。
- 🔥 在零样本和少样本基准测试中表现强劲:GiT随模型规模和数据量的增加而良好扩展,在27个数据集上训练后展示了在各种场景中的卓越泛化能力。
- 👍 简单的单阶段训练策略:GiT使用非常简单的单阶段训练策略,完全采用当前LLM框架使用的训练方式。
概述
🚀 主要结果
单任务基准测试
模型 | 参数量 | 指标 | 性能 | 检查点 | 日志 | 配置 |
---|---|---|---|---|---|---|
GiT-B检测 | 131M | mAP | 45.1 | 检查点 | 日志 | 配置 |
GiT-B实例分割 | 131M | mAP | 31.4 | 检查点 | 日志 | 配置 |
GiT-B语义分割 | 131M | mIoU | 47.7 | 检查点 | 日志 | 配置 |
GiT-B图像描述 | 131M | BLEU-4 | 33.7 | 检查点 | 日志 | 配置 |
GiT-B视觉定位 | 131M | Acc@0.5 | 83.3 | 检查点 | 日志 | 配置 |
多任务基准测试
模型 | 参数量 | 检测 | 实例分割 | 语义分割 | 图像描述 | 视觉定位 | 检查点 | 日志 | 配置 |
---|---|---|---|---|---|---|---|---|---|
GiT-B多任务 | 131M | 46.7 | 31.9 | 47.8 | 35.3 | 85.8 | 检查点 | 日志 | 配置 |
GiT-L多任务 | 387M | 51.3 | 35.1 | 50.6 | 35.7 | 88.4 | 检查点 | 日志 | 配置 |
GiT-H多任务 | 756M | 52.9 | 35.8 | 52.4 | 36.2 | 89.2 | 检查点 | 日志 | 配置 |
多任务训练中的任务协同效应
模型 | 参数量 | 检测 | 实例分割 | 语义分割 | 图像描述 | 视觉定位 |
---|---|---|---|---|---|---|
GiT-B单任务 | 131M | 45.1 | 31.4 | 47.7 | 33.7 | 83.3 |
提升 | +1.6 | +0.5 | +0.1 | +1.6 | +2.5 | |
GiT-B多任务 | 131M | 46.7 | 31.9 | 47.8 | 35.3 | 85.8 |
零样本基准测试
模型 | 参数量 | Cityscapes (检测) | Cityscapes (实例分割) | Cityscapes (语义分割) | SUN RGB-D | nocaps | 检查点 | 日志 | 配置 |
---|---|---|---|---|---|---|---|---|---|
GiT-B多任务 | 131M | 21.8 | 14.3 | 34.4 | 30.9 | 9.2 | 检查点 | 日志 | 配置 |
GiT-B通用 | 131M | 29.1 | 17.9 | 56.2 | 37.5 | 10.6 | 检查点 | 日志 | 配置 |
GiT-L通用 | 387M | 32.3 | 20.3 | 58.0 | 39.9 | 11.6 | 检查点 | 日志 | 配置 |
GiT-H通用 | 756M | 34.1 | 18.7 | 61.8 | 42.5 | 12.6 | 检查点 | 日志 | 配置 |
少样本基准测试
模型 | 参数量 | DRIVE | LoveDA | Potsdam | WIDERFace | DeepFashion | 配置 |
---|---|---|---|---|---|---|---|
GiT-B多任务 | 131M | 34.3 | 24.9 | 19.1 | 17.4 | 23.0 | 配置 |
GiT-B通用 | 131M | 51.1 | 30.8 | 30.6 | 31.2 | 38.3 | 配置 |
GiT-L通用 | 387M | 55.4 | 34.1 | 37.2 | 33.4 | 49.3 | 配置 |
GiT-H通用 | 756M | 57.9 | 35.1 | 43.4 | 34.0 | 52.2 | 配置 |
🛠️ 快速开始
安装
conda create -n GiT python=3.8
conda activate GiT
# 我们仅在1.9.1版本中进行了测试,其他版本可能也能正常工作。
pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html
pip install -U openmim
mim install "mmengine==0.8.3"
mim install "mmcv==2.0.1"
pip install "transformers==4.31.0"
git clone git@github.com:Haiyang-W/GiT.git
cd GiT
pip install -v -e .
pip install -r requirements/optional.txt
pip install -r requirements/runtime.txt
# 如果遇到ChildFailedError,请更新yapf
pip install yapf==0.40.1
- 请从huggingface下载预训练的文本嵌入,并按以下方式组织下载的文件:
GiT
|──bert_embed.pt
|——bert_embed_large.pt
|——bert_embed_huge.pt
- (可选)手动安装Java以进行图像描述评估。如果没有Java,您可以正常训练图像描述,但无法进行描述评估。
- (可选)为LVIS数据集安装lvis api。
# 当前路径为 ./GiT
cd ..
pip install git+https://github.com/lvis-dataset/lvis-api.git
数据集准备
多任务数据集
多任务基准包含用于目标检测和实例分割的coco2017数据集、用于语义分割的ade20k数据集、用于图像描述的coco caption数据集,以及用于视觉定位的refcoco系列数据集。
GiT
|──data
| |──ade
| | |──ADEChallengeData2016
| | | |──annorations
| | | | |──训练集和验证集
| | | |──images
| | | | |──训练集和验证集
| | | |──objectInfo150.txt
| | | |──sceneCategories.txt
| |──coco
| | |──annotations
| | | |──*.json
| | |──train2017
| | | |──*.jpg
| | |──val2017
| | | |──*.jpg
| |──coco_2014
| | |──annotations
| | | |──*.json
| | | |──coco_karpathy_test.json
| | | |──coco_karpathy_train.json
| | | |──coco_karpathy_val_gt.json
| | | |──coco_karpathy_val.json
| | |──train2014
| | | |──*.jpg
| | |──val2014
| | | |──*.jpg
| | |──refcoco
| | | |──*.p
通用数据集
我们在通用训练中使用了27个数据集。有关数据集准备的更多详细信息,请参阅这里。
🚨 我们在下面只列出了部分命令(GiT-B)。有关更详细的命令,请参阅这里。
训练
单任务
检测
bash tools/dist_train.sh configs/GiT/single_detection_base.py ${GPU_NUM} --work-dir ${work_dir}
多任务
GiT-B
bash tools/dist_train.sh configs/GiT/multi_fivetask_base.py ${GPU_NUM} --work-dir ${work_dir}
通用训练
GiT-B
bash tools/dist_train.sh configs/GiT/universal_base.py ${GPU_NUM} --work-dir ${work_dir}
测试
单任务
检测
bash tools/dist_test.sh configs/GiT/single_detection_base.py ${ckpt_file} ${GPU_NUM} --work-dir ${work_dir}
多任务
GiT-B
bash tools/dist_test.sh configs/GiT/multi_fivetask_base.py ${ckpt_file} ${GPU_NUM} --work-dir ${work_dir}
零样本和少样本
请从huggingface下载通用预训练权重,并按以下方式组织文件:
GiT
|──universal_base.pth
|——universal_large.pth
|——universal_huge.pth
零样本
bash tools/dist_test.sh configs/GiT/zero-shot/zero_shot_cityscapes_det_base.py ${ckpt_file} ${GPU_NUM} --work-dir ${work_dir}
少样本
bash tools/dist_train.sh configs/GiT/few-shot/few_shot_drive_det_base.py ${GPU_NUM} --work-dir ${work_dir}
自定义数据集
如果你想在自己的数据集上使用GiT,请参阅这里了解更多详情。
🚀 轻量版本
如果你的GPU内存不足,你可以像这里一样降低分辨率,我们将检测分辨率降至672。它需要约20小时的训练时间,并达到约41.5 mAP。
👀 待办事项
- 发布arXiv版本。
- 通用模型在多任务基准上的最先进性能。
- 通用模型在零样本和少样本基准上的最先进性能。
- 整理并发布推理代码。
- 整理并发布训练代码。
- 工程优化(更快)。
- 包括语言在内的联合训练(更强)。
- 代码重构(现在也有点乱,抱歉)。
👍 致谢
- MMDetection 我们构建的代码基础。感谢提供如此方便的框架。
- BLIP 我们从BLIP预训练模型中提取文本嵌入,并使用BLIP过滤的网络标题。感谢他们在开源和清理数据集方面所做的努力。
📘 引用
如果我们的工作对你有帮助,请考虑如下引用:
@article{wang2024git,
title={GiT: Towards Generalist Vision Transformer through Universal Language Interface},
author={Haiyang Wang and Hao Tang and Li Jiang and Shaoshuai Shi and Muhammad Ferjad Naeem and Hongsheng Li and Bernt Schiele and Liwei Wang},
journal={arXiv preprint arXiv:2403.09394},
year={2024}
}