[3D CV ์ฐ๊ตฌ] 3DGS Tips for using COLMAP
Estimating Camera Poses with COLMAP
Install COLMAP
- ์ต์ ๋ฒ์ ์ COLMAP (๊ฐ๋ฅํ๋ฉด CUDA ์ง์)์ ์ค์นํฉ๋๋ค.
- ์ฌ์ฉํ๋ ค๋ ์ด๋ฏธ์ง๋ฅผ
/input ๋๋ ํ ๋ฆฌ์ ๋ฃ์ต๋๋ค.
Run conversion script
- COLMAP์ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง์์ ์นด๋ฉ๋ผ ํฌ์ฆ๋ฅผ ๊ณ์ฐํ๋ ค๋ฉด Gaussian Splatting์ ์๋ ๊ตฌํ์์ gaussian_splatting/convert.py ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค:
python gaussian_splatting/convert.py -s <location>
gaussian-splatting/convert.py
๋ฅผ ๋ณด์๋ฉด, ์ดฌ์ํ input ์ด๋ฏธ์ง๋ค์ ๋ํด Image undistortion๊น์ง ์ํํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
### Image undistortion
## We need to undistort our images into ideal pinhole intrinsics.
img_undist_cmd = (colmap_command + " image_undistorter \
--image_path " + args.source_path + "/input \
--input_path " + args.source_path + "/distorted/sparse/0 \
--output_path " + args.source_path + "\
--output_type COLMAP")
exit_code = os.system(img_undist_cmd)
if exit_code != 0:
logging.error(f"Mapper failed with code {exit_code}. Exiting.")
exit(exit_code)
Handling multiple sub-models
- COLMAP์ด ๋ชจ๋ ์ด๋ฏธ์ง๋ฅผ ๋์ผํ ๋ชจ๋ธ๋ก ์ฌ๊ตฌ์ฑํ์ง ๋ชปํ๊ณ ์ฌ๋ฌ ์๋ธ ๋ชจ๋ธ์ ์์ฑํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก convert.py ์คํฌ๋ฆฝํธ๋ ์ฒซ ๋ฒ์งธ ์๋ธ ๋ชจ๋ธ์๋ง ์ด๋ฏธ์ง ์๊ณก ์ ๊ฑฐ๋ฅผ ์ ์ฉํฉ๋๋ค.
- ์ฒซ ๋ฒ์งธ ์๋ธ ๋ชจ๋ธ์ ์ด๋ฏธ์ง๊ฐ ๋ช ๊ฐ ์๋ ๊ฒฝ์ฐ, ๊ฐ์ฅ ํฐ ์๋ธ ๋ชจ๋ธ๋ง ๋จ๊ธฐ๊ณ ๋๋จธ์ง๋ ์ญ์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
Keep the largest sub-model
- ์
๋ ฅ ์ด๋ฏธ์ง๊ฐ ์๋ ์์ค ๋๋ ํ ๋ฆฌ๋ฅผ ์ด๊ณ ,
/distorted/sparse/ ํ์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ฝ๋๋ค. - 0/, 1/ ๋ฑ์ผ๋ก ์ด๋ฆ ๋ถ์ฌ์ง ์ฌ๋ฌ ํ์ ๋๋ ํ ๋ฆฌ๊ฐ ๋ณด์ผ ๊ฒ์ ๋๋ค.
- ๊ฐ์ฅ ํฐ ํ์ผ์ ํฌํจํ๋ ํ์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ ์ธํ ๋ชจ๋ ํ์ ๋๋ ํ ๋ฆฌ๋ฅผ ์ญ์ ํ๊ณ , ํด๋น ๋๋ ํ ๋ฆฌ๋ฅผ 0/์ผ๋ก ์ด๋ฆ์ ๋ณ๊ฒฝํฉ๋๋ค.
- ๊ทธ๋ฐ ๋ค์ ๋งค์นญ ๊ณผ์ ์ ๊ฑด๋๋ฐ๊ณ convert.py ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ ์คํํฉ๋๋ค:
python gaussian_splatting/convert.py -s <location> --skip_matching
Merging sub-models (optional)
- ์๋ธ ๋ชจ๋ธ๋ค์ด ๊ณตํต์ผ๋ก ๋ฑ๋ก๋ ์ด๋ฏธ์ง๋ฅผ ํฌํจํ๋ ๊ฒฝ์ฐ, COLMAP์ ์ฌ์ฉํ์ฌ ๋จ์ผ ๋ชจ๋ธ๋ก ๋ณํฉํ ์ ์์ต๋๋ค.
- ๋จ, ์๋ธ ๋ชจ๋ธ ๋ณํฉ ํ์๋ ์ ์ญ ๋ฒ๋ค ์กฐ์ ์ ๋ค์ ์คํํด์ผ ํ๋ฏ๋ก ์๊ฐ์ด ๋ง์ด ์์๋ ์ ์์ต๋๋ค.
https://github.com/Anttwo/SuGaR?tab=readme-ov-file
Leave a comment