Page du projet • ?Arxiv Paper • ?YouTube • ?HuggingFace Demo (WIP) • Citation
LL3DA est un assistant 3D en grand langage capable de répondre à la fois aux interactions visuelles et textuelles au sein d'environnements 3D complexes .
Les progrès récents dans les grands modèles multimodaux (LMM) ont rendu possibles diverses applications dans les interactions homme-machine. Cependant, le développement de LMM capables de comprendre, de raisonner et de planifier dans des environnements 3D complexes et diversifiés reste un sujet difficile, en particulier compte tenu de la demande de compréhension des représentations 3D de nuages de points invariants par permutation de la scène 3D. Les œuvres existantes recherchent l'aide d'images multi-vues et projettent des fonctionnalités 2D dans l'espace 3D sous forme de représentations de scènes 3D. Cependant, cela entraîne une énorme surcharge de calcul et une dégradation des performances. Dans cet article, nous présentons LL3DA, un assistant 3D en grand langage qui prend le nuage de points comme entrée directe et répond à la fois aux instructions textuelles et aux invites visuelles. Cela aide les LMM à mieux comprendre les interactions humaines et contribue également à supprimer les ambiguïtés dans les scènes 3D encombrées. Les expériences montrent que LL3DA obtient des résultats remarquables et surpasse divers modèles de langage de vision 3D en matière de sous-titrage dense 3D et de réponse aux questions 3D.
FAIRE :
Étape 1. Créez des dépendances. Notre code est testé avec CUDA 11.6 et Python 3.8.16. Pour exécuter les codes, vous devez d'abord installer les packages suivants :
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'
Après cela, construisez le pointnet2
et giou
accéléré à partir des sources :
cd third_party/pointnet2
python setup.py install
cd utils
python cython_compile.py build_ext --inplace
Étape 2. Téléchargez les intégrations pré-entraînées. Téléchargez les poids d'intégration BERT prétraités à partir de huggingface et stockez-les dans le dossier ./bert-base-embedding
. Les poids sont les mêmes que ceux du modèle officiel BERT, nous avons juste modifié les noms de certains paramètres.
Notre référentiel nécessite les données 3D de ScanNet, les annotations en langage naturel et les poids LLM pré-entraînés.
Étape 1. Téléchargez et préparez les données ScanNet 3D.
Mises à jour 01/07/2024 : Vous pouvez télécharger les données prétraitées à partir d'ici.
SCANNET_DIR
par le dossier scans dans data/scannet/batch_load_scannet_data.py
et exécutez les commandes suivantes. cd data/scannet/
python batch_load_scannet_data.py
Étape 2. Préparer les annotations linguistiques
Pour entraîner le modèle, vous devez préparer les annotations de langage à partir de ScanRefer
, Nr3D
, ScanQA
et de la partie ScanNet de 3D-LLM
.
ScanRefer
. Suivez les commandes ici pour télécharger l'ensemble de données ScanRefer
.Nr3D
. Suivez les commandes ici pour télécharger l'ensemble de données Nr3D
et pré-traitez-le.ScanQA
. Suivez les commandes ici pour télécharger l'ensemble de données ScanQA
.3D-LLM
. Les données se trouvent ici. Nous avons également partagé nos scripts de prétraitement ici.Nous mettrons à jour les dernières données publiées (V3) de 3D-LLM.
Enfin, organisez les fichiers dans les dossiers suivants :
./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
Étape 3. [Facultatif] Téléchargez les poids LLM pré-entraînés. Si votre serveur n'a aucun problème à télécharger automatiquement les poids depuis huggingface ?, n'hésitez pas à ignorer cette étape.
Téléchargez les fichiers à partir du point de contrôle opt-1.3b
(ou de tout autre LLM réservé aux décodeurs) sur huggingface et stockez-les dans le répertoire ./facebook/opt-1.3b
. Assurez-vous que les fichiers requis sont téléchargés :
./facebook/opt-1.3b/
config.json
merges.txt
pytorch_model.bin
special_tokens_map.json
tokenizer_config.json
vocab.json
Mises à jour 01/07/2024 : La version publiée est légèrement différente de notre implémentation papier. Dans notre version publiée, nous avons standardisé le format des données et supprimé les annotations de texte en double . Pour reproduire nos résultats rapportés, veuillez utiliser les scripts fournis dans scripts-v0
pour produire les poids généralistes.
bash scripts-v0/opt-1.3b/train.generalist.sh
Notre code doit prendre en charge tous les LLM réservés aux décodeurs ( facebook/opt-1.3b
, gpt2-xl
, meta-llama/Llama-2-7b
ou même les DERNIERS Qwen/Qwen1.5-1.8B
et Qwen/Qwen1.5-4B
). Consultez le tableau suivant pour connaître les LLM recommandés à différentes échelles ! Par défaut, les modèles sont entraînés avec huit GPU.
<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 (774 m) | facebook/opt-2.7b (2.7b) | - |
- | microsoft/phi-2 (2.8b) | - |
- | Qwen/Qwen1.5-4B (3.9b) | - |
Nous fournissons des scripts de formation dans le dossier scripts
avec différents backends LLM. N'hésitez pas à modifier les hyper paramètres dans ces commandes.
Pour les autres backends LLM, veuillez modifier les commandes manuellement en remplaçant --vocab
par d'autres LLM.
Pour entraîner le modèle en tant que généraliste 3D : (Nous avons également téléchargé les poids pré-entraînés sur huggingface.)
bash scripts/opt-1.3b/train.generalist.sh
Une fois le modèle entraîné, vous pouvez régler le modèle sur ScanQA pour la réponse aux questions 3D :
bash scripts/opt-1.3b/tuning.scanqa.sh
Et, sur ScanRefer / Nr3D pour le sous-titrage dense 3D :
bash scripts/opt-1.3b/tuning.scanrefer.sh
bash scripts/opt-1.3b/tuning.nr3d.sh
Vous pouvez également régler le modèle pour prédire les cadres de délimitation pour la détection d'objets de vocabulaire ouvert !
bash scripts/opt-1.3b/tuning.ovdet.sh
Pour évaluer le modèle en tant que généraliste 3D :
bash scripts/opt-1.3b/eval.generalist.sh
Sur ScanQA pour la réponse aux questions 3D :
bash scripts/opt-1.3b/eval.scanqa.sh
Et, sur ScanRefer / Nr3D pour le sous-titrage dense 3D :
bash scripts/opt-1.3b/eval.scanrefer.sh
bash scripts/opt-1.3b/eval.nr3d.sh
Si vous trouvez notre code ou notre article utile, pensez à nous mettre en vedette et à citer :
@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}
}
Merci à Vote2Cap-DETR, 3D-LLM, Scan2Cap et 3DETR. Nous empruntons certains de leurs codes et données.
Ce code est distribué sous une LICENCE MIT. S'il y a un problème concernant notre papier et notre code, n'hésitez pas à ouvrir un numéro !