ユアン・タン・シュー・ハン・シアンジー・リー*チャオ・ユー・イーシュエ・ハオ・ロン・フー・ミン・チェン
華中科技大学 華南理工大学
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 オブジェクト) を入力するか、1 つのオブジェクト ファイル (.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 の出力パスを 8 行目に設定します。
Stage IV の出力パスを 9 行目に設定します。
公開語彙分類の結果を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
クローズセットゼロショット分類結果を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
オブジェクトキャプションの結果をオブジェクトに出力します
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 には 2 つの大きな欠点があることに気付きました。それは、一貫性のない 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
ここの 8 行目で Stage III の出力パスを設定します。
ここの 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 の作者の素晴らしい作品とリポジトリに感謝します。