Bernhard Kerbl*, Georgios Kopanas*, Thomas Leimkühler, George Drettakis (* indique une contribution égale)
| Page Web | Article complet | Vidéo | Autres publications GRAPHDECO | Page du projet FUNGRAPH |
| T&T+DB COLMAP (650 Mo) | Modèles pré-entraînés (14 Go) | Visionneuses pour Windows (60 Mo) | Images d'évaluation (7 Go) |
Ce référentiel contient l'implémentation officielle des auteurs associée à l'article « 3D Gaussian Splatting for Real-Time Radiance Field Rendering », qui peut être trouvé ici. Nous fournissons en outre les images de référence utilisées pour créer les métriques d'erreur rapportées dans l'article, ainsi que des modèles pré-entraînés récemment créés.
Résumé : Les méthodes Radiance Field ont récemment révolutionné la synthèse de nouvelles vues de scènes capturées avec plusieurs photos ou vidéos. Cependant, pour obtenir une qualité visuelle élevée, il faut toujours des réseaux neuronaux dont la formation et le rendu sont coûteux, tandis que les méthodes récentes plus rapides sacrifient inévitablement la vitesse pour la qualité. Pour des scènes illimitées et complètes (plutôt que des objets isolés) et un rendu en résolution 1080p, aucune méthode actuelle ne permet d'atteindre des taux d'affichage en temps réel. Nous introduisons trois éléments clés qui nous permettent d'obtenir une qualité visuelle de pointe tout en maintenant des temps de formation compétitifs et, surtout, permettent une synthèse de nouvelle vue de haute qualité en temps réel (≥ 30 ips) à une résolution de 1080p. Tout d'abord, à partir de points clairsemés produits lors de l'étalonnage de la caméra, nous représentons la scène avec des Gaussiennes 3D qui préservent les propriétés souhaitables des champs de radiance volumétriques continus pour l'optimisation de la scène tout en évitant les calculs inutiles dans un espace vide ; Deuxièmement, nous effectuons une optimisation/contrôle de densité entrelacée des gaussiennes 3D, en optimisant notamment la covariance anisotrope pour obtenir une représentation précise de la scène ; Troisièmement, nous développons un algorithme de rendu rapide sensible à la visibilité qui prend en charge les éclaboussures anisotropes et accélère la formation et permet le rendu en temps réel. Nous démontrons une qualité visuelle de pointe et un rendu en temps réel sur plusieurs ensembles de données établis.
@Article{kerbl3Dgaussians, author = {Kerbl, Bernhard and Kopanas, Georgios and Leimk{"u}hler, Thomas and Drettakis, George}, title = {3D Gaussian Splatting for Real-Time Radiance Field Rendering}, journal = {ACM Transactions on Graphics}, number = {4}, volume = {42}, month = {July}, year = {2023}, url = {https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/} }
Cette recherche a été financée par la subvention ERC Advanced FUNGRAPH No 788065. Les auteurs remercient Adobe pour ses généreux dons, l'infrastructure OPAL de l'Université Côte d'Azur et les ressources HPC de GENCI-IDRIS (Grant 2022-AD011013409). Les auteurs remercient les réviseurs anonymes pour leurs précieux commentaires, P. Hedman et A. Tewari pour la relecture des versions antérieures, ainsi que T. Müller, A. Yu et S. Fridovich-Keil pour leur aide dans les comparaisons.
Nous disposons de ressources limitées pour maintenir et mettre à jour le code. Cependant, nous avons ajouté quelques nouvelles fonctionnalités depuis la version originale qui s'inspirent de certains des excellents travaux effectués par de nombreux autres chercheurs sur 3DGS. Nous ajouterons d'autres fonctionnalités dans la limite de nos ressources.
Mise à jour d'octobre 2024 : Nous avons intégré l'accélération de la vitesse d'entraînement et l'avons rendu compatible avec la régularisation en profondeur, l'anti-aliasing et la compensation d'exposition. Nous avons amélioré la visionneuse en temps réel SIBR en corrigeant des bugs et en ajoutant des fonctionnalités dans la vue supérieure qui permettent de visualiser les caméras d'entrée et utilisateur.
Mise à jour du printemps 2024 : Orange Labs a aimablement ajouté le support OpenXR pour la visualisation VR.
Jonathan Stephens a réalisé un fantastique didacticiel étape par étape pour configurer le gaussien Splatting sur votre machine, ainsi que des instructions pour créer des ensembles de données utilisables à partir de vidéos. Si les instructions ci-dessous sont trop sèches pour vous, allez-y et consultez-les ici.
L'utilisateur camenduru a eu la gentillesse de fournir un modèle Colab qui utilise la source de ce dépôt (statut : août 2023 !) pour un accès rapide et facile à la méthode. Veuillez le vérifier ici.
Le référentiel contient des sous-modules, veuillez donc le consulter avec
# Clone SSHgit [email protected]:graphdeco-inria/gaussian-splatting.git --recursive
ou
# Clone HTTPSgit https://github.com/graphdeco-inria/gaussian-splatting --recursive
La base de code comporte 4 composants principaux :
Un optimiseur basé sur PyTorch pour produire un modèle gaussien 3D à partir des entrées SfM
Un visualiseur de réseau qui permet de se connecter et de visualiser le processus d'optimisation
Une visionneuse en temps réel basée sur OpenGL pour restituer les modèles entraînés en temps réel.
Un script pour vous aider à transformer vos propres images en ensembles de données SfM prêts à être optimisés
Les composants ont des exigences différentes en termes de matériel et de logiciel. Ils ont été testés sur Windows 10 et Ubuntu Linux 22.04. Les instructions pour configurer et exécuter chacun d’eux se trouvent dans les sections ci-dessous.
L'optimiseur utilise les extensions PyTorch et CUDA dans un environnement Python pour produire des modèles entraînés.
GPU prêt pour CUDA avec capacité de calcul 7.0+
24 Go de VRAM (pour s'entraîner à la qualité de l'évaluation papier)
Veuillez consulter la FAQ pour les petites configurations VRAM
Conda (recommandé pour une configuration facile)
Compilateur C++ pour les extensions PyTorch (nous avons utilisé Visual Studio 2019 pour Windows)
CUDA SDK 11 pour les extensions PyTorch, installé après Visual Studio (nous avons utilisé 11.8, problèmes connus avec 11.6 )
Le compilateur C++ et le SDK CUDA doivent être compatibles
Notre méthode d'installation fournie par défaut est basée sur la gestion du package et de l'environnement Conda :
SET DISTUTILS_USE_SDK=1 # Windows uniquementconda env create --file Environment.yml conda active gaussian_splatting
Veuillez noter que ce processus suppose que vous avez installé le SDK CUDA 11 , et non 12 . Pour les modifications, voir ci-dessous.
Astuce : Le téléchargement de packages et la création d'un nouvel environnement avec Conda peuvent nécessiter une quantité importante d'espace disque. Par défaut, Conda utilisera le disque dur principal du système. Vous pouvez éviter cela en spécifiant un emplacement de téléchargement de package différent et un environnement sur un autre lecteur :
conda config --add pkgs_dirs/ conda env create --file Environment.yml --prefix / /gaussian_splatting conda activer / /gaussian_splatting
Si vous pouvez vous permettre l'espace disque, nous vous recommandons d'utiliser nos fichiers d'environnement pour mettre en place un environnement de formation identique au nôtre. Si vous souhaitez apporter des modifications, veuillez noter que des changements majeurs de version peuvent affecter les résultats de notre méthode. Cependant, nos expériences (limitées) suggèrent que la base de code fonctionne très bien dans un environnement plus à jour (Python 3.8, PyTorch 2.0.0, CUDA 12). Assurez-vous de créer un environnement dans lequel PyTorch et sa version d'exécution CUDA correspondent et où le SDK CUDA installé n'a pas de différence de version majeure avec la version CUDA de PyTorch.
Certains utilisateurs rencontrent des problèmes pour créer les sous-modules sous Windows ( cl.exe: File not found
ou similaire). Veuillez considérer la solution de contournement à ce problème dans la FAQ.
Pour exécuter l'optimiseur, utilisez simplement
python train.py -s
Chemin d'accès au répertoire source contenant un ensemble de données COLMAP ou Synthetic NeRF.
Chemin où le modèle entraîné doit être stocké ( output/
par défaut).
Sous-répertoire alternatif pour les images COLMAP ( images
par défaut).
Ajoutez cet indicateur pour utiliser une répartition formation/test de style MipNeRF360 pour l’évaluation.
Spécifie la résolution des images chargées avant l'entraînement. S'il est fourni 1, 2, 4
ou 8
, utilise respectivement la résolution originale, 1/2, 1/4 ou 1/8. Pour toutes les autres valeurs, redimensionne la largeur au nombre donné tout en conservant l'aspect de l'image. Si cette option n'est pas définie et que la largeur de l'image d'entrée dépasse 1,6 000 pixels, les entrées sont automatiquement redimensionnées selon cette cible.
Spécifie où placer les données de l'image source, cuda
par défaut, il est recommandé d'utiliser cpu
si l'entraînement sur un ensemble de données volumineux/haute résolution réduira la consommation de VRAM, mais ralentira légèrement l'entraînement. Merci à HrsPythonix.
Ajoutez cet indicateur pour utiliser un fond blanc au lieu du noir (par défaut), par exemple pour l'évaluation de l'ensemble de données NeRF Synthetic.
Ordre des harmoniques sphériques à utiliser (pas plus de 3). 3
par défaut.
Indicateur pour que le pipeline calcule en avant et en arrière des SH avec PyTorch au lieu du nôtre.
Indicateur pour que le pipeline calcule en avant et en arrière de la covariance 3D avec PyTorch au lieu de la nôtre.
Active le mode débogage si vous rencontrez des erreurs. Si le rastériseur échoue, un fichier dump
est créé que vous pouvez nous transmettre en cas de problème afin que nous puissions y jeter un œil.
Le débogage est lent . Vous pouvez spécifier une itération (à partir de 0) après laquelle le débogage ci-dessus devient actif.
Nombre total d'itérations pour lesquelles s'entraîner, 30_000
par défaut.
IP sur laquelle démarrer le serveur GUI, 127.0.0.1
par défaut.
Port à utiliser pour le serveur GUI, 6009
par défaut.
Itérations séparées par des espaces au cours desquelles le script de formation calcule L1 et PSNR sur l'ensemble de test, 7000 30000
par défaut.
Itérations séparées par des espaces au cours desquelles le script d'entraînement enregistre le modèle gaussien, 7000 30000
par défaut.
Itérations séparées par des espaces auxquelles stocker un point de contrôle pour continuer plus tard, enregistrées dans le répertoire du modèle.
Chemin d'accès à un point de contrôle enregistré à partir duquel poursuivre l'entraînement.
Indicateur pour omettre tout texte écrit dans le tube de sortie standard.
Les harmoniques sphériques présentent un taux d'apprentissage, 0.0025
par défaut.
Taux d'apprentissage de l'opacité, 0.05
par défaut.
Taux d'apprentissage de mise à l'échelle, 0.005
par défaut.
Taux d'apprentissage par rotation, 0.001
par défaut.
Nombre d'étapes (à partir de 0) où le taux d'apprentissage de la position passe de initial
à final
. 30_000
par défaut.
Taux d'apprentissage initial de la position 3D, 0.00016
par défaut.
Taux d'apprentissage de la position finale 3D, 0.0000016
par défaut.
Multiplicateur de taux d'apprentissage de position (cf. Plenoxels), 0.01
par défaut.
Itération où commence la densification, 500
par défaut.
Itération où la densification s'arrête, 15_000
par défaut.
Limite qui décide si les points doivent être densifiés en fonction du gradient de position 2D, 0.0002
par défaut.
À quelle fréquence densifier, 100
(toutes les 100 itérations) par défaut.
À quelle fréquence réinitialiser l'opacité, 3_000
par défaut.
Influence du SSIM sur la perte totale de 0 à 1, 0.2
par défaut.
Pourcentage de l'étendue de la scène (0--1) qu'un point doit dépasser pour être densifié de force, 0.01
par défaut.
Notez que, comme pour le MipNeRF360, nous ciblons les images à des résolutions comprises entre 1 et 1,6 000 pixels. Pour plus de commodité, des entrées de taille arbitraire peuvent être transmises et seront automatiquement redimensionnées si leur largeur dépasse 1 600 pixels. Nous vous recommandons de conserver ce comportement, mais vous pouvez forcer l'entraînement à utiliser vos images à plus haute résolution en définissant -r 1
.
Les scènes MipNeRF360 sont hébergées par les auteurs de l'article ici. Vous pouvez trouver nos ensembles de données SfM pour Tanks&Temples et Deep Blending ici. Si vous ne fournissez pas de répertoire de modèle de sortie ( -m
), les modèles entraînés sont écrits dans des dossiers avec des noms uniques aléatoires à l'intérieur du répertoire output
. À ce stade, les modèles entraînés peuvent être visualisés avec la visionneuse en temps réel (voir plus loin ci-dessous).
Par défaut, les modèles entraînés utilisent toutes les images disponibles dans l'ensemble de données. Pour les former tout en retenant un ensemble de tests pour évaluation, utilisez l'indicateur --eval
. De cette façon, vous pouvez restituer des ensembles de formation/test et produire des métriques d'erreur comme suit :
python train.py -s--eval # Entraîner avec train/test splitpython render.py -m # Générer des renduspython metrics.py -m # Calculer les métriques d'erreur sur les rendus
Si vous souhaitez évaluer nos modèles pré-entraînés, vous devrez télécharger les ensembles de données sources correspondants et indiquer leur emplacement dans render.py
avec un indicateur --source_path/-s
supplémentaire. Remarque : Les modèles pré-entraînés ont été créés avec la base de code de la version. Cette base de code a été nettoyée et inclut des corrections de bugs, par conséquent les métriques que vous obtiendrez en les évaluant différeront de celles du document.
python render.py -m-s python metrics.py -m
Chemin d'accès au répertoire du modèle entraîné pour lequel vous souhaitez créer des rendus.
Indicateur permettant d'ignorer le rendu de l'ensemble d'entraînement.
Indicateur pour ignorer le rendu de l'ensemble de test.
Indicateur pour omettre tout texte écrit dans le tube de sortie standard.
Les paramètres ci-dessous seront lus automatiquement à partir du chemin du modèle, en fonction de ce qui a été utilisé pour la formation. Cependant, vous pouvez les remplacer en les fournissant explicitement sur la ligne de commande.
Chemin d'accès au répertoire source contenant un ensemble de données COLMAP ou Synthetic NeRF.
Sous-répertoire alternatif pour les images COLMAP ( images
par défaut).
Ajoutez cet indicateur pour utiliser une répartition formation/test de style MipNeRF360 pour l’évaluation.
Modifie la résolution des images chargées avant l'entraînement. S'il est fourni 1, 2, 4
ou 8
, utilise respectivement la résolution originale, 1/2, 1/4 ou 1/8. Pour toutes les autres valeurs, redimensionne la largeur au nombre donné tout en conservant l'aspect de l'image. 1
par défaut.
Ajoutez cet indicateur pour utiliser un fond blanc au lieu du noir (par défaut), par exemple pour l'évaluation de l'ensemble de données NeRF Synthetic.
Indicateur pour que le pipeline soit rendu avec les SH calculés à partir de PyTorch au lieu des nôtres.
Indicateur pour effectuer le rendu du pipeline avec la covariance 3D calculée à partir de PyTorch au lieu de la nôtre.
Liste séparée par des espaces des chemins de modèle pour lesquels les métriques doivent être calculées.
Nous fournissons en outre le script full_eval.py
. Ce script spécifie la routine utilisée dans notre évaluation et démontre l'utilisation de certains paramètres supplémentaires, par exemple --images (-i)
pour définir des répertoires d'images alternatifs dans les ensembles de données COLMAP. Si vous avez téléchargé et extrait toutes les données d'entraînement, vous pouvez l'exécuter comme ceci :
python full_eval.py -m360-tat -db
Dans la version actuelle, ce processus prend environ 7h sur notre machine de référence contenant un A6000. Si vous souhaitez effectuer l'évaluation complète de nos modèles pré-entraînés, vous pouvez spécifier leur emplacement de téléchargement et ignorer la formation.
python full_eval.py -o--skip_training -m360 -tat -db
Si vous souhaitez calculer les métriques sur les images d'évaluation de notre article, vous pouvez également ignorer le rendu. Dans ce cas, il n’est pas nécessaire de fournir les jeux de données sources. Vous pouvez calculer des métriques pour plusieurs ensembles d'images à la fois.
python full_eval.py -m/garden ... --skip_training --skip_rendering
Nous proposons deux visualiseurs interactifs pour notre méthode : à distance et en temps réel. Nos solutions de visualisation sont basées sur le framework SIBR, développé par le groupe GRAPHDECO pour plusieurs projets de synthèse de nouvelles vues.
GPU et pilotes compatibles OpenGL 4.5 (ou le dernier logiciel MESA)
4 Go de VRAM recommandés
GPU prêt pour CUDA avec capacité de calcul 7.0+ (uniquement pour la visionneuse en temps réel)
Visual Studio ou g++, pas Clang (nous avons utilisé Visual Studio 2019 pour Windows)
CUDA SDK 11, installé après Visual Studio (nous avons utilisé 11.8)
CMake (version récente, nous avons utilisé 3.24)
7zip (uniquement sous Windows)
Nous fournissons ici des binaires prédéfinis pour Windows. Nous recommandons de les utiliser sous Windows pour une configuration efficace, car la construction de SIBR implique plusieurs dépendances externes qui doivent être téléchargées et compilées à la volée.
Si vous avez cloné avec des sous-modules (par exemple en utilisant --recursive
), le code source des visionneuses se trouve dans SIBR_viewers
. La visionneuse de réseau s'exécute dans le cadre SIBR pour les applications de rendu basé sur l'image.
CMake devrait prendre soin de vos dépendances.
cd SIBR_viewers cmake -Bbuild .cmake --build build --target install --config RelWithDebInfo
Vous pouvez spécifier une configuration différente, par exemple Debug
si vous avez besoin de plus de contrôle pendant le développement.
Vous devrez installer quelques dépendances avant d'exécuter la configuration du projet.
# Dépendancessudo apt install -y libglew-dev libassimp-dev libboost-all-dev libgtk-3-dev libopencv-dev libglfw3-dev libavdevice-dev libavcodec-dev libeigen3-dev libxxf86vm-dev libembree-dev# Project setupcd SIBR_viewers cmake -Bbuild . -DCMAKE_BUILD_TYPE=Release # add -G Ninja pour construire plus rapidement cmake --build build -j24 --target install
La compatibilité ascendante avec Focal Fossa n'est pas entièrement testée, mais la construction de SIBR avec CMake devrait toujours fonctionner après l'appel.
git checkout fossa_compatibilité
L'interface SIBR propose plusieurs méthodes de navigation dans la scène. Par défaut, vous démarrerez avec un navigateur FPS, que vous pourrez contrôler avec W, A, S, D, Q, E
pour la traduction de la caméra et I, K, J, L, U, O
pour la rotation. Alternativement, vous souhaiterez peut-être utiliser un navigateur de style Trackball (sélectionnez dans le menu flottant). Vous pouvez également vous accrocher à une caméra à partir de l'ensemble de données avec le bouton Snap to
ou trouver la caméra la plus proche avec Snap to closest
. Les menus flottants permettent également de modifier la vitesse de navigation. Vous pouvez utiliser le Scaling Modifier
pour contrôler la taille des gaussiennes affichées ou afficher le nuage de points initial.
Après avoir extrait ou installé les visionneuses, vous pouvez exécuter l'application compilée SIBR_remoteGaussian_app[_config]
dans
, par exemple :
.//bin/SIBR_remoteGaussian_app
La visionneuse de réseau vous permet de vous connecter à un processus de formation en cours sur la même machine ou sur une autre machine. Si vous vous entraînez sur la même machine et le même système d'exploitation, aucun paramètre de ligne de commande ne devrait être requis : l'optimiseur communique l'emplacement des données d'entraînement à la visionneuse de réseau. Par défaut, l'optimiseur et la visionneuse de réseau tenteront d'établir une connexion sur localhost sur le port 6009 . Vous pouvez modifier ce comportement en fournissant les paramètres --ip
et --port
correspondants à l'optimiseur et à la visionneuse de réseau. Si, pour une raison quelconque, le chemin utilisé par l'optimiseur pour trouver les données d'entraînement n'est pas accessible par la visionneuse de réseau (par exemple, en raison de leur exécution sur des machines (virtuelles) différentes), vous pouvez spécifier un emplacement de remplacement pour la visionneuse en utilisant -s
.
Argument pour remplacer le chemin du modèle vers l’ensemble de données source.
IP à utiliser pour la connexion à un script de formation en cours d'exécution.
Port à utiliser pour la connexion à un script de formation en cours d'exécution.
Prend deux nombres séparés par des espaces pour définir la résolution à laquelle le rendu réseau se produit, largeur 1200
par défaut. Notez que pour appliquer un aspect différent des images d'entrée, vous avez également besoin --force-aspect-ratio
.
Indicateur pour charger les images de l'ensemble de données source à afficher dans la vue de dessus pour chaque caméra.
Après avoir extrait ou installé les visionneuses, vous pouvez exécuter l'application compilée SIBR_gaussianViewer_app[_config]
dans
, par exemple :
.//bin/SIBR_gaussianViewer_app -m
Il devrait suffire de fournir le paramètre -m
pointant vers un répertoire de modèle entraîné. Vous pouvez également spécifier un emplacement de remplacement pour les données d'entrée d'entraînement à l'aide -s
. Pour utiliser une résolution spécifique autre que celle choisie automatiquement, spécifiez --rendering-size
. Combinez-le avec --force-aspect-ratio
si vous voulez la résolution exacte et ne vous souciez pas de la distorsion de l'image.
Pour débloquer la fréquence d'images complète, veuillez désactiver V-Sync sur votre machine ainsi que dans l'application (Menu → Affichage). Dans un système multi-GPU (par exemple, un ordinateur portable), votre GPU OpenGL/Display doit être le même que votre GPU CUDA (par exemple, en définissant les préférences GPU de l'application sous Windows, voir ci-dessous) pour des performances maximales. En plus du nuage de points initial et des splats, vous avez également la possibilité de visualiser les gaussiennes en les rendant sous forme d'ellipsoïdes à partir du menu flottant. SIBR a de nombreuses autres fonctionnalités, veuillez consulter la documentation pour plus de détails sur la visionneuse, les options de navigation, etc. Il existe également une vue de dessus (disponible dans le menu) qui montre l'emplacement des caméras d'entrée et le nuage de points SfM d'origine ; veuillez noter que Top View ralentit le rendu lorsqu'il est activé. La visionneuse en temps réel utilise également une sélection rapide et légèrement plus agressive, qui peut être activée dans le menu flottant. Si jamais vous rencontrez un problème qui peut être résolu en désactivant l’élimination rapide, veuillez nous en informer.
Nos chargeurs COLMAP attendent la structure d'ensemble de données suivante dans l'emplacement du chemin source :
|---images | |--- | |--- | |---... |---sparse |---0 |---cameras.bin |---images.bin |---points3D.bin
Pour la rastérisation, les modèles de caméra doivent être une caméra SIMPLE_PINHOLE ou PINHOLE. Nous fournissons un script de conversion convert.py
pour extraire des images non déformées et des informations SfM à partir des images d'entrée. En option, vous pouvez utiliser ImageMagick pour redimensionner les images non déformées. Cette mise à l'échelle est similaire à MipNeRF360, c'est-à-dire qu'elle crée des images avec 1/2, 1/4 et 1/8 de la résolution originale dans les dossiers correspondants. Pour les utiliser, veuillez d'abord installer une version récente de COLMAP (idéalement alimentée par CUDA) et ImageMagick. Placez les images que vous souhaitez utiliser dans un répertoire
.
|---input |--- |--- |---...
Si vous avez COLMAP et ImageMagick sur votre chemin système, vous pouvez simplement exécuter
python convert.py -s[--resize] #Si ce n'est pas le cas, ImageMagick n'est pas nécessaire
Alternativement, vous pouvez utiliser les paramètres facultatifs --colmap_executable
et --magick_executable
pour pointer vers les chemins respectifs. Veuillez noter que sous Windows, l'exécutable doit pointer vers le fichier COLMAP .bat
qui se charge de paramétrer l'environnement d'exécution. Une fois cela fait,
contiendra la structure d'ensemble de données COLMAP attendue avec des images d'entrée non déformées et redimensionnées, en plus de vos images originales et de certaines données temporaires (déformées) dans le répertoire distorted
.
Si vous disposez de votre propre jeu de données COLMAP sans distorsion (par exemple, en utilisant une caméra OPENCV
), vous pouvez essayer de simplement exécuter la dernière partie du script : Mettez les images en input
et les informations COLMAP dans un sous-répertoire distorted
:
|---input | |--- | |--- | |---... |---distorted |---database.db |---sparse |---0 |---...
Puis cours
python convert.py -s--skip_matching [--resize] #Si vous ne redimensionnez pas, ImageMagick n'est pas nécessaire
Indicateur pour éviter d'utiliser le GPU dans COLMAP.
Indicateur pour indiquer que les informations COLMAP sont disponibles pour les images.
Localisation des entrées.
Quel modèle de caméra utiliser pour les premières étapes de correspondance, OPENCV
par défaut.
Indicateur pour créer des versions redimensionnées des images d’entrée.
Chemin d'accès à l'exécutable COLMAP ( .bat
sous Windows).
Chemin d'accès à l'exécutable ImageMagick.
Nous avons intégré les remplacements instantanés de Taming-3dgs 1 avec ssim fusionné dans la base de code d'origine pour accélérer les temps de formation. Une fois installé, le rastériseur accéléré offre un --optimizer_type default
et un --optimizer_type sparse_adam
.
Pour obtenir des temps de formation plus rapides, vous devez d'abord installer le rastériseur accéléré dans votre environnement :
pip désinstaller diff-gaussian-rasterization -ycd submodules/diff-gaussian-rasterization rm -r construire git checkout 3dgs_accel pip installer.
Ensuite, vous pouvez ajouter le paramètre suivant pour utiliser l'optimiseur Sparse Adam lors de l'exécution train.py
:
--optimizer_type sparse_adam
Notez que ce rastériseur personnalisé a un comportement différent de la version originale. Pour plus de détails sur les temps de formation, veuillez consulter les statistiques sur les temps de formation .
1. Mallick et Goel, et al. "Apprivoiser 3DGS : champs de rayonnement de haute qualité avec des ressources limitées". Documents de la conférence SIGGRAPH Asia 2024, 2024, https://doi.org/10.1145/3680528.3687694, github
Pour avoir de meilleures scènes reconstruites, nous utilisons des cartes de profondeur comme priorités lors de l'optimisation avec chaque image d'entrée. Il fonctionne mieux sur les pièces non texturées, par exemple les routes et peut éliminer les flotteurs. Plusieurs articles ont utilisé des idées similaires pour améliorer divers aspects du 3DGS ; (par exemple DepthRegularizedGS, SparseGS, DNGaussian). La régularisation en profondeur que nous avons intégrée est celle utilisée dans notre article 3DGS hiérarchique, mais appliquée au 3DGS original ; pour certaines scènes (par exemple, les scènes DeepBlending), cela améliore considérablement la qualité ; pour d’autres, cela fait une petite différence ou peut même être pire. Pour des exemples de résultats montrant les avantages potentiels et des statistiques sur la qualité, veuillez consulter ici : Statistiques pour la régularisation en profondeur.
Lors de la formation sur un ensemble de données synthétiques, des cartes de profondeur peuvent être produites et elles ne nécessitent aucun traitement supplémentaire pour être utilisées dans notre méthode.
Pour les ensembles de données du monde réel, des cartes de profondeur doivent être générées pour chaque image d'entrée. Pour les générer, procédez comme suit :
Profondeur de clonage Anything v2 :
git clone https://github.com/DepthAnything/Depth-Anything-V2.git
Téléchargez les poids depuis Depth-Anything-V2-Large et placez-les sous Depth-Anything-V2/checkpoints/
Générez des cartes de profondeur :
python Depth-Anything-V2/run.py --encoder vitl --pred-only --grayscale --img-path--outdir
Générez un fichier depth_params.json
en utilisant :
python utils/make_depth_scale.py --base_dir--depths_dir
Un nouveau paramètre doit être défini lors de l'entraînement si vous souhaitez utiliser la régularisation de profondeur -d
.
Pour compenser les changements d'exposition dans les différentes images d'entrée, nous optimisons une transformation affine pour chaque image, tout comme dans les 3dgs hiérarchiques.
Cela peut grandement améliorer les résultats de reconstruction pour les captures « dans la nature », par exemple avec un smartphone lorsque le réglage d'exposition de l'appareil photo n'est pas fixé. Pour des exemples de résultats montrant les avantages potentiels et des statistiques sur la qualité, veuillez consulter ici : Statistiques pour la compensation d'exposition.
Ajoutez les paramètres suivants pour l'activer :
--exposure_lr_init 0.001 --exposure_lr_final 0.0001 --exposure_lr_delay_steps 5000 --exposure_lr_delay_mult 0.001 --train_test_exp
Encore une fois, d'autres excellents articles ont utilisé des idées similaires, par exemple NeRF-W, URF.
Nous avons ajouté le filtre EWA de Mip Splatting dans notre base de code pour supprimer l'alias. Il est désactivé par défaut mais vous pouvez l'activer en ajoutant --antialiasing
lors de l'entraînement sur une scène à l'aide train.py
ou du rendu à l'aide de render.py
. L'anticrénelage peut être activé dans la visionneuse SIBR, il est désactivé par défaut mais vous devez l'activer lors de la visualisation d'une scène entraînée à l'aide de --antialiasing
. cette scène a été entraînée en utilisant --antialiasing
.
Views > Top view
La Top view
restitue le nuage de points SfM dans une autre vue avec les caméras d'entrée correspondantes et la caméra utilisateur Point view
. Cela permet par exemple de visualiser la distance entre le spectateur et les caméras d'entrée.
Il s'agit d'une vue 3D afin que l'utilisateur puisse y naviguer comme dans la Point view
(modes disponibles : FPS, trackball, orbite).
Des options sont disponibles pour personnaliser cette vue, les maillages peuvent être désactivés/activés et leurs échelles peuvent être modifiées.
Une fonctionnalité supplémentaire utile consiste à se déplacer vers la position d'une image d'entrée et à disparaître progressivement vers la vue du point SfM dans cette position (par exemple, pour vérifier l'alignement de la caméra). Les vues des caméras d'entrée peuvent être affichées dans la Top view
( notez que --images-path
doit être défini dans la ligne de commande ). On peut accrocher la caméra Top view
à la caméra d'entrée la plus proche de la caméra utilisateur dans la Point view
en cliquant sur Top view settings > Cameras > Snap to closest
.
OpenXR est pris en charge dans la branche gaussian_code_release_openxr
Dans cette branche, vous pouvez trouver de la documentation sur la prise en charge de VR ici.
Où puis-je obtenir des ensembles de données, par exemple ceux référencés dans full_eval.py
? L'ensemble de données MipNeRF360 est fourni par les auteurs de l'article original sur le site du projet. Notez que deux des ensembles de données ne peuvent pas être partagés ouvertement et nécessitent que vous consultiez directement les auteurs. Pour Tanks&Temples et Deep Blending, veuillez utiliser les liens de téléchargement fournis en haut de la page. Alternativement, vous pouvez accéder aux données clonées (statut : août 2023 !) depuis HuggingFace
Comment puis-je l'utiliser pour un ensemble de données beaucoup plus vaste, comme un quartier urbain ? La méthode actuelle n’a pas été conçue pour cela, mais avec suffisamment de mémoire, elle devrait fonctionner. Cependant, l'approche peut rencontrer des difficultés dans les scènes de détails multi-échelles (gros plans extrêmes, mélangés à des plans lointains). C'est généralement le cas, par exemple, pour les ensembles de données de conduite (voitures proches, bâtiments éloignés). Pour de telles scènes, vous pouvez baisser les valeurs --position_lr_init
, --position_lr_final
et --scaling_lr
(x0.3, x0.1, ...). Plus la scène est étendue, plus ces valeurs doivent être faibles. Ci-dessous, nous utilisons les taux d'apprentissage par défaut (à gauche) et --position_lr_init 0.000016 --scaling_lr 0.001"
(à droite).
Je suis sous Windows et je n'arrive pas à construire les sous-modules, que faire ? Pensez à suivre les étapes de l'excellent didacticiel vidéo ici, j'espère qu'elles devraient vous aider. L’ordre dans lequel les étapes sont effectuées est important ! Vous pouvez également envisager d'utiliser le modèle Colab lié.
Cela ne fonctionne toujours pas. Cela dit quelque chose à propos de cl.exe
. Que dois-je faire? L'utilisateur Henry Pearce a trouvé une solution de contournement. Vous pouvez essayer d'ajouter le chemin de Visual Studio à vos variables d'environnement (votre numéro de version peut différer) ; C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.29.30133binHostx64x64
Assurez-vous ensuite de démarrer une nouvelle invite conda et de vous rendre dans votre emplacement de dépôt et d'essayer ceci ;
conda activate gaussian_splatting cd/gaussian-splatting pip install submodulesdiff-gaussian-rasterization pip install submodulessimple-knn
Je suis sous macOS/Puppy Linux/Greenhat et je n'arrive pas à compiler, que faire ? Désolé, nous ne pouvons pas fournir de support pour les plates-formes autres que celles répertoriées dans ce README. Pensez à utiliser le modèle Colab lié.
Je n'ai pas 24 Go de VRAM pour m'entraîner, que dois-je faire ? La consommation de VRAM est déterminée par le nombre de points à optimiser, qui augmente avec le temps. Si vous souhaitez uniquement vous entraîner sur 7 000 itérations, vous en aurez besoin de beaucoup moins. Pour effectuer la routine d'entraînement complète et éviter de manquer de mémoire, vous pouvez augmenter le --densify_grad_threshold
, --densification_interval
ou réduire la valeur de --densify_until_iter
. Notez cependant que cela affectera la qualité du résultat. Essayez également de définir --test_iterations
sur -1
pour éviter les pics de mémoire pendant les tests. Si --densify_grad_threshold
est très élevé, aucune densification ne devrait se produire et la formation devrait se terminer si la scène elle-même se charge avec succès.
24 Go de VRAM pour une formation de qualité de référence, c'est quand même beaucoup ! Ne pouvons-nous pas le faire avec moins ? Oui, très probablement. Par notre ca