PointLLM

PointLLM

多模态大语言模型理解点云数据的突破性进展

PointLLM是一个创新的多模态大语言模型,可理解物体的彩色点云数据。该模型能够感知物体类型、几何结构和外观,而不受深度模糊、遮挡或视角依赖等问题影响。项目团队收集了包含660K简单和70K复杂点云-文本指令对的数据集,并采用两阶段训练策略。为评估模型的感知和泛化能力,研究人员建立了生成式3D物体分类和3D物体描述两个基准,并使用三种评估方法进行测试。

PointLLM3D点云大语言模型多模态计算机视觉Github开源项目
<p align="center"> <h1 align="center"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/0a659b18-dbe1-4a33-93f2-5cec309d51bf.png" align="center" width="6.5%"><strong>PointLLM:赋能大型语言模型理解点云</strong></h1> <p align="center"> <a href='https://runsenxu.com/' target='_blank'>徐润森</a>&emsp; <a href='https://guanfang12.github.io/' target='_blank'>王晓龙</a>&emsp; <a href='https://tai-wang.github.io/' target='_blank'>王泰</a>&emsp; <a href='http://yilunchen.com/about' target='_blank'>陈亦伦</a>&emsp; <a href='https://oceanpang.github.io/' target='_blank'>庞江苗*</a>&emsp; <a href='http://dahua.site/' target='_blank'>林达华</a>&emsp; <br> 香港中文大学&emsp;上海人工智能实验室&emsp;浙江大学 </p> </p> <p align="center"> <a href="http://arxiv.org/abs/2308.16911" target='_**blank**'> <img src="https://img.shields.io/badge/arXiv-2308.16911-blue?"> </a> <a href="https://arxiv.org/pdf/2308.16911.pdf" target='_blank'> <img src="https://img.shields.io/badge/论文-📖-blue?"> </a> <a href="https://runsenxu.com/projects/PointLLM" target='_blank'> <img src="https://img.shields.io/badge/项目-&#x1F680-blue"> </a> <a href="http://101.230.144.196" target='_blank'> <img src="https://img.shields.io/badge/演示-&#x1f917-blue"> </a> <a href="" target='_blank'> <img src="https://visitor-badge.laobi.icu/badge?page_id=OpenRobotLab.pointllm&left_color=gray&right_color=blue"> </a> <a href="https://openxlab.org.cn/apps/detail/openxlab-app/PointLLM" target='_blank'> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/594b3098-3c1e-4750-8a61-53bbdc9e6c95.svg"> </a> </p>

🏠 关于

<div style="text-align: center;"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/93f64b74-8b8b-425b-9e82-48ee3da2d62d.jpg" alt="对话_预览" width=100% > </div>

我们推出了<b>PointLLM,这是一个能够理解物体彩色点云的多模态大型语言模型</b>。它可以感知物体类型、几何结构和外观,无需考虑模糊的深度、遮挡或视角依赖性问题。<b>我们收集了一个新颖的数据集,包含66万个简单和7万个复杂的点云-文本指令对</b>,以实现两阶段训练策略。为了严格评估我们模型的感知能力和泛化能力,<b>我们建立了两个基准:生成式3D物体分类和3D物体描述,通过三种不同的评估方法进行评估。</b>

🔥 最新动态

  • [2024-07-01] PointLLM已被ECCV 2024接收,获得全部"强烈接受"推荐。🎉 我们正在寻找有动力的学生进行PointLLM相关研究。如果你感兴趣,请发送简历至runsxu@gmail.com
  • [2023-12-29] 我们发布了在线Gradio演示的代码。
  • [2023-12-26] 我们发布了模型评估代码,包括ChatGPT/GPT-4评估和传统指标评估。
  • [2023-12-08] 我们发布了训练代码和PointLLM-v1.2。在线演示也已升级至v1.2版本。请尽情体验!🎉
  • [2023-12-01] 我们发布了论文的更新版本(v2),包含额外的基线比较、改进的人工评估指标、提升的模型性能(PointLLM-v1.2)和其他细节优化。请查看这里的更新版本。
  • [2023-10-18] 我们发布了指令跟随数据,包括简单描述和复杂指令。点击此处下载。
  • [2023-09-26] 我们发布了推理代码和检查点,以及我们使用的Objaverse彩色点云文件。你可以在自己的机器上与PointLLM对话。
  • [2023-08-31] 我们发布了PointLLM的论文和在线gradio演示。快来试试吧!🎉

📋 目录

🤖 在线演示

<b>PointLLM已上线!请访问http://101.230.144.196OpenXLab/PointLLM体验。</b>

你可以与PointLLM就Objaverse数据集中的模型或你自己的点云进行对话!

如果你有任何反馈,请随时告诉我们!😃

💬 对话示例

对话 1对话 2对话 3对话 4
<img width="100%" src="https://yellow-cdn.veclightyear.com/0a4dffa0/38d72ac3-1a5f-4a46-b936-db4871243beb.jpg"><img width="100%" src="https://yellow-cdn.veclightyear.com/0a4dffa0/1a0a1d23-fd2b-4f91-a99a-87cd6d540abe.jpg"><img width="100%" src="https://yellow-cdn.veclightyear.com/0a4dffa0/d5732c80-efac-46d2-aac2-37830874ae3d.jpg"><img width="100%" src="https://yellow-cdn.veclightyear.com/0a4dffa0/6139e572-ddc9-4852-a732-698d7f6363fd.jpg">

🔍 概述

模型

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/c555d262-11a8-49c9-bdc6-a70c73140c6a.jpg" align="center" width="100%"> </p> 点编码器从输入点云中提取特征,并将其投影到LLM骨干网络的潜在空间。LLM骨干网络处理点令牌和文本令牌序列,并生成预测令牌作为输出。

实验结果

与基线的定量比较

更多结果请参考我们的论文。

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/562a1f28-8803-45b6-843a-a0d55aef88a0.png" align="center" width="100%"> </p> <p align="center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/638ce6de-1218-4a31-a4b2-aedb3615c5dc.png" align="center" width="100%"> </p> <b>!!!注意:传统指标如BLEU-1、ROUGE-L和METEOR倾向于偏好较短的回答,可能无法有效捕捉语义准确性。关于这一点的详细讨论,请参考我们的论文。我们建议社区不要仅仅依赖这些指标进行评估。</b>

与基线的定性比较

更多结果请参考我们的论文。

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/6ff35f46-95bc-424c-b698-ce0847848ba2.png" align="center" width="100%"> </p>

📦 训练和评估

安装

我们在以下环境下测试了我们的代码:

  • Ubuntu 20.04
  • NVIDIA驱动:515.65.01
  • CUDA 11.7
  • Python 3.10.13
  • PyTorch 2.0.1
  • Transformers 4.28.0.dev(transformers.git@cae78c46)

开始:

  1. 克隆此仓库。
git clone git@github.com:OpenRobotLab/PointLLM.git cd PointLLM
  1. 安装包
conda create -n pointllm python=3.10 -y conda activate pointllm pip install --upgrade pip # 启用PEP 660支持 pip install -e . # * 用于训练 pip install ninja pip install flash-attn

数据准备

Objaverse训练数据

  1. 这里下载660K Objaverse彩色点云的两个压缩文件。它们需要约77GB的存储空间。
  2. 运行以下命令将两个文件合并为一个并解压。这将产生一个名为8192_npy的文件夹,其中包含660K个名为{Objaverse_ID}_8192.npy的点云文件。每个文件是一个维度为(8192, 6)的numpy数组,其中前三个维度是xyz,后三个维度是范围在[0, 1]的rgb
cat Objaverse_660K_8192_npy_split_a* > Objaverse_660K_8192_npy.tar.gz tar -xvf Objaverse_660K_8192_npy.tar.gz
  1. PointLLM文件夹中,创建一个data文件夹,并在目录中创建一个指向解压文件的软链接。
cd PointLLM mkdir data ln -s /path/to/8192_npy data/objaverse_data

指令跟随数据

  1. PointLLM/data文件夹中,创建一个名为anno_data的目录。
  2. 我们的指令跟随数据,包括简单描述和复杂指令,可以在这里下载。如果您在下载数据时遇到困难(如网络问题),请邮件联系作者。
  • 简单描述数据有660K个样本,复杂指令有70K个样本。
  • 两种训练数据都基于Objaverse数据集。
  • 复杂指令是由GPT-4生成的。
  1. 将数据文件放入anno_data目录。目录结构应如下所示:
PointLLM/data/anno_data ├── PointLLM_brief_description_660K_filtered.json ├── PointLLM_brief_description_660K.json └── PointLLM_complex_instruction_70K.json
  1. 注意,PointLLM_brief_description_660K_filtered.json是通过从PointLLM_brief_description_660K.json中删除我们保留作为验证集的3000个对象而筛选得到的。如果您想重现我们论文中的结果,应该使用PointLLM_brief_description_660K_filtered.json进行训练。PointLLM_complex_instruction_70K.json包含来自训练集的对象。
  2. 如果您想自己生成复杂指令,请参考我们的论文了解其他细节。系统提示位于pointllm/data/data_generation/system_prompt_gpt4_0613.txt

评估数据

  1. 这里下载我们用于Objaverse数据集基准测试的参考GT PointLLM_brief_description_val_200_GT.json,并将其放入PointLLM/data/anno_data。我们还在这里提供了我们在训练期间过滤的3000个对象ID。
  2. PointLLM/data中创建一个名为modelnet40_data的目录。在这里下载ModelNet40点云的测试分割modelnet40_test_8192pts_fps.dat,并将其放入PointLLM/data/modelnet40_data

训练

下载初始大语言模型和点编码器权重

  1. PointLLM 文件夹中,创建一个名为 checkpoints 的目录。
  2. 下载预训练的大语言模型和点编码器:PointLLM_7B_v1.1_initPointLLM_13B_v1.1_init。将它们放在 checkpoints 目录中。
  3. 请注意,上述 "v1.1" 表示我们使用 Vicuna-v1.1 检查点,您不需要再次下载原始 LLaMA 权重。

开始训练

  1. 对于第一阶段训练,只需运行:
cd PointLLM scripts/PointLLM_train_stage1.sh
  1. 第一阶段训练结束后,开始第二阶段训练:
scripts/PointLLM_train_stage2.sh

PointLLM-v1.1 和 PointLLM-v1.2

通常,您不必关心以下内容。这些仅用于复现我们 v1 论文(PointLLM-v1.1)中的结果。如果您想与我们的模型进行比较或将我们的模型用于下游任务,请使用 PointLLM-v1.2(参考我们的 v2 论文),它具有更好的性能。

<details> <summary>以下步骤用于复现 PointLLM-v1.1(点击展开)</summary>
  1. PointLLM v1.1 和 v1.2 使用略有不同的预训练点编码器和投影器。如果您想复现 PointLLM v1.1,请编辑初始大语言模型和点编码器权重目录中的 config.json 文件,例如,vim checkpoints/PointLLM_7B_v1.1_init/config.json

  2. 更改键 "point_backbone_config_name" 以指定另一个点编码器配置:

    # 从 "point_backbone_config_name": "PointTransformer_8192point_2layer" # v1.2 # 改为 "point_backbone_config_name": "PointTransformer_base_8192point", # v1.1
  3. scripts/train_stage1.sh 中编辑点编码器的检查点路径:

    # 从 point_backbone_ckpt=$model_name_or_path/point_bert_v1.2.pt # v1.2 # 改为 point_backbone_ckpt=$model_name_or_path/point_bert_v1.1.pt # v1.1
</details>

聊天

  1. 训练好的模型检查点可在这里获得(包括 PointLLM 的不同版本)。
  2. 运行以下命令,使用 torch.float32 数据类型启动聊天机器人,以讨论 Objaverse 的 3D 模型。模型检查点将自动下载。您也可以手动下载模型检查点并指定它们的路径。以下是一个示例:
cd PointLLM PYTHONPATH=$PWD python pointllm/eval/PointLLM_chat.py --model_name RunsenXu/PointLLM_7B_v1.2 --data_name data/objaverse_data --torch_dtype float32
  1. 您也可以轻松修改代码以使用 Objaverse 以外的点云,只要输入模型的点云尺寸为 (N, 6),其中前三个维度是 xyz,最后三个维度是 rgb(范围在 [0, 1] 内)。您可以将点云采样为 8192 个点,因为我们的模型是在这样的点云上训练的。

  2. 下表显示了不同模型和数据类型的 GPU 要求。我们建议在适用的情况下使用 torch.bfloat16,这在我们论文的实验中使用。

    模型数据类型GPU 内存
    PointLLM-7Btorch.float1614GB
    PointLLM-7Btorch.float3228GB
    PointLLM-13Btorch.float1626GB
    PointLLM-13Btorch.float3252GB

Gradio 演示

  1. 我们提供了在线 Gradio 演示的代码。您可以运行以下命令在本地启动演示,用于聊天和可视化。
cd PointLLM PYTHONPATH=$PWD python pointllm/eval/chat_gradio.py --model_name RunsenXu/PointLLM_7B_v1.2 --data_name data/objaverse_data
  1. 友情提醒:如果您想公开发布演示,请参考 https://www.gradio.app/guides/sharing-your-app#security-and-file-access。

评估

推理

  1. 运行以下命令进行结果推理。
  2. 在不同基准测试上进行推理的不同命令(以 PointLLM_7B_v1.2 为例):
cd PointLLM export PYTHONPATH=$PWD # Objaverse 上的开放词汇分类 python pointllm/eval/eval_objaverse.py --model_name RunsenXu/PointLLM_7B_v1.2 --task_type classification --prompt_index 0 # 或 --prompt_index 1 # Objaverse 上的物体描述 python pointllm/eval/eval_objaverse.py --model_name RunsenXu/PointLLM_7B_v1.2 --task_type captioning --prompt_index 2 # ModelNet40 上的封闭集零样本分类 python pointllm/eval/eval_modelnet_cls.py --model_name RunsenXu/PointLLM_7B_v1.2 --prompt_index 0 # 或 --prompt_index 1
  1. 请检查这两个脚本的默认命令行参数。您可以指定不同的提示、数据路径和其他参数。
  2. 推理后,结果将保存在 {model_name}/evaluation 中,格式如下:
{ "prompt": "", "results": [ { "object_id": "", "ground_truth": "", "model_output": "", "label_name": "" # 仅用于 modelnet40 的分类 } ] }

ChatGPT/GPT-4 评估

  1. https://platform.openai.com/api-keys 获取您的 OpenAI API 密钥。
  2. 运行以下命令,使用 ChatGPT/GPT-4 并行评估模型输出(大约花费 1.5 到 2.2 美元)。
cd PointLLM export PYTHONPATH=$PWD export OPENAI_API_KEY=sk-**** # Objaverse 上的开放词汇分类 python pointllm/eval/evaluator.py --results_path /path/to/model_output --model_type gpt-4-0613 --eval_type open-free-form-classification --parallel --num_workers 15 # Objaverse 上的物体描述 python pointllm/eval/evaluator.py --results_path /path/to/model_output --model_type gpt-4-0613 --eval_type object-captioning --parallel --num_workers 15

ModelNet40上的封闭集零样本分类

python pointllm/eval/evaluator.py --results_path /path/to/model_output --model_type gpt-3.5-turbo-0613 --eval_type modelnet-close-set-classification --parallel --num_workers 15

3. 评估脚本支持中断和恢复。您可以随时使用`Ctrl+C`中断评估过程。这将保存临时结果。如果评估过程中发生错误,脚本也会保存当前状态。您可以通过再次运行相同的命令从中断处恢复评估。

4. 评估结果将作为另一个字典保存在`{model_name}/evaluation`中。
以下是一些指标的解释:
```bash
"average_score": 我们在论文中报告的GPT评估的描述得分。
"accuracy": 我们在论文中报告的分类准确率,包括ChatGPT在模型输出模糊或不明确时做出的随机选择,以及ChatGPT输出"INVALID"的情况。
"clean_accuracy": 移除那些"INVALID"输出后的分类准确率。
"total_predictions": 预测总数。
"correct_predictions": 正确预测数。
"invalid_responses": ChatGPT输出"INVALID"的次数。

# 调用OpenAI API的一些其他统计数据
"prompt_tokens": ChatGPT/GPT-4提示的总令牌数。
"completion_tokens": ChatGPT/GPT-4完成结果的总令牌数。
"GPT_cost": 整个评估过程的API成本,以美元计算💵。
  1. <b>开放步骤评估。</b>您还可以通过传递--start_eval标志并指定--gpt_type来在推理后立即开始评估。例如:
python pointllm/eval/eval_objaverse.py --model_name RunsenXu/PointLLM_7B_v1.2 --task_type classification --prompt_index 0 --start_eval --gpt_type gpt-4-0613

传统指标评估

  1. 对于物体描述任务,运行以下命令使用传统指标(包括BLEU、ROUGE、METEOR、Sentence-BERT和SimCSE)评估模型输出。
python pointllm/eval/traditional_evaluator.py --results_path /path/to/model_captioning_output
  1. 请注意,我们不建议使用BLEU、ROUGE和METEOR进行评估,因为它们倾向于短描述,无法捕捉语义准确性和多样性。

📝 待办事项

  • 添加带检查点的推理代码。
  • 发布指令跟随数据。
  • 添加训练代码。
  • 添加评估代码。
  • 添加gradio演示代码。

欢迎社区贡献!👇 如果您需要任何支持,请随时提出问题或联系我们。

  • 支持Phi-2 LLM,使PointLLM更易于社区访问。
  • 支持中文LLM,如InternLM。

🔗 引用

如果您觉得我们的工作和这个代码库有帮助,请考虑为这个仓库点星🌟并引用:

@article{xu2023pointllm, title={PointLLM: Empowering Large Language Models to Understand Point Clouds}, author={Xu, Runsen and Wang, Xiaolong and Wang, Tai and Chen, Yilun and Pang, Jiangmiao and Lin, Dahua}, journal={arXiv preprint arXiv:2308.16911}, year={2023} }

📄 许可证

<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="知识共享许可协议" style="border-width:0" src="https://yellow-cdn.veclightyear.com/0a4dffa0/9634ea85-b1e8-46b3-934c-56d9d87ba658.png" /></a> <br /> 本作品采用<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议</a>进行许可。

📚 相关工作

让我们一起为3D大语言模型的发展贡献力量!

  • Point-Bind & Point-LLM: 将点云与Image-Bind对齐,并利用ImageBind-LLM在没有3D指令数据训练的情况下推理多模态输入。
  • 3D-LLM: 使用2D基础模型来编码3D点云的多视图图像。

👏 致谢

  • LLaVA: 我们的代码库基于LLaVA构建。
  • Vicuna: 我们使用Vicuna-7B和Vicuna-13B检查点。
  • Objaverse: 我们使用Objaverse数据集的模型进行训练和评估。
  • Cap3D: 我们使用Cap3D描述数据进行数据生成。
  • ULIP-2: 我们使用ULIP-2预训练我们的点云编码器。

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多