Юань Тан Сюй Хань Сяньчжи Ли * Цяо Юй Исюэ Хао Лун Ху Минь Чен
Хуачжунский университет науки и технологий Южно-Китайский технологический университет
АКМ ММ 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
8192_npy
, содержащая 660 тыс. файлов облаков точек с именем {Objaverse_ID}_8192.npy
. Каждый файл представляет собой массив numpy с размерами (8192, 6), где первые три измерения — это xyz
, а последние три измерения — rgb
в диапазоне [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
в папку ./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
| .......
Вы можете запустить следующую команду, чтобы запустить демонстрацию локального градиентного разговора:
python UI_demo.py --cfg-path ./eval_configs/MiniGPT_3D_conv_UI_demo.yaml --gpu-id 0
Затем скопируйте ссылку http://127.0.0.1:7860/
в свой браузер. Вы можете ввести поддерживаемый идентификатор объекта Objaverse (660 тыс. объектов) или загрузить один объектный файл (.ply или .npy), чтобы общаться с нашим MiniGPT-3D. .
Пример: Введите идентификатор объекта:
Пример: Загрузите объектный файл:
Если вы хотите использовать путь вывода по умолчанию для каждого этапа, вы можете игнорировать следующие шаги.
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
Если вы просто хотите проверить результаты нашей статьи, вы можете проигнорировать следующие шаги:
Установите выходной путь этапа III здесь, в строке 8.
Установите выходной путь этапа IV здесь, в строке 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
Вывод результата подписи объекта на обратной стороне
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 и высокие затраты на оценку (~35 юаней или 5 долларов США за одну оценку) . Например, модель GPT-3.5-turbo-0613, используемая в PointLLM и нашем MiniGPT-3D , больше не поддерживается, что затрудняет воспроизведение результатов .
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 мы предлагаем новые тесты классификации 3D-объектов и подписей с использованием Qwen2-72B-Instruct с открытым исходным кодом уровня GPT-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_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
Установите выходной путь этапа III здесь, в строке 8.
Установите выходной путь этапа IV здесь, в строке 9.
Вы можете запустить следующую команду, чтобы запустить демонстрацию локального градиентного разговора:
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 }
}
Эта работа находится под международной лицензией Creative Commons Attribution-NonCommercial-ShareAlike 4.0.
Давайте вместе сделаем LLM для 3D великолепным!
Мы хотели бы поблагодарить авторов PointLLM, TinyGPT-V, MiniGPT-4 и Octavius за их замечательные работы и репозитории.