Nerfstudio ๋ฅผ ์ด์ฉํด์ ์ง์ ๋ด๋ด ๋ ๋๋ง์ ํด๋ณด์
- Nerf๋ก ๋ํ๋๋ ๋ด๋ด๋ ๋๋ง์ด ์์ ์ ํ์ด๋ค (Summaries: ECCV 22, CVPR 22, ICCV 21).
- ์ต๊ทผ nerfstudio ๋ผ๋ ์คํ์์ค+ํด์ด ๋์๋ค.
- ์ง์ ํด๋ณด์!
๋ด๋ด ๋ ๋๋ง์ด๋
- ๋ด๋ด ๋ ๋๋ง์ด๋
- Advances in Neural Rendering (EUROGRAPHICS 2022) ์์ ์ค๋ช
ํ ๋ง์ ์ฎ๊ฒจ์ค์๋ฉด
- ์ค์ธ๊ณ ๊ด์ธก์ผ๋ก๋ถํฐ, ์๋ก์ด ์ค๊ฐ๋๋ ์ด๋ฏธ์ง (synthesizing a novel photo-realistic view) ๋ฅผ ์์ฑํด๋ด๋ ๊ณผ์ ๋ฐ
- ์ด๋ฅผ ์ํด ์ปดํจํฐ ๊ทธ๋ํฝ์ค์ ๋จธ์ ๋ฌ๋์ ๊ฒฐํฉํ๋ ์์ ์ด๋ผ๊ณ ํ๋ค.
- Advances in Neural Rendering (EUROGRAPHICS 2022) ์์ ์ค๋ช
ํ ๋ง์ ์ฎ๊ฒจ์ค์๋ฉด
- ์ด๋ก ์ (๋๋ ์ ๋ชจ๋ฅธ๋ค..) ์ฌ๊ธฐ์๋ ๊ทธ๋ง ์์๋ณด๋๋ก ํ๊ณ ..
(๋๊ด์) ์์ฝ
- (Nerf ๊ณ์ด ํ์ ) practical ํ๊ฒ ์์ฝํ์๋ฉด
- Input: discrete ํ images ๋ค์ poses ๋ฅผ ์๊ณ ์์ผ๋ฉด
- Output: ์์์ coordinate ์์ ๊ทธ scene ์ ๋ฐ๋ผ๋ณธ view ๋ฅผ ์ป์ ์ ์๋ค.
- ๋ฐ๋ก ์ค์ ์์๋ฅผ ํตํด ์์๋ณด์.
Input
- ์๋ฅผ ๋ค์ด, ์๋ ์ด๋ฏธ์ง๋ค์ Galaxy S22+ ๋ก ๋์ถฉ ์ฐ์ด์จ ๋น๋์ค(mp4) ์์ 3hz๋ก ์ถ์ถํ ์ฌ์ง๋ค(png) ์ด๋ค.
- ps. ๊ฐ์์ด ๋๋ฉด ์นด์ด์คํธ ์ ์ ์ฑ๊ตฌ์ฒญ ์์์๋ ๊ตญํ์ถ์ ๋ฅผ ํ๋ค. ์์๊ฒ ์ ๊พธ๋ฉฐ๋๋๋ค.
Output
- ๋จ์ํ ์์ (not continuousํ) ์ด๋ฏธ์ง ์ธ์ ์๋ฌด๋ฐ ์ฌ์ ์ ๋ณด๋ ์ฃผ์ด์ง์ง ์์์์๋,
- ์์์ ๋ทฐํฌ์ธํธ์์ ํฌํ ๋ฆฌ์ผ๋ฆฌ์คํฑ ํ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ์ ์๋ค๋ฉด,
- ์ฐ๋ฆฌ๋ ์ต์ข
์ ์ผ๋ก ์๋์ ๊ฐ์ smooth and continuous ํ video ๋ฅผ ์ป์ ์ ์๋ค. ์ด ๋ ์ด video ์ trajectory๋ฅผ ์ฌ์ฉ์๊ฐ ์์๋ก ์ค์ ํ ์ ์๋ค.
- ์ด ๋ โ์์โ์ ๋ทฐํฌ์ธํธ์์ ๊ทธ ์ฌ์ ๋ณธ ์ฌ์ค์ ์ธ ๋ทฐ๋ฅผ ์ป์ ์ ์์ผ๋ฏ๋ก, ์์ ๋น๋์ค ์ธ์ ์๋์ ๊ฐ์ด ๋ ๋ค๋ฅธ ๋๋์ ๋น๋์ค๋ฅผ ๋ง๋ค์ด๋ณผ ์๋ ์๊ฒ ๋ค.
- ๊ฟ๋์ด๊ฐ ๋ก์ผ์ ํ๊ณ ์ด๋ฅํ๋ ๋๋์ ์ข ๋ ์ด๋ ค๋ณด์๋ค.
- ps. ์์ novel view ์์ blurry ํ๊ฑฐ๋ white noise ๊ฐ์ ๋ถ๋ถ๋ค์ ์ค์ ๊ด์ธก์น๊ฐ ๋ถ์กฑํ๋ ๋ถ๋ถ์ด๋ค (์์: ๊ฟ๋์ด ๋ทํธ์ ๋ณด๋ ์ด๋ฏธ์ง๊ฐ ์์์). ๋ฐ๋ผ์ ๋ ๋ง์ ์ด๋ฏธ์ง๊ฐ ์์๋ค๋ฉด ๋ ์ฌ์ค์ ์ธ ๋ทฐ๋ฅผ ์์ฑํ ์ ์์ ๊ฒ์ด๋ค.
Nerfstudio ์ฌ์ฉ๋ฒ
- ์ด์ ์์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ป๊ฒ (์ด๋ก ๋ชฐ๋ผ๋) ์ป์ ์ ์์๋์ง ์์๋ณด์.
- ๋ง ์ต๊ทผ(Oct, 2022)์ ๋์จ Nerfstudio ๋ฅผ ์ด์ฉํด๋ณด์๋ค.
- CLI (ํฐ๋ฏธ๋์์ ์ปค๋งจ๋ ๋ช๋ฒ ๋ง์ผ๋ก) ๋ก nerf ๋ฅผ ์ํํ๋ ํด(+๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ด๋ค.
- ์น์ฑ์ผ๋ก ๋ทฐ์ด๋ ์ ๊ณตํ๊ณ ์์ด, ์ฌ์ฉ์๊ฐ ์ฝ๋ฉ์์ด ๋ด๋ด๋ ๋๋ง ๊ฒฐ๊ณผ๋ฌผ์ ์ป์ ์ ์๋ ready-to-use product ์ฌ์ ์ข์๋ค.
๋จ๊ณ 1: Pose ์ป๊ธฐ (command: ns-process-data)
- Nerf ๊ณ์ด์ ๋ด๋ด๋ ๋๋ง์ image ๋ค์ pose ๊ฐ ์ฃผ์ด์ ธ์์ ๋, novel view ๋ฅผ synthesize ํ๋ค.
- ๋ฐ๋ผ์ ๋จผ์ , unordered images ๋ค์ pose ๋ฅผ ์ป์ด์ผ ํ๋ค. ์ด๋ฏธ์ง๋ค์ poses ๋ฅผ ์๊ธฐ ์ํด์๋ colmap ์ด๋ผ๋ software ๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค.
- ์ด COLMAP ๋ถ๋ถ ์ญ์ nerfstudio ๋ด๋ถ์ ํตํฉ๋์ด ์๋ค. ์ฌ์ฉ์ ์ ์ฅ์์ ์ด๋ถ๋ถ์ด ๋งค์ฐ ํธํ๋ค.
- ๊ทธ๋์ ์ฌ๊ธฐ ์ ๋์์๋๋๋ก
ns-process-data
๋ผ๋ ์ปค๋งจ๋ ํ ์ค ๋ง์ผ๋ก๋ ์ด๋ฏธ์ง๋ค์ poses ๋ฅผ ์ป์ ์ ์๋ค. ์ด๋ ๊ฒ ์ป์ด์ง ๊ฒฐ๊ณผ๋ฌผ์ format ์ ๋ฐ๋ก nerfstudio ์ ๋ท ๋จ๊ณ์ ์ฐ์ผ ์ ์๋ compatible ํ format ์ด๋ฏ๋ก,ns-process-data
๋ฅผ ์ด์ฉํด์ colmap์ ์ํํ๊ธฐ๋ฅผ ์ถ์ฒํ๋ค. - ๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์์ฑ๋๋ค.
# {PROCESSED_DATA_DIR} (i.e., colmap output directory) โโโ colmap โย ย โโโ database.db โย ย โโโ sparse โย ย โโโ 0 โย ย โโโ cameras.bin โย ย โโโ images.bin โย ย โโโ points3D.bin โย ย โโโ project.ini โโโ images โย ย โโโ frame_00001.png โย ย โโโ frame_00002.png โย ย โโโ ... โโโ images_2 โย ย โโโ frame_00001.png โย ย โโโ frame_00002.png โย ย โโโ ... โโโ images_4 โย ย โโโ frame_00001.png โย ย โโโ frame_00002.png โย ย โโโ ... โโโ images_8 โย ย โโโ frame_00001.png โย ย โโโ frame_00002.png โย ย โโโ ... โโโ transforms.json
- ps. COLMAP software ๋ฅผ ๋ณ๋๋ก ์ฌ์ฉํ๊ฒ ๋๋ฉด ..
- ํฌ๊ฒ ์๋ 3 ๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง๋ค.
- feature extraction
- feature matching
- bundle adjustment
- ๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ด sparse ํ scene structure ์ ์ ์ด๋ฏธ์ง๋ค์ pose (position+orientation) ๋ฅผ ์ป์ ์ ์๋ค.
- ์ฌ๊ธฐ์ ๋นจ๊ฐ view ๋ค์ด poses ์ด๊ณ , ๋ถํ์ lines ๋ covisible feature ๋ฅผ ๊ฐ์ง views ๋ค ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋ณด์ฌ์ค๋ค.
- ps. ์์ ๊ฒฐ๊ณผ๋ฅผ ์ป๋๋ฐ ์ญ์ ์ฝ๋ฉ 1๋ ํ์ง ์์ผ๋ ๋น์ ๊ณต์๋ผ๊ณ ๊ฒ๋จน์ ํ์๋ ์๋ค. GUI์์ ํด๋ฆญ ๋ช๋ฒ์ด๋ฉด ๋๋๋ค.
- ๊ทธ๋์ ๋ nerfstudio ๋ด๋ถ์ colmap data ๋ฅผ ์์ฑํ๋ ๋ถ๋ถ์ด command line ํ์ค (
ns-process-data
) ๋ก ์ง์๋๊ณ ์์ผ๋ฏ๋ก colmap software gui ๋ฅผ ์ผค ์ผ ์์ฒด๊ฐ ์๊ธฐ๋ ํ๋ค.
- ๊ทธ๋์ ๋ nerfstudio ๋ด๋ถ์ colmap data ๋ฅผ ์์ฑํ๋ ๋ถ๋ถ์ด command line ํ์ค (
- ps2. ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด reconstructed ๋ scene์ด ๋งค์ฐ sparse ํจ์ ์ ์ ์๋ค.
- MVS + meshing ์ ๊ฑฐ์ณ์ ์์ map์ ๋ denser ํ๊ฒ ๋ง๋ค ์ ์๊ฒ ์ผ๋, ๋ณดํต ์ฌ์ ํ photo-realistic ํจ๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ๋ค.
- ๊ทธ๋์ (์ด ํ๊ณ๋ฅผ ํด์ํ ์ ์์ด์) ๋ด๋ด ๋ ๋๋ง์ด ๊ฐ๊ด๋ฐ๊ณ ์๋๋ฏํ๋ค. ๋ฌผ๋ก pose๊ฐ ์ฃผ์ด์ ธ์ผ ํ์ง๋ง ์ด๋ ๊ธฐ์กด traditional geometric methods (e.g., colmapโs sparse reconstruction and pose estimation) ๊ฐ ์ถฉ๋ถํ ์ ํ๋ ์ผ์ด๋ฏ๋ก ์ํธ๋ณด์์ ์ด๊ณ ์๋์ง๊ฐ ์ ๋ง๋ค!
- MVS + meshing ์ ๊ฑฐ์ณ์ ์์ map์ ๋ denser ํ๊ฒ ๋ง๋ค ์ ์๊ฒ ์ผ๋, ๋ณดํต ์ฌ์ ํ photo-realistic ํจ๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ๋ค.
- ํฌ๊ฒ ์๋ 3 ๋จ๊ณ๋ก ์ด๋ฃจ์ด์ง๋ค.
๋จ๊ณ 2: Nerf model ํ์ต ์ํค๊ธฐ
- ์ญ์ ์ปค๋งจ๋๋ผ์ธ ํ์ค๋ก ์ด๋ฃจ์ด์ง๋ค
- ์๋ฅผ ๋ค์ด,
$ ns-train nerfacto --data {PROCESSED_DATA_DIR}
- ์ด๋ nerfacto ๋ผ๋ ๋ชจ๋ธ(๋ฐฉ๋ฒ๋ก )์, ์์ ์์ฑํ image ์ pose ๋ฅผ ์ด์ฉํด์, ํ์ต์๊ฒ ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
- nerfacto ๋ โ์ฌ์ค์์ ํ์คโ์ ์๋ฏธํ๋ ๋ํฉํ ์ nerf ๋ฅผ ๊ฒฐํฉํ ์๋ฉ๊ฐ๋ค. mip-nerf ์ instant-ngp ์ ์ฅ์ ์ ์์๋ค๊ณ ํ๋ฉฐ nerfstudio ์ ์ํ์ด ์ ์ํ๋ ๋ฐฉ๋ฒ์ธ ๋ฏํ๋ค.
- ๊ทธ๋ฌ๋ฉด ์๋์ผ๋ก
outputs/{PROCESSED_DATA_DIR}/nerfacto/{TIME}
์ ๋๋ ํ ๋ฆฌ๊ฐ ์๊ธฐ๊ณ ์๋์ ๋ค์๊ณผ ๊ฐ์ log ํ์ผ๋ค๊ณผ weight ๊ฐ ์ ์ฅ๋๋ค.. โโโ camera_path.json โโโ config.yml โโโ nerfstudio_models โย ย โโโ step-000019788.ckpt # saved when after 19788 iterations โโโ viewer_log_filename.txt
- config.yml ์๋ ์ฌ๋ฌ ์ธํ
๋ค์ด ๋ด๊ฒจ์์ผ๋ฉฐ, command line ์์ ํจ๊ป ์ ๋ฌํ ์ ์๋ค.
- ์๋ฅผ ๋ค์ด, ์์ ์ ํ์ต์ํค๋ ์จ์ดํธ๋ก๋ถํฐ ์์ํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ํด์ฃผ๋ฉด ๋๊ฒ ๋ค.
$ ns-train nerfacto --data {PROCESSED_DATA_DIR} --trainer.load_dir {YOUR_WEIGHT_SAVED_DIR}
- ์๋ฅผ ๋ค์ด, ์์ ์ ํ์ต์ํค๋ ์จ์ดํธ๋ก๋ถํฐ ์์ํ๊ณ ์ถ๋ค๋ฉด ์๋์ ๊ฐ์ด ํด์ฃผ๋ฉด ๋๊ฒ ๋ค.
- config.yml ์๋ ์ฌ๋ฌ ์ธํ
๋ค์ด ๋ด๊ฒจ์์ผ๋ฉฐ, command line ์์ ํจ๊ป ์ ๋ฌํ ์ ์๋ค.
- ์ด๋ nerfacto ๋ผ๋ ๋ชจ๋ธ(๋ฐฉ๋ฒ๋ก )์, ์์ ์์ฑํ image ์ pose ๋ฅผ ์ด์ฉํด์, ํ์ต์๊ฒ ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
- ๊ทธ๋ฌ๋ฉด ํ์ต์ด ์์๋๊ณ , ํฐ๋ฏธ๋์์ webapp URI๋ฅผ ์๋ ค์ค๋ค.
- ์๋ฅผ ๋ค์ด
https://viewer.nerf.studio/versions/22-10-07-0/?websocket_port=7007
- ๋ค์ด๊ฐ๋ฉด ์๋์ ๊ฐ์ด ์ค์๊ฐ์ผ๋ก ํ์ต๋๋ ํ์ง (์ ํด์๋ ํ์ ) ์ ๋ณผ ์ ์๋ค.
- ๊ทธ๋์ ํ์ต์ด ์งํ๋จ์ ๋ฐ๋ผ ์ด๋์ ๋ ํ์ง์๊น์ง ๋๋ฌํ๋์ง๋ฅผ ๋์ถฉ ํ์
ํด๋ณผ ์ ์๋ค.
- ์์ output ์์ ์๊ฐํ ๋น๋์ค๋ค์ 15000 iterations ์ ๋๋ฅผ ํ์ตํ ์จ์ดํธ์์ ์ป์ ๊ฒฐ๊ณผ์ด๋ค.
- 1080ti ๊ธฐ์ค + ์์ ๊ฟ๋์ด ๋ฐ์ดํฐ์ ๊ธฐ์ค 10 iteration ์ 1์ด์ ๋ ์์๋์๋ค.
- ์์ output ์์ ์๊ฐํ ๋น๋์ค๋ค์ 15000 iterations ์ ๋๋ฅผ ํ์ตํ ์จ์ดํธ์์ ์ป์ ๊ฒฐ๊ณผ์ด๋ค.
- ์๋ฅผ ๋ค์ด
๋จ๊ณ 3: trajectory planning ๋ฐ ๋น๋์ค ์ ์
- ์น์ฑ์์ ๋ํ trajectory ๋ planning ํ ์ ์๋ค. ์์ธํ๊ฑด ์ด ํํ ๋ฆฌ์ผ ์์์ ์ฐธ๊ณ .
- ๊ทธ๋ฌ๋ฉด synthesize ํ๊ณ ์ถ์ set of images ๋ค์ trajectory ๊ฐ ์
์
๋๋๋ฐ, ์ด ์ญ์ ์ปค๋งจ๋๋ฅผ ๋ฐ๋ก ๋ณต์ฌํ ์ ์๋๋ก ํด์ค์ ๋งค์ฐ ํธ๋ฆฌํ๋ค. ์๋ฅผ ๋ค์ด, ๋ค๋ฅธ ํฐ๋ฏธ๋์ ์ผ๊ณ
ns-render --load-config outputs/3hz_ns/nerfacto/2022-10-10_122640/config.yml --traj filename --camera-path-filename outputs/3hz_ns/nerfacto/2022-10-10_122640/camera_path.json --output-path renders/output.mp4
์ด๋ฐ์์ผ๋ก ํด์ฃผ๋ฉด ๋น๋์ค๊ฐ ๊ทธ์ ์ฅ์ฅ ์์ฑ๋๋ค.
- ๊ทธ๋ฌ๋ฉด synthesize ํ๊ณ ์ถ์ set of images ๋ค์ trajectory ๊ฐ ์
์
๋๋๋ฐ, ์ด ์ญ์ ์ปค๋งจ๋๋ฅผ ๋ฐ๋ก ๋ณต์ฌํ ์ ์๋๋ก ํด์ค์ ๋งค์ฐ ํธ๋ฆฌํ๋ค. ์๋ฅผ ๋ค์ด, ๋ค๋ฅธ ํฐ๋ฏธ๋์ ์ผ๊ณ
- ๊ทธ ๊ฒฐ๊ณผ ์ต์ข
์ ์ผ๋ก ์์ ๋ณด์ธ ๋น๋์ค ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์๋ค :)
- ์ด ๋ ์น์ฑ์์ ํด์๋ ์ญ์ ์กฐ์ ํ ์ ์๋ค.
- 1080 x 1920 ์ผ๋ก ์ ์ํ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฑฐ์ 10G ๋จน๊ณ , ์์ฑ์๋๋ 15-20์ด์ ํ์ฅ ์์ค์ด์๋ค (1080ti ๊ธฐ์ค).
- 600x600 ์์๋ ๋ฉ๋ชจ๋ฆฌ 6-7G ์ ๋, ์์ฑ์๋๋ 4-5์ด์ ํ์ฅ ์์ค์ด์๋ค.
- ๋๋ฆฌ๊ธด ํ๋ค.
- ์ด ๋ ์น์ฑ์์ ํด์๋ ์ญ์ ์กฐ์ ํ ์ ์๋ค.
๊ฒฐ๋ก
- Nerfstudio ๋ฅผ ์ด์ฉํด์ ์ฝ๋ฉ์์ด+์ด๋ก ๋ชฐ๋ผ๋ nerf ๋ฅผ ์ฒดํํด๋ณผ ์ ์์๋ค!
TODO
- mip-nerf ์ instant-ngp ๋ฅผ ๊ณต๋ถํด๋ณด์.