Vincent Sitzmann*, Julien NP Martel*, Alexander W. Bergman, David B. Lindell, Gordon Wetzstein
Universidade de Stanford, *indica a mesma contribuição
Esta é a implementação oficial do artigo "representações neurais implícitas com funções de ativação periódica".
Se você deseja experimentar a sirene, escrevemos um colab. É bastante abrangente e vem com uma implementação sem frescuras e soltando sirene. Não requer instalação de nada e passa pelas seguintes experimentos / propriedades de sirene:
Você também pode jogar Arond com uma pequena sirene interativa, diretamente no navegador, através do Playground Tensorflow aqui. Obrigado a David Cato por implementar isso!
Se você deseja reproduzir todos os resultados (incluindo as linhas de base) mostrado no papel, os vídeos, nuvens de pontos e arquivos de áudio podem ser encontrados aqui.
Você pode configurar um ambiente de conda com todas as dependências como assim:
conda env create -f environment.yml
conda activate siren
O código está organizado da seguinte forma:
O diretório experiment_scripts
contém um script por experimento no papel.
Para monitorar o progresso, o código de treinamento grava resumos de tensorboard em um subdiretório "resumos" "no logging_root.
O experimento de imagem pode ser reproduzido com
python experiment_scripts/train_img.py --model_type=sine
Os números no artigo foram feitos extraindo imagens dos resumos do Tensorboard. Exemplo Código Como fazer isso pode ser encontrado no script make_figures.py.
Este repositório do GitHub vem com os clipes de áudio "contando" e "bach" em ./data.
Eles podem ser treinados com
python experiment_scipts/train_audio.py --model_type=sine --wav_path=<path_to_audio_file>
A sequência de vídeo "Bikes" vem com Scikit-Video e não precisa ser baixada. O vídeo do gato pode ser baixado com o link acima.
Para ajustar um modelo em um vídeo, execute
python experiment_scipts/train_video.py --model_type=sine --experiment_name bikes_video
Para as experiências de Poisson, existem três scripts separados: um para reconstruir uma imagem de seus gradientes (trens_poisson_grad_img.py), de seus Laplacianos (Train_Poisson_Lapl_Image.py) e combinar duas imagens (tren_poisson_gradcomp_img.py).
Algumas das experiências foram executadas usando o conjunto de dados BSD500, que você pode baixar aqui.
Para se ajustar a uma função de distância assinada (SDF) com a sirene, você precisa primeiro de um ponto de vista no formato .xyz que inclui normais de superfície. Se você tiver apenas um arquivo de malha / dobra, isso pode ser realizado com o Meshlab de ferramenta de código aberto.
Para reproduzir nossos resultados, fornecemos os dois modelos da estátua tailandesa do repositório modelo 3D Stanford e a sala de estar usada em nosso artigo para download aqui.
Para começar a treinar uma sirene, corra:
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
Isso salvará regularmente os pontos de verificação no diretório especificado pelo rootpath no script, em um subdiretório "Experiment_1". O Batch_size é normalmente ajustado para caber em toda a memória da sua GPU. Nossas experiências mostram que, com uma sirene de 256 e 3 camadas ocultas, pode-se definir o tamanho do lote entre 230-250'000 para uma GPU da NVIDIA com memória de 12 GB.
Para inspecionar um SDF ajustado a uma nuvem de pontos 3D, agora precisamos criar uma malha a partir do conjunto de níveis zero do SDF. Isso é realizado com outro script que usa um algoritmo de cubos em marcha (adaptado do repo do Deepsdf Github) e cria a malha salva em um formato de arquivo .sply. Pode ser chamado com:
python experiments_scripts/test_single_sdf.py --checkpoint_path=<path_to_the_checkpoint_of_the_trained_model> --experiment_name=experiment_1_rec
Isso salvará o .sply arquivado como "reconstrução.ply" em "Experiment_1_rec" (seja paciente, a etapa de malha do cubo em marcha leva algum tempo;)) Caso a máquina que você usa para a reconstrução não tenha RAM suficiente, executando test_sdf O script provavelmente congelará. Se for esse o caso, use a opção -Resolução = 512 na linha de comando acima (definido como 1600 por padrão) que reconstruirá a malha em uma resolução espacial mais baixa.
O arquivo .sply pode ser visualizado usando um software como o MESHLAB (um visualizador e editor de plataforma cruzada para modelos 3D).
Os experimentos de equação de Helmholtz e Wave podem ser reproduzidos com os scripts de trens_wave_equation.py e trens_helmholtz.py.
Estamos usando o excelente Torchmeta para implementar o HyperNetworks. Percebemos que há um relatório técnico, que esquecemos de citar - ele entrará na versão pronta para a câmera!
Se você achar nosso trabalho útil em sua pesquisa, 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}
}
Se você tiver alguma dúvida, sinta -se à vontade para enviar um e -mail aos autores.