Esta é a implementação oficial do Instruct-Erf2nerf.

O Instruct-Erf2nerf está construído no NerfStudio e, portanto, possui as mesmas reqiramentos de dependência. São necessários especificamente pytorch e tinycudann.
Siga as instruções neste link para criar o ambiente e instalar dependências. Siga apenas os comandos até Tinycudann. Depois que as dependências foram instaladas, retorne aqui.
Depois de terminar de instalar dependências, você pode instalar o Instruct-Erf2nerf usando o seguinte comando:
pip install git+https://github.com/ayaanzhaque/instruct-nerf2nerfOpcional : se você quiser trabalhar diretamente com o código, clone, instale o repositório:
git clone https://github.com/ayaanzhaque/instruct-nerf2nerf.git
cd instruct-nerf2nerf
pip install --upgrade pip setuptools
pip install -e . O comando a seguir deve incluir in2n como uma das opções:
ns-train -h
Para editar um nerf, você deve primeiro treinar uma cena regular nerfacto usando seus dados. Para processar seus dados personalizados, consulte esta documentação.
Depois de ter seus dados personalizados, você pode treinar seu nerf inicial com o seguinte comando:
ns-train nerfacto --data {PROCESSED_DATA_DIR}Para mais detalhes sobre o treinamento de um nerf, consulte a documentação do Nerfstudio.
Depois de treinar totalmente sua cena, os pontos de verificação serão salvos no diretório outputs . Copie o caminho para a pasta nerfstudio_models .
Para começar a treinar para editar o nerf, execute o seguinte comando:
ns-train in2n --data {PROCESSED_DATA_DIR} --load-dir {outputs/.../nerfstudio_models} --pipeline.prompt { " prompt " } --pipeline.guidance-scale 7.5 --pipeline.image-guidance-scale 1.5 O {PROCESSED_DATA_DIR} deve ser o mesmo caminho usado no treinamento do NERF original. Usando os comandos da CLI, você pode escolher o prompt e as escalas de orientação usadas para instructpix2pix.
Depois que o NERF é treinado, você pode renderizar o NERF usando o fluxo de trabalho NERFStudio padrão, encontrado aqui.
IMPORTANTE , Observe que o treinamento do nerf em imagens com resolução maior que 512 provavelmente fará com que o InstructPix2pix ligue erros de OOM. Além disso, parece que o InstructPix2PIX tem um desempenho significativamente pior nas imagens em uma resolução mais alta. Sugerimos o treinamento com uma resolução em torno de 512 (dimensão máxima); portanto, adicione a seguinte etiqueta ao final do comando nerfacto e in2n Training: nerfstudio-data --downscale-factor {2,4,6,8} até o final dos seus comandos ns-train . Como alternativa, você pode reduzir seu conjunto de dados e atualizar seu arquivo transforms.json (escala para baixo w, h, fl_x, fl_y, cx, cy), ou você pode usar uma escala de imagem menor fornecida pelo NerfStudio.
Recomendamos capturar dados usando imagens da Polycam, pois os conjuntos de dados menores funcionam melhor e mais rápidos com o nosso método.
Se você possui várias GPUs, o treinamento pode ser acelerado colocando o InstructPix2pix em uma GPU separada. Para fazer isso, adicione --pipeline.ip2p-device cuda:{device-number} ao seu comando de treinamento.
Nosso método usa raios ~ 16k e LPIPs, mas nem todas as GPUs têm memória suficiente para executar essa configuração. Como resultado, fornecemos duas configurações alternativas que usam menos memória, mas lembre -se de que essas configurações levam à diminuição do desempenho. As diferenças são a precisão usada para o IntructPix2pix e se o LPIPS é usado (o que requer 4x mais raios). Os detalhes de cada configuração são fornecidos na tabela abaixo.
| Método | Descrição | Memória | Qualidade |
|---|---|---|---|
in2n | Modelo completo, usado em papel | ~ 15 GB | Melhor |
in2n-small | Modelo de meia precisão | ~ 12 GB | Bom |
in2n-tiny | Meia precisão sem LPIPS | ~ 10 GB | OK |
Atualmente, definimos o número máximo de iterações para o treinamento in2n ser de 15k iteratios. Na maioria das vezes, a edição ficará bem após ~ 10k iterações. Se você deseja treinar por mais tempo, basta recarregar seu último ponto de verificação in2n e continuar treinando ou altere --max-num-iterations 30000 .
Se a sua edição não estiver funcionando como você deseja, é provável que o InstructPix2PIX lute com suas imagens e rápido. Recomendamos a exibição de uma de suas visualizações de treinamento e tentar editá -lo em 2D primeiro com o InstructPix2pix, o que pode ser feito neste espaço de Huggingface. Mais dicas sobre como obter uma boa edição podem ser encontradas aqui.
Construímos uma extensão do instrutor-Enerf2nerf para a divisão gaussiana chamada Instruct-GS2GS. Seu repositório pode ser usado como um exemplo de como construir projetos futuros com base no Instruct-Erf2nerf.
Abra os problemas do GitHub para qualquer problema de instalação/uso que você tenha. Tentamos apoiar o maior número possível de GPUs, mas pode ser necessário fornecer versões de impressão ainda mais baixas. Contribua com quaisquer alterações para melhorar o uso da memória!
Para construir o Instruct-Enerf2nerf, fornecemos explicações dos componentes do código principal.
in2n_datamanager.py : Este arquivo é quase idêntico ao base_datamanager.py no nerfstudio. A principal diferença é que todo o tensor do conjunto de dados é pré-computado no método setup_train , em vez de ser amostrado no método next_train a cada vez.
in2n_pipeline.py : Este arquivo se baseia no módulo de pipeline no NerfStudio. O método get_train_loss_dict amostra imagens e coloca imagens editadas de volta ao conjunto de dados.
ip2p.py : este arquivo abriga o modelo InstructPix2PIX (usando a implementação diffusers ). O método edit_image é onde uma imagem é denoada usando o modelo de difusão, e uma variedade de métodos auxiliares também está contida neste arquivo.
in2n.py : substituímos o método get_loss_dict para usar a perda LPIPS e o L1loss.
Você pode encontrar nosso artigo sobre Arxiv.
Se você encontrar este código ou encontrar o artigo útil para sua pesquisa, considere citar:
@inproceedings{instructnerf2023,
author = {Haque, Ayaan and Tancik, Matthew and Efros, Alexei and Holynski, Aleksander and Kanazawa, Angjoo},
title = {Instruct-NeRF2NeRF: Editing 3D Scenes with Instructions},
booktitle = {Proceedings of the IEEE/CVF International Conference on Computer Vision},
year = {2023},
}