For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/ai-machine-learning/ai-training-nvidia-neuralangelo-video-to-3d.md.

AI Training - Tutoriel - Transformer une vidéo en modèle 3D grâce à NVIDIA Neuralangelo

Voir en Markdown

Comment utiliser AI Training pour exécuter le projet de recherche NVIDIA Neuralangelo afin d'extraire un modèle 3D d'une vidéo

Objectif

Le projet

Neuralangelo est un projet de recherche mené par NVIDIA permettant d'effectuer de la reconstruction de surface neuronale haute fidélité (High-Fidelity Neural Surface Reconstruction). À partir d'une vidéo d'une scène ou d'un objet, il reconstitue des structures de surface 3D à partir des images clés de la vidéo grâce à un modèle d'IA.

Ce tutoriel

Ce tutoriel a pour objectif de montrer comment exécuter le cas d'usage exemple de NVIDIA avec des jobs OVHcloud AI Training.

Le scénario de ce tutoriel s'appuie sur le dépôt git et le notebook colab de Neuralangelo.

Après avoir récupéré une vidéo d'exemple d'un véhicule jouet, nous verrons comment la faire passer par le modèle Neuralangelo jusqu'à obtenir un fichier maillage 3D.

Le traitement suivra 3 étapes principales :

  • Préparation des données
  • Traitement des données
  • Extraction du modèle 3D

Chaque étape sera exécutée à l'aide d'un job AI Training, et ces jobs partageront leurs données via un volume AI Training synchronisé avec un bucket Object Storage compatible S3*.

Makefile

Un Makefile est fourni ici pour exécuter chacune de ces étapes. Pour chaque étape, la commande sous-jacente sera décrite.

Les 3 étapes principales (prepare, process, extract) ont leurs cibles dans le Makefile construites de la même façon :

  • Soumettre un job AI Training et conserver sa représentation JSON dans le répertoire logs/
  • Utiliser le fichier JSON pour suivre l'ID du job et obtenir son statut ou ses logs

Prérequis

Outils de développement :

  • git
  • make
  • jq
  • blender
  • python/pip

Compte et outils OVHcloud

En pratique

Préparer les projets

Clonez Neuralangelo et initialisez les dépôts git :

Neuralangelo est le projet principal que nous utiliserons, incluant Neuralangelo lui-même ainsi que la configuration des outils tels que COLMAP.

Nous avons besoin de BlenderNeuralangelo pour son outillage au-dessus de Blender. Nous l'utiliserons pour ajuster nos données d'entrée.

make neuralangelo BlenderNeuralangelo

Commandes réelles :

git clone https://github.com/NVlabs/neuralangelo.git
git -C neuralangelo submodule update --init --recursive
git clone https://github.com/mli0603/BlenderNeuralangelo

Installez gdown pour récupérer une vidéo d'exemple Lego™ :

pip install gdown

Téléchargez la vidéo d'exemple :

gdown 1yWoZ4Hk3FgmV3pd34ZbW7jEqgqyJgzHy -O neuralangelo/input/

Configurer un bucket Object Storage compatible S3 avec ovhai

Pour pouvoir partager des données entre les jobs AI Training que nous allons exécuter, ainsi que pour fournir du code et des données à nos workloads, nous devons configurer un datastore AI pointant vers un endpoint compatible S3.

ovhai datastore add s3 NEURALANGELO <s3_endpoint_url> <s3_region> <s3_access_key> --store-credentials-locally
Info

Les informations du datastore (endpoint, région, access_key et secret key) peuvent faire référence à un bucket Object Storage compatible S3 d'OVHcloud ou de tout autre fournisseur.

L'utilisation de --store-credentials-locally est ici nécessaire pour pouvoir envoyer/récupérer des données depuis un bucket, en utilisant la CLI ovhai lors des prochaines étapes.

Consultez cette page pour de l'aide sur l'utilisation compatible S3.

Préparer l'entrée du modèle avec COLMAP

La préparation des données s'appuie sur le processus décrit dans la documentation Neuralangelo.

Envoyer le projet Neuralangelo dans le bucket compatible S3

make push-data

Commande réelle :

ovhai bucket object upload neuralangelo-experiments-lego@NEURALANGELO .
Info

Un bucket devant être unique au sein d'une région compatible S3, le Makefile utilise le nom d'utilisateur actuel dans le nom du bucket (experiments dans cet exemple).

Extraire des images de la vidéo

Neuralangelo travaille sur des images de l'objet. Ces images sont extraites de la vidéo source à l'aide de COLMAP.

Nous déclenchons ici l'extraction d'images à partir de la vidéo d'entrée et générons des données nous permettant (à l'étape suivante) d'ajuster la zone d'intérêt sur laquelle nous demanderons à Neuralangelo de travailler.

Lisez la documentation détaillée sur la préparation des données ici.

make prepare

Commandes réelles :

ovhai job run \
		-o json \
		-g 1 \
		-f ai1-1-gpu \
		-v neuralangelo-experiments-lego@NEURALANGELO/neuralangelo:/neuralangelo:rw:cache \
		docker.io/chenhsuanlin/colmap:3.8 -- \
     		bash -c "cd /neuralangelo && \
			bash projects/neuralangelo/scripts/preprocess.sh lego input/lego.mp4 2 object"
Info

Cela prend environ 8 minutes à exécuter sur 1 GPU ai1-1-gpu (V100S).

Vous pouvez suivre le statut du job d'entraînement à l'aide des commandes suivantes, basées sur ovhai job get et ovhai job logs :

# Get updated info for the job
make prepare-job
# Get Job status
make prepare-status
# Get and follow job logs
make prepare-logs

Une fois le job terminé, nous récupérons les données générées depuis le bucket compatible S3 :

make pull-data

Commande réelle :

ovhai bucket object download neuralangelo-experiments-lego@NEURALANGELO

Ajuster les résultats COLMAP

Pour obtenir de meilleurs résultats, nous devons ajuster la sphère englobante des résultats.

Une documentation détaillée est disponible ici.

Ici, nous avons choisi la méthode Blender en ligne de commande :

make adjust

Commande réelle :

blender --python BlenderNeuralangelo/start_blender_with_addon.py

Suivez le processus décrit ici pour ajuster la sphère englobante.

Envoyez la configuration ajustée dans le bucket compatible S3 :

make push-data

Traiter les données et générer le modèle

Nous déclenchons maintenant un job AI Training exécutant Neuralangelo pour entraîner son modèle sur les données d'entrée préparées lors des étapes précédentes.

make process

Commandes réelles :

ovhai job run \
		-o json \
		-g 1 \
		-f ai1-1-gpu \
		-v neuralangelo-experiments-lego@NEURALANGELO/neuralangelo:/neuralangelo:rw:cache \
		docker.io/chenhsuanlin/neuralangelo:23.04-py3 -- \
      		bash -c "cd /neuralangelo && \
			torchrun --nproc_per_node=1 train.py \
				--logdir=logs/experiments/lego \
				--show_pbar \
				--config=projects/neuralangelo/configs/custom/lego.yaml \
				--max_iter=1000"
Info

Pour limiter le temps passé sur le traitement, les itérations sont fixées à 1000, mais il en faudrait beaucoup plus pour un résultat plus détaillé (dans l'exemple collab de Neuralangelo, elles sont fixées à 20000).

Ici, cette étape devrait prendre environ 5 min sur 1 GPU ai1-1-gpu (1 heure pour 20000 itérations).

Vous pouvez suivre le statut du job d'entraînement à l'aide des commandes suivantes :

# Get updated info for the job
make process-job
# Get Job status
make process-status
# Get and follow job logs
make process-logs

Une fois le job terminé, nous pouvons exécuter l'extraction du modèle 3D, qui fonctionnera avec le modèle que nous venons d'entraîner.

Extraire les maillages du modèle

Le job AI Training que nous exécutons va maintenant générer un fichier de maillage 3D .ply à partir du modèle :

make extract

Commandes réelles :

ovhai job run \
		-o json \
		-g 1 \
		-f ai1-1-gpu \
		-v neuralangelo-experiments-lego@NEURALANGELO/neuralangelo:/neuralangelo:rw:cache \
		docker.io/chenhsuanlin/neuralangelo:23.04-py3 -- \
      		bash -c "cd /neuralangelo && \
		 	torchrun --nproc_per_node=1 projects/neuralangelo/scripts/extract_mesh.py \
				--config=logs/experiments/lego/config.yaml \
				--checkpoint=logs/experiments/lego/epoch_00020_iteration_000001000_checkpoint.pt \
				--output_file=logs/experiments/lego/lego.ply \
				--resolution=2048 --block_res=128 \
				--textured"
Info

Le checkpoint doit être défini avec le dernier fichier .pt généré par l'étape de traitement dans le répertoire neuralangelo/logs/experiments/lego (le nom du fichier est stocké dans neuralangelo/logs/experiments/lego/latest_checkpoint.txt).

Cela prend environ 3 min à exécuter sur 1 GPU ai1-1-gpu.

Vous pouvez suivre le statut du job d'entraînement à l'aide des commandes suivantes :

# Get updated info for the job
make extract-job
# Get Job status
make extract-status
# Get and follow job logs
make extract-logs

Une fois le job terminé, nous récupérons les données générées depuis le bucket compatible S3 :

make pull-data

Le fichier .ply est maintenant disponible dans neuralangelo/logs/experiments/lego/ et nous pouvons désormais l'ouvrir avec Blender.

Aller plus loin

Configuration de Neuralangelo

Un petit sous-ensemble de paramètres est configurable via la commande Make. Chaque cible peut être ajustée à l'aide d'un ensemble de variables définies en haut du fichier. Par exemple, si vous souhaitez exécuter l'étape de traitement avec une autre variante de GPU et sur davantage d'itérations :

make process FLAVOR=h100-1-gpu GPU=2 ITERATIONS=20000

Pour approfondir la configuration de Neuralangelo, celle-ci est issue du fichier neuralangelo/projects/neuralangelo/configs/custom/lego.yaml généré par l'étape de préparation. Les valeurs par défaut sont définies dans neuralangelo/projects/neuralangelo/configs/base.yaml.

Vous pouvez la modifier :

  • soit en utilisant les paramètres de ligne de commande torchrun.
  • soit en éditant directement le fichier et en le synchronisant avec le bucket compatible S3 à l'aide de make data-push.

Rendu des checkpoints

Si le traitement est configuré avec un grand nombre d'itérations, le traitement peut être long. Neuralangelo créant des checkpoints intermédiaires, nous pouvons essayer l'extraction sur n'importe quel modèle intermédiaire.

Pour cela, nous devons utiliser ovhai pour déclencher un data-push sur le job en cours d'exécution afin de synchroniser le contenu compatible S3, puis utiliser la commande make extract décrite précédemment.

Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l’équipe Professional Services.

Nous voulons vos retours !

N’hésitez pas à nous faire part de vos questions, retours et suggestions pour améliorer le service :

*: S3 est une marque déposée d'Amazon Technologies, Inc. Le service d'OVHcloud n'est pas sponsorisé, approuvé ou autrement affilié à Amazon Technologies, Inc.

Cette page vous a-t-elle aidé ?