아래 글에서 이 블로그에서 리뷰한 논문들의 흐름과 분야별 분류를 한 눈에 볼 수 있다.
읽은 논문들 정리
[목차]지속적으로 업데이트 중, 번호는 모델발전 순서가 아닌 읽은 순서에 따라 정렬.1. Computer Vision 분야 논문Classification 모델들의 발전Detection 모델들의 발전Segmentation3D 처리2. Natural Language Process
april2901.tistory.com
간단요약
이번 논문은 빠른 속도와 넓은 범위를 다뤄야하는 자율주행에서 장면 합성을 하는 것에 대한 논문이다.
기본적으로 배경과 물체를 구분하는데, 배경은 고정시키고 물체만 움직이는 방식으로 합성하는 방식을 사용한다.
처음 가우시안을 초기화할 때는 기존 3DGS에서 썼던 COLMAP이 아닌 LiDAR데이터를 사용해 점의 위치를 얻는다.
배경은 한번에 다 모델링하지 않고 시간순서대로 순차적으로 모델링한다.
객체의 움직임은 따로 저장한다.
이 둘을 3DGS로 합치게 되면 자연스럽게 배경과 사람이 서로 가리게 되는 모습을 렌더링할 수 있다.
Composite Gaussian Splatting
Incremental Static 3D Gaussians

$bin$나누기
기준 차량이 고속으로 이동할 때, 먼 미래의 시점이나 먼 거리의 배경을 한 번에 학습시키면 문제가 발생한다.
이를 막기 위해 LiDAR 센서의 거리(Depth) 값을 기준으로 장면(배경)을 나눈다.
예를 들면 차의 출발 위치부터 10m까지는 $bin_0$, 10~20m구간은 $bin_1$같은 느낌이다.
각 구역을 찍은 프레임들끼리 모이는데 이 안에서는 시간순으로 정렬한다.
첫 $bin$초기화
첫 구역($bin_1$)에 대해서는 LiDAR데이터를 사용해 점을 초기화한다.
기존 3DGS의 SfM과 비슷한 역할이다.
식은 당연히 3DGS와 비슷하다.
$$p_{b_{0}}(l|\mu,\Sigma)=e^{-\frac{1}{2}(l-\mu)^{\top}\Sigma^{-1}(l-\mu)}$$
$l \in \mathbb{R}^{3}$: 특정 3D 공간 좌표
$\mu \in \mathbb{R}^{3}$: 가우시안의 중심점
초기화는 LiDAR의 점을 $\mu$로 한다.
이후 학습을 진행해 $bin_1$ 구역의 장면을 어느정도 만들어 놓는다.
그 이후 다음 $bin$으로 넘어가게 된다.
인접한 $bin$ 간의 공간 병합
다음 $bin$으로 넘어갈 때, 이전 $bin$에서 학습된 가우시안들을 위치를 사전 정보로 재사용하여 겹치는 영역을 기준으로 좌표를 합친다.
$$\hat{P}_{b+1}(G_{s})=P_{b}(G_{s})\bigcup(x_{b+1},y_{b+1},z_{b+1})$$
$G_{s}$: 배경을 구성하는 3D 가우시안 모델 집합.
$\hat{P}_{b+1}$: 확장된 $b+1$ 단계에서의 전체 가우시안 3D 중심점들의 집합.( $N \times 3$)
$(x_{b+1},y_{b+1},z_{b+1})$: 새롭게 추가되는 $b+1$ 구역의 가우시안 좌표들.
기존 좌표 집합과 합집합($\bigcup$) 연산을 통해 점진적으로 맵을 넓힌다.
알파 블렌딩
추가된 Bin들을 모두 통합하여 최종적으로 카메라 시점에서 바라본 픽셀의 색상을 결정하는 공식이다.
역시나 많이 본 식이다.
$$\hat{\mathcal{I}}(G_{s})=\sum_{b=1}^{N}\Gamma_{b}\alpha_{b}C_{b},\quad\Gamma_{b}=\prod_{i=1}^{b-1}(1-\alpha_{b})$$
$\alpha_{b} \in [0, 1]$: 해당 가우시안의 불투명도(Opacity)
$C_{b} \in \mathbb{R}^{3}$:구면 조화 함수를 통해 계산된 RGB 값.
멀티 뷰 보정
같은 곳을 전면 카메라가 찍었을 때와 후면 카메라가 찍었을 때 뭔가 차이가 있을 수도 있다.
그래서 가중 평균을 사용해 색을 최대한 보정한다.
$$\tilde{C}=\zeta(G_{s})\sum\omega(\hat{C}(G_{s})|R,T)$$
$\tilde{C}$: 최종적으로 최적화된 픽셀 색상(RGB)
$\zeta$: 레스터라이저를 함수로 표현했다고 생각하면 된다.
특정 시점에서 바라본 각 픽셀이 가져야할 RGB값을 구한다.
$\omega$: 학습 가능한 가중치 계수.
$[R, T]$: 멀티 카메라 뷰를 정렬하기 위한 카메라 외부 파라미터(View-matrix)입니다.
식이 조금 이해가 가지않을 수 있어 추가설명을 하면, 다음과 같은 상황을 생각해볼 수 있다.
전면, 측면 등 여러 카메라가 찍은 물체를 후방카메라가 봤을 때 어떤 색이어야 어색하지 않을까?
이를 계산한게 $\tilde{C}$이 된다.
그리고 배경에 있는 가우시안들을 후방카메라 시점으로 변환하는데 사용되는 것이 $R,T$가 된다.
즉 world to 후방카메라 시점의 변환이다.
Composite Dynamic Gaussian Graph
빠르게 움직이는 차량이나 보행자는 개별적으로 관리하는 방법이다.
전체 동적 객체들을 관리하는 그래프 $H$를 고안했다.
$$H =<O, G_d, M, P, A,T >$$
$O$: 씬 내에 존재하는 모든 동적 객체의 집합. (예: $o \in O$, 객체 ID)
$G_d$: 각 객체 $o$를 표현하는 동적 가우시안(Dynamic Gaussians)들의 집합.
$M$: 각 객체의 변환 행렬(Transform matrix) 집합. 객체가 프레임마다 어떻게 움직이는지 정의. (형태: $4 \times 4$ 행렬)
$P$: 바운딩 박스의 중심 좌표 $p_{o}(x_{t},y_{t},z_{t})$ 집합. (형태: $3 \times 1$ 벡터)
$A$: 객체의 방향(Orientation) 각도 $a_{o}=(\theta_{t},\phi_{t})$ 집합.
$T$: 객체가 씬에 존재하는 타임스탬프(시간)의 집합.
월드 좌표계로 변환
동적 객체들은 자신만의 로컬 좌표계(Local coordinate)를 기준으로 가우시안이 형성되어 있다.
이를 배경이 존재하는 월드 좌표계(World coordinate)로 맵핑하는 식이다.
$$m_{o}^{-1}=R_{o}^{-1}S_{o}^{-1}$$
$m_{o}^{-1} \in \mathbb{R}^{4\times4}$: 객체→월드 좌표계로 변환하는 행렬의 역행렬.
$R_{o}^{-1}$: 객체의 Rotation을 월드 기준으로 맞추는 행렬의 역행렬.
$S_{o}^{-1}$: 객체의 Translation을 월드 기준으로 맞추는 행렬의 역행렬.
왜 역행렬을 쓸까?
물체를 구성하는 가우시안이 많을 텐데, 이 각각은 모두 로컬 좌표계일 것이다.
픽셀의 색을 정할 때 이를 모두 월드로 바꿔 계산하는 것보다 월드좌표계 기준의 광선만 로컬로 옮겨 계산하는게 더 효율적이기 때문이다.
깊이 기반 불투명도(Opacity) 동적 조정
객체와 객체, 혹은 객체와 배경이 겹칠 때 발생하는 가림 현상(Occlusion)을 물리적으로 자연스럽게 렌더링하기 위한 보정 식이다.
물체의 최종 $\alpha_{o,t}$ (조정된 불투명도)는 아래처럼 계산된다.

$p_{t}=(x_{t},y_{t},z_{t})$: 시간 $t$에서의 해당 객체 가우시안 중심 좌표.
$R, S$ : 물체→월드 변환 행렬
$\rho$ : 카메라의 좌표
$[R_{o},S_{o}]$: 객체에서 월드로의 변환 행렬.
$\alpha_{p_{0}}$: 가우시안이 원래 가지고 있던 기본 불투명도 값.
분모를 보면 월드 좌표계로 옮긴 가우시안과 카메라의 거리를 구한다.
이 값이 작으면 가까운 것이고 더 불투명하게 보여야하므로 $\alpha$는 커져야한다.
그래서 이 값이 분모로 간 것이다.
분자는 객체의 중심에서 해당 가우시안까지의 상대 거리와 각도를 곱한 값이다.
객체가 비스듬할 때 너무 강하게 가우시안이 누적되는 것을 방지한다.
각 가우시안들에 대해 보정된 불투명도를 모두 더해 나온 값이 물체 전체의 투명도를 정의한다.
예를들어 위 시그마 식의 결과가 1이라면 이 물체는 벽돌처럼 하나도 투과되지않는 물체인 것이다.
3DGS를 봤다면 여기서 의문이 든다.
이런 연산을 하지 않아도 알파블렌딩을 통해 투명도가 고려된 렌더링이 될텐데 이걸 왜 또 할까?
알파 블렌딩은 투명도가 누적되어도 온전한 1이 될 수 없는데, 이 식을 쓰면 1이 넘을 수 있다.
투명도가 1이 넘는 것도 말이 안되는데 이럴 경우 상한선을 1까지로 두어 완벽히 뒷 물체를 차단하여 물체가 겹치는 현상을 없앨 수 있다.
또 운좋게 첫 가우시안부터 투명도가 1이 되어버렸다면 그 뒤의 연산은 아예하지 않을 수도 있다.
최종 렌더링 통합
학습된 정적 배경과 동적 그래프를 최종적으로 하나로 합친다.

$G_{comp}$: 정적 배경과 모든 동적 객체가 결합된 최종 "Composite Gaussian Field"이다.
렌더러는 이 거대한 텐서를 입력으로 받아 최종 2D 이미지를 뽑아내게 된다.
가우시안은 정적 이미지를 표현하는 방법이므로 $G_{comp}$하나로는 당연히 물체들의 이동을 나타낼 수 없다.
그래서 프레임 마다 동적 물체의 속성 값이 바뀌어야한다.
위에서 M행렬을 얘기했었는데, 매 프레임 마다 이 값은 바뀌게 된다.
이 변환행렬을 물체에 적용시키는 것이다.
물체를 회전시키고 이동시킨 후에는 위의 불투명도 식을 사용해 투명도를 조절한다.
LiDAR Prior with surrounding views
위에서 설명한 초기 점을 세팅하는 방법에 대한 부분이다.
원래 SfM방식을 쓰는 COLMAP을 통해 초기화하지만,
자율주행의 경우 한 물체를 오래 여러 뷰에서 찍을 수 없고 더 정확한 데이터인 LiDAR가 있기 때문에 이를 사용해 가우시안의 초기위치를 세팅한다.
이 때 LiDAR를 통해서는 정확한 위치를, 카메라를 통해서는 색을 초기화한다.
먼저 식을 하나 보자.
$$x_p^q = K[R_t^i \cdot l_s + T_t^i]$$
$l_s$ : $3 \times 1$ 벡터, (3D)월드 좌표계에 있는 하나의 LiDAR 포인트. (x, y, z)
$R_t^i, T_t^i$ : $3 \times 3$ 행렬, $3 \times 1$ 벡터, $t$ 시점, $i$번째 카메라의 파라미터.
월드 좌표계($l_s$)를 카메라 렌즈 기준의 3D 좌표로 회전($R$)시키고 이동($T$).
$K$ : $3 \times 3$ 행렬, 카메라 고유 파라미터. (초점 거리, 광학 중심 등).
카메라 3D 좌표를 2D 픽셀로 눌러버리는 역할.
$x_p^q$ : $2 \times 1$ 벡터, 최종적으로 $I_t^i$ 이미지 평면 상에 맺히는 2D 픽셀 좌표 (u, v)
이 식은 LiDAR점을 특정 카메라의 픽셀 좌표로 변환한다.
각각의 LiDAR점에 대해 위 식을 거쳐 2D이미지 좌표로 바꾸고 해당 픽셀의 RGB값을 그대로 가져와 초기화를 한다.
만약 여러 포인트가 한 픽셀로 변환된다면 카메라와 가장 가까운 포인트에 대해 적용한다.
만약 한 포인트가 여러 카메라에 나온다면 역시 포인트와 가장 가까운 카메라 2D이미지의 RGB값을 사용한다.
Global Rendering via Gaussian Splatting
$$\Sigma' = J E \Sigma E^\top J^\top$$
이 식은 월드 좌표계의 가우시안들을 현재 카메라 좌표계 기준으로 바꾼다.
또 당연히 시간의 흐름에 따라 데이터가 존재하기 때문에 이를 렌더링할 때도 미래의 객체가 현재에 보이면 안된다.
따라서 나머지는 투명하게 처리하는 방식으로 이를 구현한다.
손실함수는 아래와 같다.
$$L_{TSSIM}(\delta) = 1 - \frac{1}{Z} \sum_{z=1}^{Z} SSIM(\Psi(\hat{C}), \Psi(C))$$
Z개의 작은 타일로 나눠 SSIM을 사용해 계산한다.
또 잔상처럼 물체 주변에 이상한 가우시안들이 있을 수 있는데 이를 처리하기 위해 아래와 같은 손실도 도입했다.
$$L_{Robust}(\delta) = \kappa(\|\hat{I} - I\|_2)$$
두 이미지 사이의 단순 픽셀 차이를 계산하고 이를 $\kappa(\cdot)$함수에 넣는다.
이는 픽셀차이가 클수록 패널티는 기하급수적으로 많이 주는 함수이다.
마지막으로 가우시안들이 학습하다가 원래의 LiDAR 점에서 너무 멀어질 수 있기 때문에 주변에 있게끔 강제하기 위해
아래처럼 가우시안의 중심좌표와 실제 LiDAR의 좌표 사이의 차이를 손실로 잡는다.
$$L_{LiDAR}(\delta) = \frac{1}{s} \|P(G_{comp}) - L_s\|_2$$
이 세 개의 손실의 합을 최종적으로 최소화하게 된다.
결과
여러 모델 사이에서 비교를 해본 결과 제일 높은 성능을 기록했다.


아래는 넘어지는 사람을 시뮬레이션한 모습이다.
사람의 움직임 자체는 조금 어색하지만 렌더링 측면에서는 깔끔하게 되는 것을 볼 수 있다.

'AI > 컴퓨터비전(CV)' 카테고리의 다른 글
| Street-gaussian 학습환경 세팅 & 학습시켜보기 (0) | 2026.04.09 |
|---|---|
| [CV 논문] Street Gaussians: Modeling Dynamic Urban Scenes with Gaussian Splatting (2) | 2026.04.08 |
| [CV 논문] Segment Any 3D Gaussians (0) | 2026.04.02 |
| 3DGS 학습시켜보기 (3) | 2026.03.18 |
| [CV 논문] Mip-NeRF: A Multiscale Representation for Anti-Aliasing Neural Radiance Fields (0) | 2026.03.17 |