Yuan Tang Xu Han Xianzhi Li * Qiao Yu Yixue Hao Long Hu Min Chen
Universidade de Ciência e Tecnologia de Huazhong Universidade de Tecnologia do Sul da China
ACM MM 2024
Nota: MiniGPT-3D dá o primeiro passo no 3D-LLM eficiente , esperamos que MiniGPT-3D possa trazer novos insights para esta comunidade.
Os resultados referem-se ao GreenPLM.
Consulte nosso artigo para obter mais exemplos de diálogo.
Testamos nossos códigos no seguinte ambiente:
Para começar:
Clone este repositório.
git clone https://github.com/TangYuan96/MiniGPT-3D.git
cd MiniGPT-3D
Instalar pacotes
Por padrão, você instalou o conda.
conda env create -f environment.yml
conda activate minigpt_3d
bash env_install.sh
8192_npy
contendo arquivos de nuvem de pontos de 660 mil chamados {Objaverse_ID}_8192.npy
. Cada arquivo é uma matriz numpy com dimensões (8192, 6), onde as três primeiras dimensões são xyz
e as três últimas dimensões são rgb
no intervalo [0, 1]. cat Objaverse_660K_8192_npy_split_a * > Objaverse_660K_8192_npy.tar.gz
tar -xvf Objaverse_660K_8192_npy.tar.gz
8192_npy
para a pasta ./data/objaverse_data
../data/anno_data
.modelnet40_test_8192pts_fps.dat
para a pasta ./data/modelnet40_data
.Finalmente, a estrutura geral do diretório de dados deve ser:
MiniGPT-3D/data
|-- anno_data
| |-- PointLLM_brief_description_660K.json
| |-- PointLLM_brief_description_660K_filtered.json
| |-- PointLLM_brief_description_val_200_GT.json
| |-- PointLLM_complex_instruction_70K.json
| |-- object_ids_660K.txt
| `-- val_object_ids_3000.txt
|-- modelnet40_data
| |-- modelnet40_test_8192pts_fps.dat
|-- objaverse_data
| |-- 00000054c36d44a2a483bdbff31d8edf_8192.npy
| |-- 00001ec0d78549e1b8c2083a06105c29_8192.npy
| .......
Classificamos os pesos do modelo exigidos pelo MiniGPT-3D durante o treinamento e inferência.
params_weight
para a pasta do projeto MiniGPT-3D
.Finalmente, a estrutura geral do diretório de dados deve ser:
MiniGPT-3D
|-- params_weight
| |-- MiniGPT_3D_stage_3 # Our MiniGPT-3D stage III weight, needed to verify the results of paper
| |-- MiniGPT_3D_stage_4 # Our MiniGPT-3D stage IV weight, Needed to verify the results of paper
| |-- Phi_2 # LLM weight
| |-- TinyGPT_V_stage_3 # 2D-LLM weights including loRA & Norm of LLM and projector
| |-- all-mpnet-base-v2 # Used in the caption traditional evaluation
| |-- bert-base-uncased # Used in initialize Q-former
| |-- pc_encoder # point cloud encoder
| `-- sup-simcse-roberta-large # Used in the caption traditional evaluation
|-- train_configs
| `-- MiniGPT_3D
| .......
Você pode executar o seguinte comando para iniciar uma demonstração de conversa gradio local:
python UI_demo.py --cfg-path ./eval_configs/MiniGPT_3D_conv_UI_demo.yaml --gpu-id 0
Em seguida, copie o link http://127.0.0.1:7860/
para o seu navegador, você pode inserir o ID do objeto Objaverse compatível (660 mil objetos) ou fazer upload de um arquivo de objeto (.ply ou .npy) para conversar com nosso MiniGPT-3D .
Exemplo: Insira o ID do objeto:
Exemplo: Faça upload do arquivo objeto:
Se quiser usar o caminho de saída padrão de cada estágio, você pode ignorar as etapas a seguir.
CUDA_VISIBLE_DEVICES=0 python train.py --cfg-path ./train_configs/MiniGPT_3D/stage_1.yaml
CUDA_VISIBLE_DEVICES=0 python train.py --cfg-path ./train_configs/MiniGPT_3D/stage_2.yaml
CUDA_VISIBLE_DEVICES=0 python train.py --cfg-path ./train_configs/MiniGPT_3D/stage_3.yaml
CUDA_VISIBLE_DEVICES=0 python train.py --cfg-path ./train_configs/MiniGPT_3D/stage_4.yaml
Se você deseja apenas verificar os resultados do nosso artigo, pode ignorar as seguintes etapas:
Defina o caminho de saída do Estágio III aqui na Linha 8.
Defina o caminho de saída do Estágio IV aqui na Linha 9.
Produza o resultado da classificação de vocabulário aberto no objaverse
# Prompt 0:
export PYTHONPATH= $PWD
CUDA_VISIBLE_DEVICES=0 python pointllm/eval/eval_objaverse.py --out_path ./output/test --task_type classification --cfg-path ./eval_configs/benchmark_evaluation_paper.yaml --prompt_index 0
# Prompt 1:
export PYTHONPATH= $PWD
CUDA_VISIBLE_DEVICES=0 python pointllm/eval/eval_objaverse.py --out_path ./output/test --task_type classification --cfg-path ./eval_configs/benchmark_evaluation_paper.yaml --prompt_index 1
Produza o resultado da classificação de disparo zero próximo no ModelNet40
# Prompt 0:
export PYTHONPATH= $PWD
CUDA_VISIBLE_DEVICES=0 python pointllm/eval/eval_modelnet_cls.py --out_path ./output/test --cfg-path ./eval_configs/benchmark_evaluation_paper.yaml --prompt_index 0
# Prompt 1:
export PYTHONPATH= $PWD
CUDA_VISIBLE_DEVICES=0 python pointllm/eval/eval_modelnet_cls.py --out_path ./output/test --cfg-path ./eval_configs/benchmark_evaluation_paper.yaml --prompt_index 1
Produza o resultado da legenda do objeto no objaverse
export PYTHONPATH= $PWD
CUDA_VISIBLE_DEVICES=0 python pointllm/eval/eval_objaverse.py --out_path ./output/test --task_type captioning --cfg-path ./eval_configs/benchmark_evaluation_paper.yaml --prompt_index 2
No GreenPLM, notamos que os LLMs de código próximo GPT-3.5 e GPT-4 têm duas desvantagens principais: versões de API inconsistentes e altos custos de avaliação (~35 CNY ou 5 USD por avaliação) . Por exemplo, o modelo GPT-3.5-turbo-0613 usado no PointLLM e no nosso MiniGPT-3D não é mais mantido, dificultando a replicação dos resultados .
export PYTHONPATH= $PWD
export OPENAI_API_KEY=sk- ****
python pointllm/eval/evaluator.py --results_path /path/to/evaluation/PointLLM_brief_description_val_200_GT_Objaverse_classification_prompt0.json --model_type gpt-4-0613 --eval_type open-free-form-classification --parallel --num_workers 15
export PYTHONPATH= $PWD
export OPENAI_API_KEY=sk- ****
python pointllm/eval/evaluator.py --results_path /path/to/evaluation/PointLLM_brief_description_val_200_GT_Objaverse_classification_prompt1.json --model_type gpt-4-0613 --eval_type open-free-form-classification --parallel --num_workers 15
export PYTHONPATH= $PWD
export OPENAI_API_KEY=sk- ****
python pointllm/eval/evaluator.py --results_path /path/to/evaluation/ModelNet_classification_prompt0.json --model_type gpt-3.5-turbo-0613 --eval_type modelnet-close-set-classification --parallel --num_workers 15
export PYTHONPATH= $PWD
export OPENAI_API_KEY=sk- ****
python pointllm/eval/evaluator.py --results_path /path/to/evaluation/ModelNet_classification_prompt1.json --model_type gpt-3.5-turbo-0613 --eval_type modelnet-close-set-classification --parallel --num_workers 15
export PYTHONPATH= $PWD
export OPENAI_API_KEY=sk- ****
python pointllm/eval/evaluator.py --results_path /path/to/evaluation/PointLLM_brief_description_val_200_GT_Objaverse_captioning_prompt2.json --model_type gpt-4-0613 --eval_type object-captioning --parallel --num_workers 15
No GreenPLM, propomos novos benchmarks de classificação e legenda de objetos 3D usando Qwen2-72B-Instruct de código aberto de nível GPT-4 para tornar as avaliações econômicas e os resultados consistentemente reproduzíveis .
export PYTHONPATH= $PWD
export DASHSCOPE_API_KEY=sk-xxx
python ./pointllm/eval/evaluator_opensource_llm_QwenAPI.py
--results_path /path/to/evaluation/PointLLM_brief_description_val_200_GT_Objaverse_classification_prompt0.json
--eval_type open-free-form-classification
--model_type qwen2-72b-instruct
--parallel --num_workers 4
export PYTHONPATH= $PWD
export DASHSCOPE_API_KEY=sk-xxx
python ./pointllm/eval/evaluator_opensource_llm_QwenAPI.py
--results_path /path/to/evaluation/PointLLM_brief_description_val_200_GT_Objaverse_classification_prompt1.json
--eval_type open-free-form-classification
--model_type qwen2-72b-instruct
--parallel --num_workers 4
export PYTHONPATH= $PWD
export DASHSCOPE_API_KEY=sk-xxx
python ./pointllm/eval/evaluator_opensource_llm_QwenAPI.py
--results_path /path/to/evaluation/ModelNet_classification_prompt0.json
--eval_type modelnet-close-set-classification
--model_type qwen2-72b-instruct
--parallel --num_workers 4
export PYTHONPATH= $PWD
export DASHSCOPE_API_KEY=sk-xxx
python ./pointllm/eval/evaluator_opensource_llm_QwenAPI.py
--results_path /path/to/evaluation/ModelNet_classification_prompt1.json
--eval_type modelnet-close-set-classification
--model_type qwen2-72b-instruct
--parallel --num_workers 4
export PYTHONPATH= $PWD
export DASHSCOPE_API_KEY=sk-xxx
python ./pointllm/eval/evaluator_opensource_llm_QwenAPI.py
--results_path /path/to/evaluation/PointLLM_brief_description_val_200_GT_Objaverse_captioning_prompt2.json
--eval_type object-captioning
--model_type qwen2-72b-instruct
--parallel --num_workers 4
Para a tarefa de legenda de objetos, execute o comando a seguir para avaliar as saídas do modelo com métricas tradicionais Sentença-BERT e SimCSE.
CUDA_VISIBLE_DEVICES=0 python pointllm/eval/traditional_evaluator.py --results_path /path/to/evaluation/PointLLM_brief_description_val_200_GT_Objaverse_captioning_prompt2.json
Defina o caminho de saída do Estágio III aqui na Linha 8.
Defina o caminho de saída do Estágio IV aqui na Linha 9.
Você pode executar o seguinte comando para iniciar uma demonstração de conversa gradio local:
python UI_demo.py --cfg-path ./eval_configs/MiniGPT_3D_conv_UI_demo.yaml --gpu-id 0
Se você achar nosso trabalho útil, considere citar:
@article { tang2024minigpt ,
title = { MiniGPT-3D: Efficiently Aligning 3D Point Clouds with Large Language Models using 2D Priors } ,
author = { Tang, Yuan and Han, Xu and Li, Xianzhi and Yu, Qiao and Hao, Yixue and Hu, Long and Chen, Min } ,
journal = { arXiv preprint arXiv:2405.01413 } ,
year = { 2024 }
}
Este trabalho está sob a licença Creative Commons Atribuição-NãoComercial-Compartilhamento pela mesma Licença 4.0 Internacional.
Juntos, vamos tornar o LLM para 3D excelente!
Gostaríamos de agradecer aos autores de PointLLM, TinyGPT-V, MiniGPT-4 e Octavius por seus excelentes trabalhos e repositórios.