项目页面 • ?Arxiv 论文 • ?YouTube • ?HuggingFace 演示(WIP) • 引文
LL3DA 是一种大型语言 3D 助手,可以响应复杂 3D 环境中的视觉和文本交互。
大型多模态模型(LMM)的最新进展使得人机交互中的各种应用成为可能。然而,开发能够在复杂多样的 3D 环境中理解、推理和规划的 LMM 仍然是一个具有挑战性的话题,特别是考虑到理解 3D 场景的排列不变点云 3D 表示的需求。现有的作品寻求多视图图像的帮助,并将 2D 特征投影到 3D 空间作为 3D 场景表示。然而,这会导致巨大的计算开销和性能下降。在本文中,我们介绍了 LL3DA,一种大型语言 3D 助手,它采用点云作为直接输入,并对文本指令和视觉提示做出响应。这有助于 LMM 更好地理解人类交互,并进一步帮助消除杂乱的 3D 场景中的歧义。实验表明,LL3DA取得了显着的效果,在3D密集字幕和3D问答方面均超越了各种3D视觉语言模型。
待办事项:
步骤 1. 构建依赖关系。我们的代码使用 CUDA 11.6 和 Python 3.8.16 进行了测试。要运行代码,您应该首先安装以下软件包:
h5py
scipy
cython
plyfile
'trimesh>=2.35.39,<2.35.40'
'networkx>=2.2,<2.3'
'torch=1.13.1+cu116'
'transformers>=4.37.0'
之后,从源代码构建pointnet2
和加速giou
:
cd third_party/pointnet2
python setup.py install
cd utils
python cython_compile.py build_ext --inplace
步骤 2. 下载预先训练的嵌入。从 Huggingface 下载预处理后的 BERT 嵌入权重并将其存储在./bert-base-embedding
文件夹下。权重与官方 BERT 模型相同,我们只是修改了某些参数的名称。
我们的存储库需要来自 ScanNet 的 3D 数据、自然语言注释和预训练的 LLM 权重。
步骤 1. 下载并准备 ScanNet 3D 数据。
2024-07-01 更新:您可以从此处下载预处理的数据。
SCANNET_DIR
更改为data/scannet/batch_load_scannet_data.py
中的 scans 文件夹,然后运行以下命令。 cd data/scannet/
python batch_load_scannet_data.py
步骤 2. 准备语言注释
要训练模型,您需要准备来自ScanRefer
、 Nr3D
、 ScanQA
和3D-LLM
的 ScanNet 部分的语言注释。
ScanRefer
。按照此处的命令下载ScanRefer
数据集。Nr3D
。按照此处的命令下载Nr3D
数据集并对其进行预处理。ScanQA
。按照此处的命令下载ScanQA
数据集。3D-LLM
。数据位于此处。我们还在这里分享了我们的预处理脚本。我们将更新3D-LLM最新发布的数据(V3)。
最后,将文件组织到以下文件夹中:
./data/
ScanRefer/
ScanRefer_filtered_train.json
ScanRefer_filtered_train.txt
ScanRefer_filtered_val.json
ScanRefer_filtered_val.txt
Nr3D/
nr3d_train.json
nr3d_train.txt
nr3d_val.json
nr3d_val.txt
ScanQA/
ScanQA_v1.0_test_w_obj.json
ScanQA_v1.0_test_wo_obj.json
ScanQA_v1.0_train.json
ScanQA_v1.0_val.json
3D_LLM/
3d_llm_embodied_dialogue_filtered_train.json
3d_llm_embodied_dialogue_filtered_val.json
3d_llm_embodied_planning_filtered_train.json
3d_llm_embodied_planning_filtered_val.json
3d_llm_scene_description_train.json
3d_llm_scene_description_val.json
步骤 3. [可选] 下载预训练的 LLM 权重。如果您的服务器从 Huggingface 自动下载权重没有问题,请随意跳过此步骤。
从 Huggingface 的opt-1.3b
检查点(或任何其他仅解码器的 LLM)下载文件,并将它们存储在./facebook/opt-1.3b
目录下。确保下载了所需的文件:
./facebook/opt-1.3b/
config.json
merges.txt
pytorch_model.bin
special_tokens_map.json
tokenizer_config.json
vocab.json
2024-07-01 更新:发布的版本与我们的论文实现略有不同。在我们发布的版本中,我们标准化了数据格式并删除了重复的文本注释。要重现我们报告的结果,请使用scripts-v0
中提供的脚本来生成通才权重。
bash scripts-v0/opt-1.3b/train.generalist.sh
我们的代码应该支持任何仅解码器的LLM ( facebook/opt-1.3b
、 gpt2-xl
、 meta-llama/Llama-2-7b
甚至最新的Qwen/Qwen1.5-1.8B
和Qwen/Qwen1.5-4B
)。请查看下表,了解推荐的不同规模的法学硕士!默认情况下,模型使用八个 GPU 进行训练。
<1B | 1B-4B | 〜7B |
---|---|---|
gpt2 (124m) | TinyLlama-1.1B (1.1b) | facebook/opt-6.7b (6.7b) |
facebook/opt-125m (125m) | facebook/opt-1.3b (1.3b) | meta-llama/Llama-2-7b-hf (6.7b) |
gpt2-medium (355m) | gpt2-xl (1.6b) | Qwen/Qwen1.5-7B (7.7b) |
Qwen/Qwen1.5-0.5B (620m) | Qwen/Qwen1.5-1.8B (1.8b) | - |
gpt2-large (774m) | facebook/opt-2.7b (2.7b) | - |
- | microsoft/phi-2 (2.8b) | - |
- | Qwen/Qwen1.5-4B (3.9b) | - |
我们在scripts
夹中提供具有不同 LLM 后端的训练脚本。请随意修改这些命令中的超级参数。
对于其他 LLM 后端,请通过将--vocab
更改为其他 LLM 来手动修改命令。
将模型训练为 3D 通才:(我们还将预训练的权重上传到 Huggingface。)
bash scripts/opt-1.3b/train.generalist.sh
模型训练完成后,您可以在 ScanQA 上调整模型以进行 3D 问答:
bash scripts/opt-1.3b/tuning.scanqa.sh
并且,在用于 3D 密集字幕的 ScanRefer / Nr3D 上:
bash scripts/opt-1.3b/tuning.scanrefer.sh
bash scripts/opt-1.3b/tuning.nr3d.sh
您还可以调整模型来预测开放词汇对象检测的边界框!
bash scripts/opt-1.3b/tuning.ovdet.sh
将模型评估为 3D 通才:
bash scripts/opt-1.3b/eval.generalist.sh
关于 ScanQA 3D 问答:
bash scripts/opt-1.3b/eval.scanqa.sh
并且,在用于 3D 密集字幕的 ScanRefer / Nr3D 上:
bash scripts/opt-1.3b/eval.scanrefer.sh
bash scripts/opt-1.3b/eval.nr3d.sh
如果您发现我们的代码或论文有帮助,请考虑为我们加注星标并引用:
@misc{chen2023ll3da,
title={LL3DA: Visual Interactive Instruction Tuning for Omni-3D Understanding, Reasoning, and Planning},
author={Sijin Chen and Xin Chen and Chi Zhang and Mingsheng Li and Gang Yu and Hao Fei and Hongyuan Zhu and Jiayuan Fan and Tao Chen},
year={2023},
eprint={2311.18651},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
感谢 Vote2Cap-DETR、3D-LLM、Scan2Cap 和 3DETR。我们借用了他们的一些代码和数据。
该代码是根据 MIT 许可证分发的。如果我们的论文和代码有任何问题,请随时提出问题!