Esta es la implementación oficial de Instruct-NERF2NERF.

Instruct-NERF2NERF se basa en NerfStudio y, por lo tanto, tiene los mismos requisitos de dependencia. Se requieren específicamente Pytorch y TinyCudann.
Siga las instrucciones en este enlace para crear el entorno e instalar dependencias. Solo siga los comandos hasta Tinycudann. Después de que se hayan instalado las dependencias, regrese aquí.
Una vez que haya terminado de instalar dependencias, puede instalar Instruct-NERF2NERF utilizando el siguiente comando:
pip install git+https://github.com/ayaanzhaque/instruct-nerf2nerfOpcional : si desea trabajar directamente con el código, clone, instale el repositorio:
git clone https://github.com/ayaanzhaque/instruct-nerf2nerf.git
cd instruct-nerf2nerf
pip install --upgrade pip setuptools
pip install -e . El siguiente comando debe incluir in2n como una de las opciones:
ns-train -h
Para editar un nerf, primero debe entrenar una escena nerfacto normal utilizando sus datos. Para procesar sus datos personalizados, consulte esta documentación.
Una vez que tenga sus datos personalizados, puede capacitar a su nerf inicial con el siguiente comando:
ns-train nerfacto --data {PROCESSED_DATA_DIR}Para obtener más detalles sobre la capacitación de un nerf, consulte la documentación de NerfStudio.
Una vez que haya entrenado completamente su escena, los puntos de control se guardarán en el directorio outputs . Copie la ruta a la carpeta nerfstudio_models .
Para comenzar a entrenar para editar el NERF, ejecute el siguiente 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 El {PROCESSED_DATA_DIR} debe ser la misma ruta que se usa en la capacitación del nerf original. Usando los comandos CLI, puede elegir el mensaje y las escalas de guía utilizadas para InstructPix2Pix.
Después de capacitar al NERF, puede representar el Nerf utilizando el flujo de trabajo NerfStudio estándar, que se encuentra aquí.
IMPORTANTE Tenga en cuenta que capacitar al NERF en imágenes con una resolución mayor de 512 probablemente hará que InstructPix2Pix arroje errores OOM. Además, parece que InstructPix2Pix funciona significativamente peor en las imágenes a una resolución más alta. Sugerimos capacitar con una resolución que es alrededor de 512 (dimensión máxima), por lo tanto, agregue la siguiente etiqueta al final de su comando de ns-train nerfacto e in2n : nerfstudio-data --downscale-factor {2,4,6,8} Alternativamente, puede reducir su conjunto de datos usted mismo y actualizar su archivo transforms.json (escala hacia abajo W, H, FL_X, FL_Y, CX, CY), o puede usar una escala de imagen más pequeña proporcionada por NerfStudio.
Recomendamos capturar datos utilizando imágenes de Polycam, ya que los conjuntos de datos más pequeños funcionan mejor y más rápido con nuestro método.
Si tiene múltiples GPU, el entrenamiento se puede acelerar colocando instructpix2pix en una GPU separada. Para hacerlo, agregue --pipeline.ip2p-device cuda:{device-number} a su comando de entrenamiento.
Nuestro método utiliza ~ 16k rayos y LPIP, pero no todas las GPU tienen suficiente memoria para ejecutar esta configuración. Como resultado, hemos proporcionado dos configuraciones alternativas que usan menos memoria, pero tenga en cuenta que estas configuraciones conducen a una disminución del rendimiento. Las diferencias son la precisión utilizada para IntructPix2Pix y si se usa LPIPS (que requiere 4 veces más rayos). Los detalles de cada configuración se proporcionan en la tabla a continuación.
| Método | Descripción | Memoria | Calidad |
|---|---|---|---|
in2n | Modelo completo, utilizado en papel | ~ 15 GB | Mejor |
in2n-small | Modelo de media precisión | ~ 12GB | Bien |
in2n-tiny | Mitad precisión sin lpips | ~ 10GB | De acuerdo |
Actualmente, establecemos el número máximo de iteraciones para que la capacitación in2n sea 15k Iteratios. La mayoría de las veces, la edición se verá bien después de ~ 10k iteraciones. Si desea entrenar por más tiempo, vuelva a cargar su último punto de control in2n y continúe entrenando, o cambie --max-num-iterations 30000 .
Si su edición no funciona como lo desea, es probable porque Instructpix2pix lucha con sus imágenes y su opinión. Recomendamos tomar una de sus vistas de entrenamiento e intentar editarlo en 2D primero con InstructPix2Pix, que se puede hacer en este espacio de Huggingface. Se pueden encontrar más consejos para obtener una buena edición aquí.
Construimos una extensión de Instruct-Nerf2nerf para Splatting gaussiano llamado Instruct-GS2GS. Su repositorio se puede utilizar como un ejemplo de cómo construir proyectos futuros basados en Instruct-NERF2NERF.
Abra los problemas de GitHub para cualquier problema de instalación/uso en los que se encuentre. Hemos tratado de apoyar una variedad de GPU lo más amplia posible, pero podría ser necesario proporcionar versiones aún más bajas en los pies. ¡Contribuya con cualquier cambio para mejorar el uso de la memoria!
Para construir instructo-ganf2nerf, proporcionamos explicaciones de los componentes del código central.
in2n_datamanager.py : este archivo es casi idéntico al base_datamanager.py en NerfStudio. La principal diferencia es que todo el tensor del conjunto de datos está precomputado en el método setup_train en lugar de ser muestreado en el método next_train cada vez.
in2n_pipeline.py : este archivo se basa en el módulo de tubería en NerfStudio. El método get_train_loss_dict muestra imágenes y coloca imágenes editadas nuevamente en el conjunto de datos.
ip2p.py : este archivo alberga el modelo Instructpix2Pix (utilizando la implementación diffusers ). El método edit_image es donde una imagen se cena utilizando el modelo de difusión, y una variedad de métodos auxiliares también están contenidos en este archivo.
in2n.py : sobrescribimos el método get_loss_dict para usar la pérdida de LPIPS y L1loss.
Puedes encontrar nuestro documento en ARXIV.
Si encuentra este código o encuentra útil el documento para su investigación, 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},
}