Página do projeto • ?Arxiv Paper • ?YouTube • ?HuggingFace Demo (WIP) • Citação
LL3DA é um assistente 3D de linguagem grande que pode responder a interações visuais e textuais em ambientes 3D complexos .
Avanços recentes em Grandes Modelos Multimodais (LMM) tornaram possível diversas aplicações em interações homem-máquina. No entanto, o desenvolvimento de LMMs que possam compreender, raciocinar e planejar em ambientes 3D complexos e diversos continua sendo um tópico desafiador, especialmente considerando a demanda para a compreensão de representações 3D de nuvem de pontos invariantes à permutação da cena 3D. Os trabalhos existentes buscam a ajuda de imagens de visualização múltipla e projetam recursos 2D no espaço 3D como representações de cenas 3D. Isso, no entanto, leva a uma enorme sobrecarga computacional e degradação de desempenho. Neste artigo, apresentamos o LL3DA, um assistente 3D de linguagem grande que utiliza a nuvem de pontos como entrada direta e responde a instruções textuais e visuais. Isso ajuda os LMMs a compreender melhor as interações humanas e ajuda ainda mais a remover as ambigüidades em cenas 3D desordenadas. Experimentos mostram que o LL3DA alcança resultados notáveis e supera vários modelos de linguagem de visão 3D tanto em legendas densas em 3D quanto em respostas a perguntas em 3D.
PENDÊNCIA :
Etapa 1. Construir dependências. Nosso código é testado com CUDA 11.6 e Python 3.8.16. Para executar os códigos, você deve primeiro instalar os seguintes pacotes:
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'
Depois disso, construa o pointnet2
e acelere giou
a partir da fonte:
cd third_party/pointnet2
python setup.py install
cd utils
python cython_compile.py build_ext --inplace
Etapa 2. Baixe embeddings pré-treinados. Baixe os pesos de incorporação BERT pré-processados de huggingface e armazene-os na pasta ./bert-base-embedding
. Os pesos são os mesmos do modelo oficial do BERT, apenas modificamos os nomes de alguns parâmetros.
Nosso repositório requer os dados 3D do ScanNet, as anotações em linguagem natural e os pesos LLM pré-treinados.
Etapa 1. Baixe e prepare os dados ScanNet 3D.
Atualizações 01/07/2024: Você pode baixar os dados pré-processados aqui.
SCANNET_DIR
para a pasta scans em data/scannet/batch_load_scannet_data.py
e execute os comandos a seguir. cd data/scannet/
python batch_load_scannet_data.py
Etapa 2. Preparar anotações de idioma
Para treinar o modelo, é necessário preparar anotações de linguagem de ScanRefer
, Nr3D
, ScanQA
e da parte ScanNet do 3D-LLM
.
ScanRefer
. Siga os comandos aqui para baixar o conjunto de dados ScanRefer
.Nr3D
. Siga os comandos aqui para baixar o conjunto de dados Nr3D
e pré-processá-lo.ScanQA
. Siga os comandos aqui para baixar o conjunto de dados ScanQA
.3D-LLM
. Os dados estão localizados aqui. Também compartilhamos nossos scripts de pré-processamento aqui.Atualizaremos os dados mais recentes lançados (V3) do 3D-LLM.
Por fim, organize os arquivos nas seguintes pastas:
./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
Etapa 3. [Opcional] Baixe pesos LLM pré-treinados. Se o seu servidor não tiver problemas para baixar pesos automaticamente do huggingface?, sinta-se à vontade para pular esta etapa.
Baixe arquivos do ponto de verificação opt-1.3b
(ou qualquer outro LLM somente decodificador) em huggingface e armazene-os no diretório ./facebook/opt-1.3b
. Certifique-se de que os arquivos necessários foram baixados:
./facebook/opt-1.3b/
config.json
merges.txt
pytorch_model.bin
special_tokens_map.json
tokenizer_config.json
vocab.json
Atualizações 01/07/2024: A versão lançada é um pouco diferente de nossa implementação em papel. Em nossa versão lançada, padronizamos o formato dos dados e eliminamos anotações de texto duplicadas . Para reproduzir nossos resultados relatados, use os scripts fornecidos em scripts-v0
para produzir os pesos generalistas.
bash scripts-v0/opt-1.3b/train.generalist.sh
Nosso código deve suportar qualquer LLMs somente decodificador ( facebook/opt-1.3b
, gpt2-xl
, meta-llama/Llama-2-7b
ou mesmo o LATEST Qwen/Qwen1.5-1.8B
e Qwen/Qwen1.5-4B
). Confira a tabela a seguir para LLMs recomendados em diferentes escalas! Por padrão, os modelos são treinados com oito GPUs.
<1B | 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) | - |
Fornecemos scripts de treinamento na pasta scripts
com diferentes back-ends LLM. Sinta-se à vontade para modificar os hiperparâmetros nesses comandos.
Para outros backends LLM, modifique os comandos manualmente alterando --vocab
para outros LLMs.
Para treinar o modelo como generalista 3D: (Também carregamos os pesos pré-treinados para huggingface.)
bash scripts/opt-1.3b/train.generalist.sh
Depois que o modelo for treinado, você poderá ajustá-lo no ScanQA para responder perguntas em 3D:
bash scripts/opt-1.3b/tuning.scanqa.sh
E, no ScanRefer / Nr3D para legendas densas em 3D:
bash scripts/opt-1.3b/tuning.scanrefer.sh
bash scripts/opt-1.3b/tuning.nr3d.sh
Você também pode ajustar o modelo para prever caixas delimitadoras para detecção de objetos de vocabulário aberto!
bash scripts/opt-1.3b/tuning.ovdet.sh
Para avaliar o modelo como generalista 3D:
bash scripts/opt-1.3b/eval.generalist.sh
No ScanQA para resposta a perguntas 3D:
bash scripts/opt-1.3b/eval.scanqa.sh
E, no ScanRefer / Nr3D para legendas densas em 3D:
bash scripts/opt-1.3b/eval.scanrefer.sh
bash scripts/opt-1.3b/eval.nr3d.sh
Se você achar nosso código ou artigo útil, considere marcar-nos com uma estrela e 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}
}
Graças a Vote2Cap-DETR, 3D-LLM, Scan2Cap e 3DETR. Pegamos emprestados alguns de seus códigos e dados.
Este código é distribuído sob uma LICENÇA MIT. Se houver algum problema em relação ao nosso artigo e código, fique à vontade para abrir um problema!