Vincent Sitzmann *, Julien NP Martel *, Alexander W. Bergman, David B. Lindell, Gordon Wetzstein
Université de Stanford, * indique une contribution égale
Il s'agit de la mise en œuvre officielle de l'article "Représentations neuronales implicites avec des fonctions d'activation périodiques".
Si vous souhaitez expérimenter la sirène, nous avons écrit un colab. Il est assez complet et est livré avec une implémentation sans fioritures de sirène. Il ne nécessite rien d'installer et passe par les expériences / propriétés de sirène suivantes:
Vous pouvez également jouer à Arond avec une minuscule sirène de manière interactive, directement dans le navigateur, via le terrain de jeu Tensorflow ici. Merci à David Cato d'avoir mis en œuvre cela!
Si vous souhaitez reproduire tous les résultats (y compris les lignes de base) indiquées dans le document, les vidéos, les nuages de points et les fichiers audio peuvent être trouvés ici.
Vous pouvez ensuite configurer un environnement conda avec toutes les dépendances comme ainsi:
conda env create -f environment.yml
conda activate siren
Le code est organisé comme suit:
Le répertoire experiment_scripts
contient un script par expérience dans l'article.
Pour surveiller les progrès, le code de formation écrit des résumés Tensorboard dans un sous-répertoire "Résumé" dans le logging_root.
L'expérience d'image peut être reproduite avec
python experiment_scripts/train_img.py --model_type=sine
Les chiffres du papier ont été fabriqués en extraitant des images des résumés de Tensorboard. Exemple de code Comment faire cela peut être trouvé dans le script make_figures.py.
Ce référentiel GitHub est livré avec les clips audio "Counting" et "Bach" sous ./data.
Ils peuvent être formés avec
python experiment_scipts/train_audio.py --model_type=sine --wav_path=<path_to_audio_file>
La séquence vidéo "Bikes" est livrée avec Scikit-video et n'a pas besoin d'être téléchargée. La vidéo CAT peut être téléchargée avec le lien ci-dessus.
Pour adapter un modèle à une vidéo, exécutez
python experiment_scipts/train_video.py --model_type=sine --experiment_name bikes_video
Pour les expériences de Poisson, il y a trois scripts distincts: un pour reconstruire une image de ses gradients (Train_poisson_grad_img.py), de son laplacien (Train_poisson_lapl_image.py), et pour combiner deux images (Train_poisson_gradomp_img.py).
Certaines expériences ont été exécutées à l'aide de la données BSD500, que vous pouvez télécharger ici.
Pour s'adapter à une fonction de distance signée (SDF) avec la sirène, vous avez d'abord besoin d'un format PointCloud au .xyz qui inclut les normales de surface. Si vous n'avez qu'un fichier de maillage / pli, cela peut être accompli avec l'outil open-source MeshLab.
Pour reproduire nos résultats, nous fournissons les deux modèles de la statue thaïlandaise du référentiel du modèle Stanford 3D et le salon utilisé dans notre article à télécharger ici.
Pour commencer à entraîner une sirène, courez:
python experiments_scripts/train_single_sdf.py --model_type=sine --point_cloud_path=<path_to_the_model_in_xyz_format> --batch_size=250000 --experiment_name=experiment_1
Cela enregistrera régulièrement des points de contrôle dans le répertoire spécifié par le rootpath dans le script, dans un sous-répertoire "Experiment_1". Le Batch_Size est généralement ajusté pour s'adapter à toute la mémoire de votre GPU. Nos expériences montrent qu'avec une sirène de couche cachée de 256, 3, on peut régler la taille du lot entre 230 et 250'000 pour un GPU NVIDIA avec une mémoire de 12 Go.
Pour inspecter un SDF monté sur un nuage de points 3D, nous devons maintenant créer un maillage à partir de l'ensemble de niveau zéro du SDF. Ceci est effectué avec un autre script qui utilise un algorithme de cubes de marche (adapté du repo GitHub DeepSDF) et crée le maillage enregistré dans un format de fichier .ply. Il peut être appelé avec:
python experiments_scripts/test_single_sdf.py --checkpoint_path=<path_to_the_checkpoint_of_the_trained_model> --experiment_name=experiment_1_rec
Cela sauvera le fichier .ply sous la forme de "Reconstruction.ply" dans "Experiment_1_rec" (Soyez patient, l'étape de maillage du cube de marche prend un certain temps;)) dans le cas où la machine que vous utilisez pour la reconstruction n'a pas assez de RAM, exécutant test_sdf Le script se figera probablement. Si tel est le cas, veuillez utiliser l'option --Resolution = 512 dans la ligne de commande ci-dessus (réglé sur 1600 par défaut), qui reconstruirea le maillage à une résolution spatiale inférieure.
Le fichier .ply peut être visualisé à l'aide d'un logiciel tel que MeshLab (un visual et éditeur multiplateforme pour les modèles 3D).
Les expériences d'équation Helmholtz et Wave peuvent être reproduites avec les scripts Train_Wave_equation.py et Train_helmholtz.py.
Nous utilisons l'excellent Torchmeta pour implémenter HyperNetworks. Nous avons réalisé qu'il y avait un rapport technique, que nous avons oublié de citer - il en fera partie de la version prête à la caméra!
Si vous trouvez notre travail utile dans vos recherches, veuillez citer:
@inproceedings{sitzmann2019siren,
author = {Sitzmann, Vincent
and Martel, Julien N.P.
and Bergman, Alexander W.
and Lindell, David B.
and Wetzstein, Gordon},
title = {Implicit Neural Representations
with Periodic Activation Functions},
booktitle = {arXiv},
year={2020}
}
Si vous avez des questions, n'hésitez pas à envoyer un e-mail aux auteurs.