Página del proyecto • ?Arxiv Paper • ?YouTube • ?HuggingFace Demo (WIP) • Cita
LL3DA es un asistente 3D de lenguaje grande que podría responder a interacciones tanto visuales como textuales dentro de entornos 3D complejos .
Los avances recientes en los grandes modelos multimodales (LMM) han hecho posible diversas aplicaciones en las interacciones hombre-máquina. Sin embargo, el desarrollo de LMM que puedan comprender, razonar y planificar en entornos 3D complejos y diversos sigue siendo un tema desafiante, especialmente considerando la demanda de comprender las representaciones 3D de nubes de puntos invariantes de permutación de la escena 3D. Los trabajos existentes buscan ayuda de imágenes de vistas múltiples y proyectan características 2D en un espacio 3D como representaciones de escenas 3D. Sin embargo, esto conduce a una enorme sobrecarga computacional y a una degradación del rendimiento. En este artículo, presentamos LL3DA, un asistente 3D de lenguaje grande que toma la nube de puntos como entrada directa y responde tanto a instrucciones textuales como a indicaciones visuales. Esto ayuda a los LMM a comprender mejor las interacciones humanas y ayuda aún más a eliminar las ambigüedades en escenas 3D abarrotadas. Los experimentos muestran que LL3DA logra resultados notables y supera varios modelos de lenguaje de visión 3D tanto en subtítulos densos 3D como en respuesta a preguntas 3D.
HACER :
Paso 1. Construir dependencias. Nuestro código se prueba con CUDA 11.6 y Python 3.8.16. Para ejecutar los códigos, primero debe instalar los siguientes paquetes:
h5py
scipy
cython
plyfile
'trimesh>=2.35.39,<2.35.40'
'networkx>=2.2,<2.3'
'torch=1.13.1+cu116'
'transformers>=4.37.0'
Después de eso, construye pointnet2
y acelera giou
desde la fuente:
cd third_party/pointnet2
python setup.py install
cd utils
python cython_compile.py build_ext --inplace
Paso 2. Descargue incorporaciones previamente entrenadas. Descargue los pesos de incrustación BERT preprocesados de huggingface y guárdelos en la carpeta ./bert-base-embedding
. Los pesos son los mismos que los del modelo oficial BERT, solo modificamos los nombres de ciertos parámetros.
Nuestro repositorio requiere los datos 3D de ScanNet, las anotaciones en lenguaje natural y los pesos LLM previamente entrenados.
Paso 1. Descargue y prepare los datos de ScanNet 3D.
Actualizaciones 2024-07-01: Puede descargar los datos preprocesados desde aquí.
SCANNET_DIR
a la carpeta de escaneos en data/scannet/batch_load_scannet_data.py
y ejecute los siguientes comandos. cd data/scannet/
python batch_load_scannet_data.py
Paso 2. Prepare las anotaciones del idioma
Para entrenar el modelo, debe preparar anotaciones de lenguaje de ScanRefer
, Nr3D
, ScanQA
y la parte ScanNet de 3D-LLM
.
ScanRefer
. Siga los comandos aquí para descargar el conjunto de datos ScanRefer
.Nr3D
. Siga los comandos aquí para descargar el conjunto de datos Nr3D
y preprocesarlo.ScanQA
. Siga los comandos aquí para descargar el conjunto de datos ScanQA
.3D-LLM
. Los datos se encuentran aquí. También hemos compartido nuestros scripts de preprocesamiento aquí.Actualizaremos los últimos datos publicados (V3) de 3D-LLM.
Finalmente, organice los archivos en las siguientes carpetas:
./data/
ScanRefer/
ScanRefer_filtered_train.json
ScanRefer_filtered_train.txt
ScanRefer_filtered_val.json
ScanRefer_filtered_val.txt
Nr3D/
nr3d_train.json
nr3d_train.txt
nr3d_val.json
nr3d_val.txt
ScanQA/
ScanQA_v1.0_test_w_obj.json
ScanQA_v1.0_test_wo_obj.json
ScanQA_v1.0_train.json
ScanQA_v1.0_val.json
3D_LLM/
3d_llm_embodied_dialogue_filtered_train.json
3d_llm_embodied_dialogue_filtered_val.json
3d_llm_embodied_planning_filtered_train.json
3d_llm_embodied_planning_filtered_val.json
3d_llm_scene_description_train.json
3d_llm_scene_description_val.json
Paso 3. [Opcional] Descargue pesos LLM previamente entrenados. Si su servidor no tiene problemas para descargar automáticamente los pesos de huggingface?, no dude en omitir este paso.
Descargue archivos desde el punto de control opt-1.3b
(o cualquier otro LLM solo para decodificador) en huggingface y guárdelos en el directorio ./facebook/opt-1.3b
. Asegúrese de que los archivos requeridos estén descargados:
./facebook/opt-1.3b/
config.json
merges.txt
pytorch_model.bin
special_tokens_map.json
tokenizer_config.json
vocab.json
Actualizaciones 2024-07-01: La versión publicada es ligeramente diferente de nuestra implementación en papel. En nuestra versión lanzada, estandarizamos el formato de datos y eliminamos las anotaciones de texto duplicadas . Para reproducir los resultados informados, utilice los scripts proporcionados en scripts-v0
para producir las ponderaciones generalistas.
bash scripts-v0/opt-1.3b/train.generalist.sh
Nuestro código debe admitir cualquier LLM solo para decodificadores ( facebook/opt-1.3b
, gpt2-xl
, meta-llama/Llama-2-7b
o incluso los ÚLTIMOS Qwen/Qwen1.5-1.8B
y Qwen/Qwen1.5-4B
). ¡Consulte la siguiente tabla para conocer los LLM recomendados en diferentes escalas! De forma predeterminada, los modelos se entrenan con ocho GPU.
<1 mil millones | 1B-4B | ~7B |
---|---|---|
gpt2 (124m) | TinyLlama-1.1B (1.1b) | facebook/opt-6.7b (6.7b) |
facebook/opt-125m (125m) | facebook/opt-1.3b (1.3b) | meta-llama/Llama-2-7b-hf (6.7b) |
gpt2-medium (355m) | gpt2-xl (1.6b) | Qwen/Qwen1.5-7B (7.7b) |
Qwen/Qwen1.5-0.5B (620m) | Qwen/Qwen1.5-1.8B (1.8b) | - |
gpt2-large (774m) | facebook/opt-2.7b (2.7b) | - |
- | microsoft/phi-2 (2.8b) | - |
- | Qwen/Qwen1.5-4B (3.9b) | - |
Proporcionamos scripts de capacitación en la carpeta scripts
con diferentes backends de LLM. Siéntase libre de modificar los hiperparámetros en esos comandos.
Para otros backends de LLM, modifique los comandos manualmente cambiando --vocab
a otros LLM.
Para entrenar el modelo como generalista 3D: (También hemos subido los pesos previamente entrenados a huggingface).
bash scripts/opt-1.3b/train.generalist.sh
Una vez entrenado el modelo, puede ajustarlo en ScanQA para responder preguntas en 3D:
bash scripts/opt-1.3b/tuning.scanqa.sh
Y en ScanRefer / Nr3D para subtítulos densos en 3D:
bash scripts/opt-1.3b/tuning.scanrefer.sh
bash scripts/opt-1.3b/tuning.nr3d.sh
¡También puede ajustar el modelo para predecir cuadros delimitadores para la detección de objetos de vocabulario abierto!
bash scripts/opt-1.3b/tuning.ovdet.sh
Para evaluar el modelo como generalista 3D:
bash scripts/opt-1.3b/eval.generalist.sh
En ScanQA para responder preguntas en 3D:
bash scripts/opt-1.3b/eval.scanqa.sh
Y en ScanRefer / Nr3D para subtítulos densos en 3D:
bash scripts/opt-1.3b/eval.scanrefer.sh
bash scripts/opt-1.3b/eval.nr3d.sh
Si encuentra útil nuestro código o documento, considere destacarnos y citar:
@misc{chen2023ll3da,
title={LL3DA: Visual Interactive Instruction Tuning for Omni-3D Understanding, Reasoning, and Planning},
author={Sijin Chen and Xin Chen and Chi Zhang and Mingsheng Li and Gang Yu and Hao Fei and Hongyuan Zhu and Jiayuan Fan and Tao Chen},
year={2023},
eprint={2311.18651},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
Gracias a Vote2Cap-DETR, 3D-LLM, Scan2Cap y 3DETR. Tomamos prestados algunos de sus códigos y datos.
Este código se distribuye bajo una LICENCIA MIT. Si hay algún problema con nuestro papel y código, ¡no dudes en abrir un problema!