이것은 Instruct-Nerf2nerf의 공식 구현입니다.

instruct-nerf2nerf는 Nerfstudio에 구축되므로 동일한 종속성 시험을 보유하고 있습니다. 특이 적 Pytorch 및 TinyCudann이 필요합니다.
이 링크의 지침에 따라 환경을 만들고 종속성을 설치하십시오. 명령을 TinyCudann까지만 따르십시오. 종속성이 설치된 후 여기에서 돌아갑니다.
종속성 설치를 마친 후에는 다음 명령을 사용하여 orruct-nerf2nerf를 설치할 수 있습니다.
pip install git+https://github.com/ayaanzhaque/instruct-nerf2nerf선택 사항 : 코드를 직접 작업하려면 복제 한 다음 Repo를 설치하십시오.
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 명령을 사용하면 습스포 2pix에 사용되는 프롬프트와 안내 척도를 선택할 수 있습니다.
NERF를 훈련 한 후에는 여기에있는 표준 Nerfstudio 워크 플로를 사용하여 NERF를 렌더링 할 수 있습니다.
중요한 것은 512보다 큰 해상도로 이미지에서 NERF를 훈련 시키면 OM 오류가 발생할 수 있습니다. 더욱이, instructpix2pix는 더 높은 해상도에서 이미지에서 상당히 악화되는 것으로 보입니다. 우리는 약 512 (최대 치수)의 해상도로 훈련하는 것이 nerfstudio-data --downscale-factor {2,4,6,8} . nerfacto 및 in2n 훈련 명령의 끝에 ns-train 태그를 추가하십시오. 또는 데이터 세트를 직접 다운 스케일하고 transforms.json 업데이트 할 수 있습니다 .JSON 파일 (스케일 다운 w, h, fl_x, fl_y, cx, cy).
더 작은 데이터 세트가 우리의 방법으로 더 잘 작동하고 더 빠르게 작동하기 때문에 PolyCAM의 이미지를 사용하여 데이터를 캡처하는 것이 좋습니다.
여러 GPU가있는 경우 별도의 GPU에 InstructPix2Pix를 배치하여 훈련을받을 수 있습니다. 이렇게하려면 --pipeline.ip2p-device cuda:{device-number} 교육 명령에 추가하십시오.
우리의 방법은 ~ 16k 광선과 LPIP를 사용하지만 모든 GPU 가이 구성을 실행하기에 충분한 메모리를 가지고있는 것은 아닙니다. 결과적으로, 우리는 메모리를 적게 사용하는 두 가지 대체 구성을 제공했지만 이러한 구성으로 인해 성능이 떨어집니다. 차이점은 IntructPix2Pix에 사용되는 정밀도이며 LPIP가 사용되는지 (4 배 더 많은 광선이 필요)입니다. 각 구성의 세부 사항은 아래 표에 제공됩니다.
| 방법 | 설명 | 메모리 | 품질 |
|---|---|---|---|
in2n | 종이에 사용되는 전체 모델 | ~ 15GB | 최상의 |
in2n-small | 반 정밀 모델 | ~ 12GB | 좋은 |
in2n-tiny | LPIP가없는 절반 정밀도 | ~ 10GB | 좋아요 |
현재, 우리는 in2n 교육의 최대 반복 수를 15K ITERATIOS로 설정했습니다. 대부분 편집은 ~ 10k 반복 후에 잘 보일 것입니다. 더 오래 훈련하려면 마지막 in2n 체크 포인트를 다시로드하고 훈련을 계속하거나 변경 --max-num-iterations 30000 변경하십시오.
편집이 원하는대로 작동하지 않는 경우 습국 2pix가 이미지와 프롬프트로 어려움을 겪기 때문일 수 있습니다. 이 포옹 페이스 공간에서 수행 할 수있는 습스프 픽스 2pix를 사용하여 2d로 2d로 편집하는 것이 좋습니다. 좋은 편집에 대한 더 많은 팁은 여기에서 찾을 수 있습니다.
우리는 ortruct-gs2gs라는 가우스 플래팅을위한 강사 -nerf2nerf의 확장을 구축했습니다. 그들의 저장소는 Instruct-Nerf2nerf를 기반으로 미래 프로젝트를 구축하는 방법의 예로 사용될 수 있습니다.
설치/사용량 문제에 대한 GitHub 문제를 열어주십시오. 우리는 가능한 한 광범위한 GPU를 지원하려고 노력했지만 훨씬 더 낮은 발자국 버전을 제공해야 할 수도 있습니다. 메모리 사용을 개선하기 위해 변경 사항에 기여하십시오!
Instruct-Nerf2nerf를 구축하기 위해 핵심 코드 구성 요소에 대한 설명을 제공합니다.
in2n_datamanager.py :이 파일은 Nerfstudio의 base_datamanager.py 와 거의 동일합니다. 주요 차이점은 전체 데이터 세트 텐서가 매번 setup_train next_train 에서 미리 컴퓨팅된다는 것입니다.
in2n_pipeline.py :이 파일은 Nerfstudio의 파이프 라인 모듈을 구축합니다. get_train_loss_dict 메소드는 이미지와 위치 편집 된 이미지를 데이터 세트로 다시 샘플링합니다.
ip2p.py :이 파일에는 습스포 2pix 모델 ( diffusers 구현 사용)이 있습니다. edit_image 메소드는 확산 모델을 사용하여 이미지가 거부되는 곳 이며이 파일에 다양한 도우미 방법이 포함되어 있습니다.
in2n.py : LPIPS 손실 및 l1loss를 사용하기 위해 get_loss_dict 메소드를 덮어 씁니다.
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},
}