본문 바로가기
AI/3D reconstruction & generation

[Code Build][Ubuntu] Gaussian Frosting: Editable Complex Radiance Fields with Real-Time Rendering

by SolaKim 2025. 1. 10.

https://github.com/Anttwo/Frosting?tab=readme-ov-file

 

GitHub - Anttwo/Frosting: [ECCV 2024 - ORAL] Official PyTorch implementation of Gaussian Frosting: Editable Complex Radiance Fie

[ECCV 2024 - ORAL] Official PyTorch implementation of Gaussian Frosting: Editable Complex Radiance Fields with Real-Time Rendering - Anttwo/Frosting

github.com

두비두밥 버즈

https://github.com/Anttwo/Frosting/blob/main/media/gifs/buzz_dancing_sh.gif

 

[ required ubuntu environment]
ubuntu 20.04
cuda 11.8

 

Gaussian Frosting Pipeline 요약 (5단계 + 선택적 단계)


1. Short Vanilla 3DGS Optimization (7k iterations)

  • 목적: Gaussians가 장면에 올바르게 배치되도록 초기 최적화 진행.
  • 설명: 3D Gaussian Splatting 모델을 7,000번 반복 학습하여 Gaussians를 장면에 위치시킴.

2. Surface Regularization (표면 정규화)

  • 목적: Gaussians를 장면 표면과 정렬되도록 최적화.
  • 설명: 표면과 일치하도록 Gaussians의 위치 및 배치를 조정하여 더욱 정확한 표면 정보를 확보.

3. Mesh Extraction (메쉬 추출)

  • 목적: 최적화된 Gaussians로부터 메쉬를 추출하여 Frosting 레이어의 기반으로 사용.
  • 설명: Gaussians를 기반으로 3D 메쉬 모델 생성.

4. Frosting Layer Initialization (Frosting 레이어 초기화)

  • 목적: 메쉬 주위에 가우시안 레이어를 생성하여 표면 근처 세부 정보 및 재질 두께를 반영.
  • 설명:
    • 재질의 "불확실성(fuzziness)"이 큰 부분일수록 두께가 증가하는 적응형 레이어 생성.
    • Gaussians가 표면에 얼마나 잘 정렬되는지 분석하여 두께를 계산.

5. Frosting Layer Optimization (Frosting 레이어 최적화)

  • 목적: 표면 근처 세부 정보 및 볼륨 효과를 정확하게 표현하도록 최적화.
  • 특징:
    • GPU 성능에 따라 Frosting 레이어 내 Gaussians 수를 조정 가능.
    • 복잡한 부분에 더 많은 Gaussians를 자동으로 할당.
    • Occlusion Culling (선택 사항):
      • 메쉬에 의해 가려진 Gaussians를 건너뜀으로써 최적화 속도 향상.
      • 렌더링 품질에는 약간의 영향을 줄 수 있음.

6. Textured Mesh Extraction (선택적 단계)

  • 목적: Frosting 레이어로부터 텍스처 메쉬를 추출하여 Blender와 같은 툴에서 시각화, 편집, 애니메이션에 활용.
  • 설명: 텍스처가 포함된 메쉬를 추출하여 더욱 직관적인 시각화 및 조작 가능

 

가상환경구축

git cloning 합시다.

# HTTPS
git clone https://github.com/Anttwo/Frosting.git --recursive

 

/Frosting 폴더 들어가서

python install.py
conda activate frosting

이게 제가 window 컴이랑 ubuntu 환경이랑 둘다 시도해봤는데,
environment.yml 에 linux 전용 패키지들이 너무 많아서, window 에서는 환경구축이 잘 안됩니다..(윈도우컴에서는 building 못할듯.. 아니면 linux 패키지를 빼고 설치해도 되긴 하는데, dependency 문제가 생길 수도 있어서 일단은 pass!!)

 

 

Training

python train_full_pipeline.py -s <path to COLMAP dataset> --gaussians_in_frosting 2_000_000 -r <"dn_consistency", "density" or "sdf"> --use_occlusion_culling False --export_obj True
더보기

python train_full_pipeline.py -s /source/sola/Frosting/data/tandt_db/db/playroom --gaussians_in_frosting 2_000_000 -r dn_consistency --use_occlusion_culling False --export_obj True

 

Gaussian Frosting 파이프라인 요약

  1. Frosting 레이어에 사용하는 Gaussians 수 조정 (--gaussians_in_frosting)
    • 기본값: 2,000,000 Gaussians
    • 고품질을 위해 5,000,000 Gaussians 시도 가능.
  2. 정규화 방법 선택 (--regularization_type / -r)
    • 옵션: "dn_consistency"(추천), "density", "sdf"
    • "density": 오브젝트 중심 장면에 적합
    • "sdf": 배경이 복잡한 장면 (예: Mip-NeRF 360)용.
  3. Occlusion Culling (--use_occlusion_culling)
    • 기본값: False
    • True일 경우, 최적화 및 렌더링 속도 개선, 메모리 사용량 감소.
    • 품질에 약간의 영향 있음.
  4. 텍스처 메쉬 추출 (--export_obj)
    • 기본값: True
    • Blender에서 편집 및 시각화에 필요한 .obj 파일을 생성.

중요한 주요 파라미터 설명 (train_full_pipeline.py)

파라미터타입설명

--scene_path / -s str COLMAP 데이터셋이 있는 경로.
--gs_output_dir str Vanilla 3D Gaussian Splatting 체크포인트 디렉토리 경로. (없을 경우 3DGS 모델을 새로 학습)
--eval bool 훈련 이미지에 대해 평가를 수행. 기본값 False.
--low_poly bool Low-poly 메쉬 생성 (200,000 vertices).
--high_poly bool High-poly 메쉬 생성 (1,000,000 vertices).
--refinement_time str 최적화 시간 설정: "short" (2k 반복), "medium" (7k), "long" (15k).
--export_ply bool 최종 Frosting 3D Gaussians를 .ply 파일로 내보내기. 기본값 True.
--poisson_depth int 메쉬 추출을 위한 Poisson 재구성 깊이. 기본값 -1(자동 설정).
--cleaning_quantile float 메쉬 정리 시 사용되는 분위수. 기본값 0.1.
--connected_components_vis_th float 보이지 않는 연결된 구성 요소 제거 임계값.
--texture_square_size int UV 텍스처에서 삼각형당 할당된 사각형 크기. 기본값 8 (큰 값은 해상도 증가).
--white_background bool 이미지 배경을 흰색으로 설정할지 여부. 기본값 False.

기본 설정

  • high_poly 모드 + refinement_time "long" (15k 반복).
  • 저품질 모드: --refinement_time "short" 설정 시 2~3분 소요.
  • 고품질 모드: "long" 설정 시 최대 30분 소요.

 

Frosting 에서는 두가지 방법으로 학습을 지원합니다.

1. Training from Scratch (처음부터 학습)

  • 초기화 방식:
    • 아무런 사전 학습 없이 Gaussian splats를 무작위로 초기화하여 학습을 시작합니다.
  • 학습 시간:
    • 처음부터 최적의 Gaussians 위치와 색상, 밀도 등을 학습하기 때문에 시간이 오래 걸립니다.
  • 필요한 리소스:
    • 대규모 연산 리소스가 필요하며, 초기 수렴 속도가 느릴 수 있습니다.
  • 결과 품질:
    • 최적의 파라미터를 찾아가며 학습하므로 결과가 좋을 수 있지만, 학습 과정이 더 길어질 가능성이 있습니다.

2. Training from a Vanilla Gaussian Splatting Model (기존 모델 기반 학습)

  • 초기화 방식:
    • 기존 Vanilla Gaussian Splatting 모델의 체크포인트를 불러와 학습을 시작합니다.
  • 학습 시간:
    • 기존 모델의 사전 학습된 Gaussians가 초기값으로 사용되기 때문에 학습 시간을 크게 단축할 수 있습니다.
  • 필요한 리소스:
    • 학습이 빠르게 진행되기 때문에 메모리 및 연산 효율이 높아집니다.
  • 결과 품질:
    • 사전 학습된 정보가 기반이 되기 때문에 더 안정적이고 빠르게 좋은 품질의 결과를 얻을 수 있습니다.
    • 하지만 사전 학습된 모델이 특정 데이터에 맞춰져 있으면, 일반화된 모델보다 약간 제한적인 결과가 나올 수 있습니다.

 

아래 코드는 기존 3dgs 모델 기반 학습 코드입니다.

python train_full_pipeline.py -s <path to COLMAP dataset> --gaussians_in_frosting 2_000_000 -r <"dn_consistency", "density" or "sdf"> --use_occlusion_culling False --export_obj True --gs_output_dir <path to the output directory of the vanilla 3DGS>
더보기

python train_full_pipeline.py -s /source/sola/Frosting/data/tandt_db/db/drjohnson --gaussians_in_frosting 2_000_000 -r dn_consistency --use_occlusion_culling False --export_obj True --gs_output_dir /source/sola/Frosting/data/3dgs_model/drjohnson

 

이렇게 돌리니, 해당 colmap data set 폴더에 이미지가 없다는 에러가 발생했습니다.

FileNotFoundError: [Errno 2] No such file or directory: '/source/sola/Frosting/data/tandt_db/db/drjohnson/images/IMG_6292.jpg.jpg'

에러코드를 보니, 파일명에 확장자가 중복되어 들어가 있는것을 확인할 수 있었습니다.

 

=> name에 확장자가 이미 포함되어 있는 경우, 다시 추가하지 않도록 조건문을 추가해야 합니다.

(root폴더)/frosting_scene 폴더로 들어가서 cameras.py 코드를 일부 수정해줘야합니다.


수정된 코드 예시:

 
# 확장자가 이미 포함되어 있는지 확인 후 추가
if not name.endswith(('.jpg', '.png', '.jpeg', '.JPG', '.PNG')): 
    image_path = os.path.join(image_dir, name + extension)
else: image_path = os.path.join(image_dir, name)

코드 적용 위치:

load_gs_cameras 함수 내, 다음 코드 부분을 위 코드로 교체합니다:

image_path = os.path.join(image_dir, name + extension)

 

그리고 다시 train 시키는 명령문을 작성해보면, 잘 학습되는것을 확인할 수 있습니당.