AI Training - Tutoriel - Transformer une vidéo en modèle 3D grâce à NVIDIA Neuralangelo
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
- Accès à l'
- La CLI ovhai installée
- Un projet AI Training créé au sein d'un projet Public Cloud sur votre compte OVHcloud
- Un utilisateur pour AI Training
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.
Commandes réelles :
Installez gdown pour récupérer une vidéo d'exemple Lego™ :
Téléchargez la vidéo d'exemple :
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.
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
Commande réelle :
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.
Commandes réelles :
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 :
Une fois le job terminé, nous récupérons les données générées depuis le bucket compatible S3 :
Commande réelle :
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 :
Commande réelle :
Suivez le processus décrit ici pour ajuster la sphère englobante.
Envoyez la configuration ajustée dans le bucket compatible S3 :
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.
Commandes réelles :
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 :
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 :
Commandes réelles :
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 :
Une fois le job terminé, nous récupérons les données générées depuis le bucket compatible S3 :
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 :
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 :
- Sur le serveur Discord OVHcloud
*: 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.