
가우시안 스플래팅(Gaussian Splatting)은 3D 공간에서 장면을 표현하기 위해 사용되는 기법으로, 가우시안 분포를 활용하여 데이터를 효과적으로 압축하고 렌더링하는 방식이다. 이 기법은 포인트 클라우드(Point Cloud) 데이터를 3D 가우시안 분포로 변환하여 각 포인트를 하나의 가우시안으로 표현한다. 가우시안 분포는 중심점 μ, 공분산 행렬 Σ, 및 가중치 w로 정의되며, 특정 위치 x에서의 가우시안 값은 다음과 같이 계산된다.

이 방식을 통해 가우시안 형태로 데이터를 표현하면, 기존의 포인트 클라우드보다 더 부드럽고 연속적인 장면 표현이 가능하다. 가우시안 스플래팅은 공분산 행렬을 활용해 각 포인트의 크기와 방향성을 조절할 수 있어, 더욱 자연스럽고 디테일한 렌더링을 지원한다. 또한, 가중치 w는 각 가우시안의 기여도를 조절하여 밝기와 투명도를 제어한다. 이를 통해 장면의 시각적 품질을 유지하면서 계산 효율성을 높이는 데 유용하다. 이미지 데이터의 학습을 통해 가상 환경에 렌더링하는 과정은 다음과 같다.
1. 이미지 학습: 데이터 수집 및 처리
이미지 학습은 가우시안 스플래팅의 첫 번째 단계로, 여러 각도에서 촬영된 이미지 또는 비디오를 이용해 장면 데이터를 수집한다. 이 데이터는 주로 카메라의 내·외부 파라미터와 함께 제공되며, 각 이미지 픽셀의 2D 좌표와 대응하는 3D 공간 정보를 추출하기 위해 Structure-from-Motion(SfM) 또는 멀티뷰 스테레오(MVS) 기법을 사용한다. 이 과정에서 포인트 클라우드가 생성되며, 이는 장면을 나타내는 수많은 3D 점들로 구성된다. 이후, 노이즈 제거와 샘플링 과정을 통해 데이터를 정제하여 학습의 품질을 높인다.
2. 포인트 클라우드에서 가우시안 변환
생성된 포인트 클라우드는 각각의 점을 중심으로 가우시안 분포로 변환된다. 각 점은 위치 벡터(μ)와 공분산 행렬(Σ)을 포함한 파라미터로 표현된다. 공분산 행렬은 해당 점의 크기와 방향성을 정의하며, 카메라의 관측 방향과 이미지의 밝기 정보를 기반으로 초기화된다. 예를 들어, 밝기가 높은 영역에서는 가우시안의 가중치(w)를 높게 설정하여 렌더링 시 더 큰 기여를 하게 만든다. 이 과정에서 점의 밀도를 조절하여 부드럽고 연속적인 장면 표현이 가능하도록 한다.
3. 가우시안 스플래팅: 데이터 최적화
가우시안 분포로 변환된 포인트 클라우드는 최적화 과정을 통해 더욱 정확하게 조정된다. 이 단계에서는 각 가우시안의 위치(μ), 공분산 행렬(Σ), 및 가중치(w)가 학습 데이터를 기반으로 최적화된다. 일반적으로 이 과정은 신경망 기반의 백프로파게이션 알고리즘을 통해 이루어진다. 손실 함수는 이미지 픽셀과 가우시안 렌더링 결과 간의 차이를 최소화하는 방향으로 정의되며, 이를 통해 가우시안의 모양과 배치가 점진적으로 개선된다. 이 단계는 렌더링의 품질과 정확성을 크게 향상시키는 핵심 과정이다.
4. 가우시안 렌더링: 장면 재구성
최적화된 가우시안 분포는 화면 상에서 렌더링되어 2D 이미지를 생성한다. 렌더링 과정은 가우시안 분포의 중첩 효과를 계산하여 각 픽셀의 색상과 밝기를 결정한다. 가우시안 분포는 화면 공간으로 투영된다. 렌더링 결과는 후처리 단계를 거쳐 최종 출력물로 제공된다. 후처리는 톤 매핑(Tone Mapping), 노이즈 제거, 밝기 및 색상 조정과 같은 작업을 포함하여 렌더링 결과의 시각적 품질을 높이는 데 초점을 맞춘다. 최종적으로, 학습된 가우시안 모델은 다양한 각도에서의 이미지 렌더링에 활용된다.
1. 동영상 파일 포인트 클라우드 추출
1.1 윈도우
GitHub - jonstephens85/gaussian-splatting-Windows: 3D Gaussian Splatting for Real-Time Radiance Field Rendering - Detailed Windo
3D Gaussian Splatting for Real-Time Radiance Field Rendering - Detailed Windows Install & Usage Instructions - jonstephens85/gaussian-splatting-Windows
github.com
1. 환경 설정 (Environment Setup)
3D Gaussian Splatting 작업을 시작하려면 몇 가지 필수 소프트웨어와 도구를 설치해야 한다. 환경 설정은 모든 프로세스가 원활히 실행되도록 보장하는 단계이다.
(1) Python 및 Conda 설치
- Python 3.8 이상 버전 필요. Python 공식 웹사이트에서 다운로드
- Python 가상환경 관리를 위해 Conda(Anaconda 또는 Miniconda) 설치
conda create -n gaussian_splatting python=3.8
conda activate gaussian_splatting
(2) CUDA Toolkit 설치

- NVIDIA GPU가 있다면 CUDA Toolkit 11.8을 설치해야 한다. NVIDIA 개발자 페이지에서 다운로드할 수 있다.
- 설치 후 CUDA 버전을 확인하여 설치가 올바르게 되었는지 확인
nvcc --version
설치된 버전이 11.6 이하나 12.0 이상일 경우 오류가 발생할 수 있음
CUDA(Compute Unified Device Architecture)는 NVIDIA에서 개발한 병렬 컴퓨팅 플랫폼 및 프로그래밍 모델로, GPU(Graphics Processing Unit)의 성능을 활용하여 대규모 연산을 처리할 수 있도록 지원합니다. 3D Gaussian Splatting에서 CUDA는 학습 및 데이터 처리 과정에서 중요한 역할을 한다. 특히, 이미지 데이터를 바탕으로 방대한 양의 3D 포인트 클라우드를 생성하고, 이를 학습하여 실시간 렌더링 가능한 모델을 만드는 과정에서 GPU를 효율적으로 사용한다. 예를 들어, Colmap에서 카메라 위치를 계산하거나 학습 스크립트(train.py)를 실행할 때, CUDA는 GPU의 병렬 처리 능력을 활용하여 계산 속도를 대폭 향상시켜 모델 학습 시간을 단축합한다. GPU와 CUDA의 활용 없이는 대규모 데이터 처리가 매우 느려지거나 불가능할 수 있다.
(3) Colmap 설치

- Colmap은 3D 모델 생성을 위한 필수 도구로, 사진 데이터의 카메라 위치와 포인트 클라우드를 계산한다.
- Windows의 경우, Colmap 공식 웹사이트에서 설치 파일을 다운로드
- 설치 후, Colmap 경로를 시스템 환경 변수에 추가
Colmap은 3D Reconstruction을 위해 널리 사용되는 오픈소스 도구로, 이미지 데이터로부터 Structure-from-Motion(SfM) 및 Multi-View Stereo(MVS) 기술을 활용하여 3D 포인트 클라우드와 카메라 위치를 계산한다. 3D Gaussian Splatting에서는 Colmap을 통해 사진 또는 영상 프레임의 공간적 관계를 분석하여 각 이미지의 카메라 위치와 3D 구조를 추출한다. 예를 들어, 사용자가 물체를 다양한 각도에서 촬영한 이미지를 convert.py 스크립트를 통해 Colmap에 입력하면, Colmap은 이 데이터를 처리하여 포인트 클라우드, 카메라 위치 데이터(camera.json), 그리고 이미지 좌표 매핑 정보를 생성한다. 이 데이터는 Gaussian Splatting의 학습 단계에서 장면을 3D로 모델링하는 데 필수적인 기반이 된다.
(4) FFmpeg 설치

- FFmpeg는 동영상을 이미지로 변환하는 도구이다.
- FFmpeg 공식 웹사이트에서 다운로드한 후, 압축을 풀고 설치 경로를 환경 변수(PATH)에 추가한다.
ffmpeg -version
FFmpeg는 오픈소스 멀티미디어 프레임워크로, 동영상 및 오디오 데이터를 처리하고 변환하는 데 널리 사용됩니다. 3D Gaussian Splatting에서는 동영상을 개별 이미지 프레임으로 분할하여 학습에 필요한 입력 데이터를 생성하는 데 사용된다. 예를 들어, 사용자가 360도로 장면을 촬영한 동영상을 FFmpeg 명령어를 통해 처리하면, 특정 간격(fps)에 따라 프레임이 추출되어 개별 이미지 파일로 저장된다.
ffmpeg -i input_video.mp4 -vf fps=2 output_folder/img_%04d.png
(5) ImageMagick 설치

- ImageMagick은 이미지 크기를 조정하거나 변환하는 도구로, 3D Gaussian Splatting에서 이미지 처리를 위해 사용된다.
- ImageMagick 공식 웹사이트에서 다운로드
ImageMagick은 오픈소스 이미지 처리 소프트웨어로 이미지 변환, 크기 조정, 필터링, 포맷 변환 등 다양한 작업을 지원한다. 3D Gaussian Splatting에서는 학습에 필요한 이미지 데이터를 사전 처리하기 위해 ImageMagick을 사용한다. 예를 들어, 사용자가 다양한 해상도의 이미지를 Colmap과 학습 모델에 입력할 때, ImageMagick을 통해 이미지를 일괄적으로 크기를 조정하거나 최적화하여 모델에 적합한 포맷으로 변환할 수 있다.
magick mogrify -resize 512x512! *.png
이 명령어는 현재 디렉토리 내의 모든 .png 파일을 512x512 픽셀로 변환하여, 모델 학습 중 계산 효율성을 높인다. ImageMagick은 특히 Colmap이나 모델 학습 과정에서 비효율적인 이미지 크기나 포맷으로 인해 발생할 수 있는 오류를 방지하며, 학습 데이터의 품질을 균일하게 유지한다. 이러한 유연성과 자동화 기능 덕분에 대규모 이미지 데이터셋 처리 시 필수적인 도구로 활용된다.
(6) Visual Studio 설치
- Visual Studio 2019 이상 버전이 필요하며, 설치 시 C++ 데스크탑 개발 옵션을 반드시 선택해야 한다.
cl
2. 이미지 준비 (Image Preparation)
Gaussian Splatting에서 3D 모델을 생성하려면 먼저 사진 또는 동영상 데이터를 준비해야 한다.
(1) 사진 또는 영상 촬영 : 장면 또는 물체의 고품질 데이터를 촬영합니다:
- 360도 촬영: 물체나 장면을 중심으로 회전하며 사진을 찍습니다.
- 다양한 각도: 다른 높이와 거리를 추가하여 다양한 관점을 확보합니다.
- 고정된 장면: 움직이는 물체가 없는 정적인 장면이 가장 이상적입니다.
- 예시: 방 내부, 고정된 물체, 건축물 등.
(2) 동영상에서 이미지 추출
- 준비된 동영상을 이미지 프레임으로 변환합니다. 이는 FFmpeg를 통해 가능합니다.
- 다음 명령어를 사용하여 동영상의 특정 프레임 간격으로 이미지를 추출합니다
- Gaussian Splatting에서 3D 모델을 생성하려면 먼저 사진 또는 동영상 데이터를 준비해야 합니다. 이 단계에서는 데이터를 효율적으로 수집하고 처리하는 방법을 설명합니다.
ffmpeg -i input_video.mp4 -vf fps=2 output_folder/img_%04d.png
- fps=2는 초당 2프레임을 추출한다는 의미로, 원하는 간격으로 조정 가능합니다.
- 결과적으로 이미지가 output_folder에 저장됩니다.
3. 데이터 처리 및 변환 (Data Processing)
촬영한 이미지를 학습에 사용할 수 있도록 변환하는 과정입니다. 이 과정에서는 Colmap을 사용하여 이미지 간의 3D 공간적 관계를 계산합니다.
(1) Colmap을 통한 이미지 정렬
- Colmap은 이미지 간의 관계를 계산하고 카메라 위치를 추정합니다.
- Gaussian Splatting에서 제공하는 convert.py 스크립트를 실행하여 데이터를 처리합니다
python convert.py -s data/project_name
- 여기서 data/project_name은 입력 이미지가 포함된 폴더 경로입니다.
- 스크립트가 실행되면 다음과 같은 폴더 구조가 생성됩니다
project_name/
├── input/
├── sparse/
├── stereo/
├── images/
(2) 데이터 확인
- 결과 폴더에서 이미지와 카메라 매트릭스 파일이 제대로 생성되었는지 확인하세요.
- 오류 발생 시, 로그 파일을 검토하여 문제를 해결합니다.
4. 모델 학습 (Model Training)
이미지 데이터를 바탕으로 3D 모델을 학습하는 단계입니다. 이 과정은 많은 계산을 포함하며, GPU의 성능에 따라 시간이 달라질 수 있습니다.
(1) 학습 시작
- 제공된 train.py 스크립트를 실행하여 모델을 학습합니다:
python train.py -s data/project_name
- 학습 도중 약 7,000번 반복(iteration)마다 중간 결과가 저장됩니다.
- 30,000번 반복 후 최종 모델이 생성됩니다.
(2) 학습 완료 후 결과물
- 학습이 완료되면 output/ 폴더에 결과물이 저장됩니다:
output/
├── arguments.txt
├── camera.json
├── point_cloud/
├── iterations/
-
- point_cloud/에는 학습된 포인트 클라우드 데이터가 저장됩니다.
- camera.json은 카메라 위치 정보가 포함된 파일입니다.
5. 결과 확인 (Viewing the Results)
(1) Viewer 실행 준비
- 학습된 모델을 확인하려면 Viewer 바이너리를 다운로드합니다.
- Viewer 바이너리에서 viewer.zip 파일을 다운로드하고, 프로젝트 폴더에 압축 해제합니다.
(2) Viewer 실행
- Viewer를 실행하여 결과를 확인합니다:
viewer.exe -m output/project_name
-
- 실행 후 3D 장면을 탐색할 수 있습니다.
- W, A, S, D 키로 이동, I, K로 상하 조작.
(3) 결과 조정
- Viewer 내에서 다음 설정을 조정 가능합니다:
- Splats 크기: 장면의 세부 표현 조정.
- FPS: 프레임 속도 최적화.
- 시점: 카메라 위치와 각도 변경.
6. 추가 최적화 및 활용
- 재학습: 학습을 중단한 지점부터 재개하려면 다음 명령어를 사용합니다
python train.py -r output/project_name
동영상 생성: Viewer에서 장면을 녹화하여 동영상으로 저장 가능합니다.