Vincent Sitzmann*, Julien NP Martel*, Alexander W. Bergman, David B. Lindell, Gordon Wetzstein
Universidad de Stanford, *denota una contribución igual
Esta es la implementación oficial del documento "Representaciones neuronales implícitas con funciones de activación periódica".
Si desea experimentar con Siren, hemos escrito un colab. Es bastante completo y viene con una implementación sin lujos de Siren. No requiere instalar nada y pasa por los siguientes experimentos / propiedades de sirena:
También puede jugar a Arond con una pequeña sirena interactivamente, directamente en el navegador, a través del patio de juegos Tensorflow aquí. ¡Gracias a David Cato por implementar esto!
Si desea reproducir todos los resultados (incluidas las líneas de base) que se muestran en el documento, los videos, las nubes de puntos y los archivos de audio se pueden encontrar aquí.
Luego puede configurar un entorno de conda con todas las dependencias como así:
conda env create -f environment.yml
conda activate siren
El código está organizado de la siguiente manera:
El directorio experiment_scripts
contiene un script por experimento en el documento.
Para monitorear el progreso, el código de entrenamiento escribe resúmenes de Tensorboard en un subdirectorio de "resúmenes" "en el logging_root.
El experimento de imagen se puede reproducir con
python experiment_scripts/train_img.py --model_type=sine
Las figuras en el papel se hicieron extrayendo imágenes de los resúmenes de la placa tensorial. Código de ejemplo Cómo hacer esto se puede encontrar en el script make_figues.py.
Este repositorio de GitHub viene con los clips de audio "Contado" y "Bach" en ./data.
Pueden ser entrenados con
python experiment_scipts/train_audio.py --model_type=sine --wav_path=<path_to_audio_file>
La secuencia de video "Bikes" viene con scikit-video y no necesita ser descargada. El video CAT se puede descargar con el enlace de arriba.
Para adaptarse a un modelo a un video, ejecutar
python experiment_scipts/train_video.py --model_type=sine --experiment_name bikes_video
Para los experimentos de Poisson, hay tres scripts separados: uno para reconstruir una imagen de sus gradientes (Train_Poisson_Grad_img.py), desde su laplacian (Train_Poisson_Lapl_image.py), y para combinar dos imágenes (Train_poisson_gradcomp_img.py).
Algunos de los experimentos se ejecutaron utilizando el BSD500 Datast, que puede descargar aquí.
Para ajustar una función de distancia firmada (SDF) con Siren, primero necesita un punto de punto en formato .xyz que incluye normales de superficie. Si solo tiene un archivo de malla / capa, esto se puede lograr con la herramienta de código abierto MeshLab.
Para reproducir nuestros resultados, proporcionamos ambos modelos de la estatua tailandesa del repositorio de modelos 3D Stanford y la sala de estar utilizada en nuestro artículo para descargar aquí.
Para comenzar a entrenar una sirena, ejecute:
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
Esto guardará regularmente los puntos de control en el directorio especificado por el rootPath en el script, en un subdirectorio "Experiment_1". El Batch_Size generalmente se ajusta para que se ajuste en la memoria completa de su GPU. Nuestros experimentos muestran que con una sirena de capa oculta 256, 3 puede establecer el tamaño de lote entre 230-250'000 para una GPU NVIDIA con memoria de 12 GB.
Para inspeccionar un SDF instalado en una nube de puntos 3D, ahora necesitamos crear una malla desde el conjunto de nivel cero del SDF. Esto se realiza con otro script que utiliza un algoritmo de cubos de marcha (adaptado del repositorio de GitHub DeepSDF) y crea la malla guardada en un formato de archivo .ply. Se puede llamar con:
python experiments_scripts/test_single_sdf.py --checkpoint_path=<path_to_the_checkpoint_of_the_trained_model> --experiment_name=experiment_1_rec
Esto guardará el archivo .ply como "reconstrucción.ply" en "experiment_1_rec" (sea paciente, el paso de malla de cubo de marzo lleva algo de tiempo;)) en caso de que la máquina que use para la reconstrucción no tiene suficiente RAM, ejecutando test_sdf El guión probablemente se congele. Si este es el caso, utilice la opción - -resolución = 512 en la línea de comando anterior (establecida en 1600 por defecto) que reconstruirá la malla a una resolución espacial más baja.
El archivo .ply se puede visualizar utilizando un software como MeshLab (un visualizador multiplataforma y editor para modelos 3D).
Los experimentos de ecuación de Helmholtz y Wave se pueden reproducir con los scripts de trenes_wave_equation.py y tran_helmholtz.py.
Estamos utilizando el excelente Torchmeta para implementar HypernetWorks. Nos dimos cuenta de que hay un informe técnico, que olvidamos citar: ¡lo convertirá en la versión lista para la cámara!
Si encuentra útil nuestro trabajo en su investigación, cite:
@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 tiene alguna pregunta, no dude en enviar un correo electrónico a los autores.