Yuan Tang Xu Han Xianzhi Li* Qiao Yu Yixue Hao Long Hu Min Chen
화중과학기술대학교 화남이공대학교
ACM MM 2024
참고: MiniGPT-3D는 효율적인 3D-LLM의 첫 번째 단계를 수행합니다. MiniGPT-3D가 이 커뮤니티에 새로운 통찰력을 가져올 수 있기를 바랍니다.
결과는 GreenPLM에서 참조한 것입니다.
더 많은 대화 예시를 보려면 우리의 논문을 참조하세요.
우리는 다음 환경에서 코드를 테스트합니다.
시작하려면:
이 저장소를 복제하세요.
git clone https://github.com/TangYuan96/MiniGPT-3D.git
cd MiniGPT-3D
패키지 설치
기본적으로 conda가 설치되어 있습니다.
conda env create -f environment.yml
conda activate minigpt_3d
bash env_install.sh
{Objaverse_ID}_8192.npy
라는 660K 포인트 클라우드 파일이 포함된 8192_npy
라는 폴더가 생성됩니다. 각 파일은 차원(8192, 6)을 갖는 numpy 배열입니다. 여기서 처음 3개 차원은 xyz
이고 마지막 3개 차원은 [0, 1] 범위의 rgb
입니다. cat Objaverse_660K_8192_npy_split_a * > Objaverse_660K_8192_npy.tar.gz
tar -xvf Objaverse_660K_8192_npy.tar.gz
8192_npy
폴더의 모든 파일을 ./data/objaverse_data
폴더로 이동합니다../data/anno_data
폴더로 이동합니다.modelnet40_test_8192pts_fps.dat
./data/modelnet40_data
폴더로 이동합니다.마지막으로 전체 데이터 디렉터리 구조는 다음과 같아야 합니다.
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
| .......
훈련 및 추론 중에 MiniGPT-3D에 필요한 모델 가중치를 분류합니다.
params_weight
폴더를 MiniGPT-3D
프로젝트 폴더로 이동합니다.마지막으로 전체 데이터 디렉터리 구조는 다음과 같아야 합니다.
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
| .......
다음 명령을 실행하여 로컬 Gradio 대화 데모를 시작할 수 있습니다.
python UI_demo.py --cfg-path ./eval_configs/MiniGPT_3D_conv_UI_demo.yaml --gpu-id 0
그런 다음 http://127.0.0.1:7860/
링크를 브라우저에 복사하고 지원되는 Objaverse 개체 ID(660K 개체)를 입력하거나 하나의 개체 파일(.ply 또는 .npy)을 업로드하여 MiniGPT-3D와 통신할 수 있습니다. .
예: 개체 ID를 입력합니다.
예: 객체 파일 업로드:
각 스테이지의 기본 출력 경로를 사용하려면 다음 단계를 무시해도 됩니다.
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
단지 논문의 결과를 확인하려는 경우 다음 단계를 무시할 수 있습니다.
Stage III의 출력 경로를 Line 8로 설정하세요.
Stage IV의 출력 경로를 Line 9로 설정하세요.
객체에 대한 개방형 어휘 분류 결과를 출력합니다.
# 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
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
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
GreenPLM에서는 클로즈 소스 LLM인 GPT-3.5 및 GPT-4에 두 가지 주요 단점이 있다는 사실을 발견했습니다. 즉, 일관되지 않은 API 버전과 높은 평가 비용(1회 평가당 ~35 CNY 또는 5 USD)입니다 . 예를 들어 PointLLM과 MiniGPT-3D에 사용된 GPT-3.5-turbo-0613 모델은 더 이상 유지 관리되지 않으므로 결과를 복제하기가 어렵습니다 .
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
GreenPLM에서는 평가를 비용 효율적으로 만들고 결과를 일관적으로 재현 가능하게 만들기 위해 GPT-4 레벨 오픈 소스 Qwen2-72B-Instruct를 사용하여 새로운 3D 객체 분류 및 캡션 벤치마크를 제안합니다.
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
객체 캡션 작업의 경우 다음 명령을 실행하여 기존 측정항목인 Sentence-BERT 및 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
여기 Line 8에서 Stage III의 출력 경로를 설정하세요.
여기 Line 9에서 Stage IV의 출력 경로를 설정하세요.
다음 명령을 실행하여 로컬 Gradio 대화 데모를 시작할 수 있습니다.
python UI_demo.py --cfg-path ./eval_configs/MiniGPT_3D_conv_UI_demo.yaml --gpu-id 0
우리의 작업이 도움이 되었다고 생각하시면 다음을 인용해 보십시오.
@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 }
}
이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스를 따릅니다.
함께 3D용 LLM을 훌륭하게 만들어 봅시다!
훌륭한 작업과 저장소에 대해 PointLLM, TinyGPT-V, MiniGPT-4 및 Octavius의 작성자에게 감사의 말씀을 전하고 싶습니다.