Это официальная реализация Instruct-nerf2nerf.

Инструктор-зановый 2NERF основан на NerfStudio и, следовательно, имеет одинаковые перерывы зависимости. В частности, необходимы Pytorch и TinyCudann.
Перейдите по инструкциям по этой ссылке, чтобы создать среду и установить зависимости. Следуйте за командами до TinyCudann. После того, как зависимости были установлены, вернитесь сюда.
После того, как вы закончите установку зависимостей, вы можете установить Instruct-nerf2nerf, используя следующую команду:
pip install git+https://github.com/ayaanzhaque/instruct-nerf2nerfНеобязательно : Если вы хотите работать напрямую с кодом, клонировать, установите репо:
git clone https://github.com/ayaanzhaque/instruct-nerf2nerf.git
cd instruct-nerf2nerf
pip install --upgrade pip setuptools
pip install -e . Следующая команда должна включать in2n в качестве одного из вариантов:
ns-train -h
Чтобы редактировать NERF, вы должны сначала тренировать обычную сцену nerfacto , используя ваши данные. Чтобы обработать свои пользовательские данные, обратитесь к этой документации.
После того, как у вас есть пользовательские данные, вы можете обучить свой начальный NERF с помощью следующей команды:
ns-train nerfacto --data {PROCESSED_DATA_DIR}Более подробную информацию о обучении NERF см. В документации NerfStudio.
После того, как вы полностью обучили свою сцену, контрольно -пропускные пункты будут сохранены в каталоге outputs . Скопируйте путь в папку nerfstudio_models .
Чтобы начать обучение для редактирования NERF, запустите следующую команду:
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 {PROCESSED_DATA_DIR} должен быть тем же путем, который используется при обучении исходного NERF. Используя команды CLI, вы можете выбрать подсказку и шкалы руководства, используемые для instructpix2pix.
После обучения NERF вы можете отобрать NERF, используя стандартный рабочий процесс NerfStudio, найденной здесь.
Важно, обратите внимание, что обучение NERF на изображениях с разрешением, более 512, вероятно, приведет к тому, что инструктаж2PIX приведет к ошибкам OOM. Более того, кажется, что инструктажпикс2PIX работает значительно хуже на изображениях при более высоком разрешении. Мы предлагаем обучение с разрешением, которая составляет около 512 (максимальное измерение), поэтому добавьте следующий тег в конце вашей команды nerfacto и in2n : nerfstudio-data --downscale-factor {2,4,6,8} к концу ваших команд ns-train . В качестве альтернативы, вы можете понизить свой набор данных самостоятельно и обновить свой файл transforms.json (масштабировать W, H, F_X, FL_Y, CX, CY), или вы можете использовать меньшую шкалу изображений, предоставленную NerfStudio.
Мы рекомендуем собирать данные, используя изображения из PolyCam, поскольку на наборе данных более мелкие наборы работают лучше и быстрее с нашим методом.
Если у вас есть несколько графических процессоров, обучение может быть ускорено, размещая instructpix2pix на отдельный графический процессор. Для этого добавьте --pipeline.ip2p-device cuda:{device-number} в вашу команду обучения.
Наш метод использует ~ 16 -километровые лучи и LPIP, но не у всех графических процессоров достаточно памяти для запуска этой конфигурации. В результате мы предоставили две альтернативные конфигурации, которые используют меньше памяти, но имейте в виду, что эти конфигурации приводят к снижению производительности. Различия - это точность, используемая для IntructPix2PIX, и используется ли LPIP (которые требуют в 4 раза больше лучей). Детали каждой конфигурации приведены в таблице ниже.
| Метод | Описание | Память | Качество |
|---|---|---|---|
in2n | Полная модель, используемая в бумаге | ~ 15 ГБ | Лучший |
in2n-small | Половина точной модели | ~ 12 ГБ | Хороший |
in2n-tiny | Половина точности без lpips | ~ 10 ГБ | Хорошо |
В настоящее время мы устанавливаем максимальное количество итераций для обучения in2n на 15 тыс. Итератио. Чаще всего редактирование будет хорошо выглядеть после итераций ~ 10 тысяч. Если вы хотите тренироваться дольше, просто перезагрузите свою последнюю контрольную точку in2n и продолжите обучение или изменение --max-num-iterations 30000 .
Если ваше редактирование не работает так, как вы хотите, это, вероятно, потому, что InstructPix2Pix борется с вашими изображениями и подсказкой. Мы рекомендуем взять один из ваших тренировочных просмотров и попытаться отредактировать его в 2D первым с помощью InstructPix2Pix, который можно сделать в этом пространстве для объятий. Больше советов по получению хорошего редактирования можно найти здесь.
Мы построили расширение инструкта-занога2nerf для гауссового сплаттирования под названием Instruct-GS2GS. Их репозиторий может быть использован в качестве примера того, как создавать будущие проекты на основе инструкта-nerf2nerf.
Пожалуйста, откройте проблемы GitHub для любых проблем с установкой/использованием, с которыми вы столкнетесь. Мы постарались поддержать как можно более широкий спектр графических процессоров, но может потребоваться предоставить еще более низкие версии. Пожалуйста, внесите вклад в любые изменения, чтобы улучшить использование памяти!
Чтобы создать инструкции-nerf2nerf, мы предоставляем объяснения компонентов основного кода.
in2n_datamanager.py : этот файл почти идентичен base_datamanager.py в nerfstudio. Основное отличие состоит в том, что весь тензор набора данных предварительно выпускается в методе setup_train , в отличие от выборки в методе next_train каждый раз.
in2n_pipeline.py : этот файл строится на модуле трубопровода в Nerfstudio. Метод get_train_loss_dict Образцы изображений и помещения отредактированных изображений обратно в набор данных.
ip2p.py : в этом файле содержится модель InstructPix2Pix (используя реализацию diffusers ). Метод edit_image - это то, где изображение обезболивается с использованием диффузионной модели, и в этом файле также содержатся различные вспомогательные методы.
in2n.py : Мы перезаписываем метод get_loss_dict , чтобы использовать потерю LPIPS и L1LOSS.
Вы можете найти нашу газету на Arxiv.
Если вы найдете этот код или найдите статью, полезную для вашего исследования, пожалуйста, рассмотрите возможность цитирования:
@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},
}