GaussianFormer 2: 카메라만으로 구현하는 3D Semantic Occupancy — Probabilistic Gaussian의 재해석 (CVPR 2025)
한 줄 요약
GaussianFormer 2는 카메라만으로 3D 공간을 Semantic Occupancy 형태로 이해하는 모델입니다. 각 물체를 3D Gaussian으로 표현하고, Geometry(존재 여부)와 Semantics(무엇인지)를 분리해 추론합니다. Opacity를 prior로 쓰고, 무작위 seed 대신 Distribution‑based Initialization을 도입해 mIoU SOTA(nuScenes)와 단일 카메라 KITTI‑360에서도 강력한 성능을 보입니다. 필요한 Gaussians의 수는 더 적고, 속도·메모리 효율도 좋습니다.

왜 중요한가: 카메라 중심 자율주행의 현실 과제
자율주행에서 대표 센서는 Camera와 LiDAR입니다. Camera는 저렴하고 정보량이 풍부하지만, 진짜 3D 기하와 미지 장애물을 안정적으로 잡아내는 데 한계가 있죠. 그래서 요즘은 3D Semantic Occupancy가 핵심 과제로 떠올랐습니다. 다중 카메라 이미지를 입력받아, 3D voxel마다 free/occupied와 semantic label(차, 보행자, 나무, 도로 등)을 예측합니다.
Tesla 데모를 보셨다면 감이 오실 겁니다. 이미지는 들어가고, 빈 공간까지 포함한 3D 격자 지도가 나옵니다. 카메라만으로 이걸 잘 하려면, 표현력이 크면서도 낭비가 적은 표현이 필요합니다.
그리드 중심에서 오브젝트 중심으로: 장단점 정리
Grid‑centric 대표 주자:
- Voxel: 단순하지만 빈 공간도 계산 비용을 치릅니다.
- BEV: 높이 정보를 압축해 계획에는 유리하지만, 완전한 3D occupancy에는 불리합니다.
- TPV(tri‑plane): 세 개의 정규 평면으로 3D를 묶지만, 결국 grid‑anchored 특성은 남습니다.
Object‑centric 접근은 관심 대상을 중심에 놓습니다. 여기서 3D Gaussian은 매우 유용합니다. 풍선처럼 가운데가 진하고 바깥으로 갈수록 희미해지는 확률 분포로 물체의 부피를 표현하죠. 물체가 있는 곳에만 Gaussian을 두면, 거대한 빈 공간 연산을 피할 수 있습니다. 이것이 GaussianFormer 계열의 핵심 아이디어입니다.
관련 연구 훑어보기
- BEVFormer 류: 일부 벤치마크에서 LiDAR 못지않은 성능. 다만 height 압축이 있어 완전한 3D occupancy에는 제약.
- TPVFormer 류: 3D 감각은 보강하지만 여전히 grid‑bound.
- Voxel 기반: 직접적이지만 empty space 때문에 compute 낭비가 큼.
- Sparse 전략: 비어 있을 법한 영역을 미리 거르지만, 한 번 false empty로 떨어지면 영구 손실 위험.
- Point‑query 방식: 점 단위로 occupied를 묻지만, 볼륨 정보가 약함.
결론적으로 object‑centric, sparse, volume‑aware, camera‑friendly한 표현이 이상적입니다. 그래서 probabilistic Gaussians가 매력적입니다.
GaussianFormer(v1) 요점: 무엇을 어떻게 학습했나
각 Gaussian은 다음 properties를 가집니다:
- Mean m: 3D 중심
- Scale s: 주축별 크기
- Rotation r
- Class logits c
- Opacity o: v2에서 추가된 prior(해당 Gaussian의 존재 가능성)
이들을 묶은 property vector의 차원은 11 + C(클래스 수 C). 또한 Gaussian마다 하나의 query feature를 둡니다. properties가 어디/무엇을 담는다면, query는 appearance/geometry feature를 담습니다.
Self‑encoding with 3D Sparse Convolution
Gaussian들은 공간에 듬성듬성 퍼져 있습니다. 인접 Gaussian끼리만 대화하게 하려고, mean을 voxelize한 뒤 3D sparse convolution으로 occupied 근방만 message passing을 하게 합니다. self‑attention의 3D sparse 변주라고 보면 됩니다.
Deformable Cross‑Attention으로 이미지와 연결
Gaussian은 점이 아니라 모양이 있습니다. 각 Gaussian 주변을 covariance에 맞춰 reference points로 샘플링하고, 각 카메라 intrinsics/extrinsics로 이미지 평면에 projection합니다. 그리고 이미지 backbone의 feature map에서 deformable attention으로 필요한 위치만 골라 특징을 모읍니다. 모든 픽셀에 다 주목하지 않고, 소수의 핵심 지점에 집중하는 셈이죠.
Refinement block
융합된 feature로 MLP가 s, r, c, o를 업데이트합니다. m은 진행 방향으로만 조금씩 이동시켜 불안정을 막습니다. self‑encoding → image cross‑attention → property update 블록을 여러 번 쌓아 올리며 Gaussian들을 물체 쪽으로 점진적 정렬합니다.
Voxel로 되돌리기
Planner는 voxel‑wise occupancy/semantics를 원합니다. 최종 Gaussian들을 voxel grid로 변환하되, 각 voxel과 실제 겹치는 일부 Gaussian만 고려해 class‑wise occupancy probability를 계산합니다.
v1의 약점 두 가지
- 중복 중첩: 같은 공간을 여러 Gaussian이 덮고, 심지어 빈 공간을 설명하려 드는 경우도 발생.
- Random Initialization: seed를 무작위로 두니, 3D sparse conv와 deformable attention의 local receptive field 특성상 멀리 이동하기 어려워 학습 비효율이 생김.
GaussianFormer 2의 핵심 변화
1) Geometry와 Semantics를 분리
- Geometric prediction: 점 x가 occupied인가? 를 alpha(x)로 예측.
- Semantic prediction: occupied라면 무슨 클래스인가? 를 예측. 여기서는 empty 클래스를 제거합니다. 빈 공간 여부는 이미 geometry가 책임지니까요.
Probabilistic Exclusion으로 중첩 억제
단일 Gaussian은 중심에서 높고 멀어질수록 떨어지는 exponential 형태(내부 거리는 Mahalanobis distance로 이해 가능)를 가집니다. 여러 Gaussian이 있을 때는 독립 가정을 두고, 점 x가 모든 Gaussian에 속하지 않을 확률을 곱해 구한 뒤 1에서 빼 occupancy를 얻습니다. 이렇게 하면 Gaussian이 여럿 겹쳐도 값이 무작정 커지지 않고, 하나라도 제대로 설명하면 1에 수렴하는 정도로 안정화됩니다. 즉 중복 superposition을 억제합니다.
Semantic을 Gaussian Mixture로 보고 Opacity를 prior로
장면을 Gaussian mixture로 해석합니다. 각 Gaussian의 opacity(o)는 존재에 대한 prior 역할을 하고, Bayes 규칙으로 점 x에 대한 각 Gaussian의 posterior responsibility를 계산합니다. 이 책임값으로 class logits의 기여를 가중합(기대값)하면 정규화된 class probability가 나옵니다. 서로 다른 Gaussian이 같은 공간을 과다 집계하지 못하게 막아주죠.
최종 per‑class 확률은 간단합니다.
- Empty: 1 - alpha(x)
- Class k: alpha(x) * p(class = k | x)
2) Distribution‑based Initialization (LiDAR 불필요)
무작위 seed를 버리고, 이미지로부터 ray‑wise occupancy distribution을 예측해 그럴듯한 위치에 Gaussian을 놓습니다.
- 각 카메라의 픽셀에서 ray를 쏘고 일정 간격의 reference points를 샘플링.
- ground‑truth occupancy로 각 점을 occupied/free로 라벨링해, 이미지 backbone에 붙인 작은 head를 BCE loss로 학습.
- 여러 뷰를 fuse해 3D에서 occupied 가능 영역을 추려냄.
- 그 내부에 Gaussian을 초기 배치. 시작부터 진실 근처에서 refinement가 진행되어 빠르고 안정적입니다.
깊이를 LiDAR supervision으로 배우는 기존 접근과 달리, 본 방식은 이미지 정보만으로 volumetric occupancy 분포를 배웁니다. 추가 센서 없이도 표면 깊이를 넘어 부피를 다룹니다.
데이터셋, 설정, 지표
- nuScenes: 표준 6‑camera 구성으로 학습.
- KITTI‑360: 왼쪽 monocular camera 단일 뷰만 사용해 난도를 높여 평가.
지표는 IoU, mIoU를 사용하며, mIoU에서는 empty 클래스 제외.
결과: 정확도·효율·어블레이션
메인 성능
- nuScenes에서 192‑channel 모델이 mIoU ≈ 21로 SOTA를 달성. 기존 GaussianFormer를 상회하면서 효율도 확보.
- 12,800 Gaussians만으로도 과거 144,000 수준과 견주거나 넘습니다. 많음=좋음이 아님을 증명.
- KITTI‑360 단일 카메라 환경에서도 기존 대비 약 7.6 mIoU 개선.
Latency vs. Memory: Distribution‑based Initialization 때문에 약간의 지연은 있지만, 메모리 절감과 정확도 향상이 이를 상쇄합니다.
구성 요소별 영향
- Probabilistic modeling만 도입해도 중복 억제로 mIoU가 크게 상승.
- 여기에 Distribution‑based Initialization을 더하면 추가 이득.
- Point‑cloud supervision을 쓰면 더 오르기도 하나, 추가 센서가 필요. 본 방법은 실용성이 뛰어납니다.
배치 품질과 중복도
- 초기 position accuracy(PERC)가 약 28.85%로 나타나고, refinement가 진행되며 계속 향상.
- 각 Gaussian에서 가장 가까운 occupied voxel까지의 평균 거리가 1 voxel 미만으로 줄어듭니다.
- Duplication이 크게 감소해, 같은 공간을 여러 개가 덮는 현상이 완화됩니다.
시각적 결과
- 과거 대비 약 8.8% 수준의 Gaussian 수만 써도 장면이 깔끔합니다. 보행자 영역(빨간색)은 과장된 구체 대신 작고 또렷해집니다.
- 학습 과정에서는 seed들이 occupied 영역으로 서서히 이동하는 궤적이 보입니다.
구현 흐름(감 잡기)
- 다중 스케일 image features 추출
- Distribution‑based Initialization으로 Gaussian 초기 배치
- 3D sparse conv로 self‑encoding
- Deformable cross‑attention으로 이미지와 결합
- MLP로 s, r, c, o 업데이트, m은 점진 이동
- 위 refinement block 반복
- 최종 Gaussian을 voxel occupancy grid로 변환해 per‑class probability 출력
해보니 든 생각(Discussion)
- Overlap regularizer: Probabilistic exclusion이 이미 효과적이지만, anti‑overlap term을 명시적으로 추가하면 더 깔끔할 듯합니다.
- Lighter initializer: Distribution head가 latency를 늘립니다. distillation이나 경량화로 속도를 올릴 여지가 있습니다.
- Diffusion‑style refinement: Gaussian 업데이트를 denoising처럼 다루면 더 빠른 수렴을 기대할 수 있습니다.
- Hierarchical Gaussians: 먼저 큰 Gaussian으로 윤곽을 잡고, 이후 작은 Gaussian으로 디테일을 보강하는 계층화 전략.
자주 묻는 질문(FAQ)
Q1. 3D Semantic Occupancy가 정확히 뭔가요?
3D 공간을 voxel grid로 나누고, 각 칸마다 free/occupied와 semantic label을 예측합니다. 주행 계획과 안전성에 직결됩니다.
Q2. 왜 Voxel 대신 Gaussian인가요?
Gaussian은 object‑centric하고 sparse합니다. empty space에는 연산을 거의 쓰지 않아 효율과 정확도 모두에 이점이 있습니다.
Q3. 여러 Gaussian이 같은 공간을 과하게 주장하지 않게 하려면?
Geometry는 probabilistic exclusion, Semantics는 mixture responsibilities로 정규화합니다. 중복 집계가 억제됩니다.
Q4. LiDAR가 꼭 필요합니까?
아니요. 본 Distribution‑based Initialization은 images only로 학습됩니다. LiDAR는 도움이 될 수 있지만 필수는 아닙니다.
Q5. BEV/TPV는 이제 구식인가요?
그렇지 않습니다. 여전히 강력합니다. 다만 camera‑only full 3D occupancy에서는 object‑centric probabilistic Gaussians가 volume‑aware하고 낭비가 적은 선택입니다.
Q6. 실시간이 가능한가요?
Initializer 때문에 약간의 지연이 있으나, 메모리 효율과 정확도가 높습니다. 엔지니어링을 더하면 실시간도 충분히 노려볼 만합니다.
맺음말
GaussianFormer 2는 카메라만으로 3D 세계를 읽는 방식을 probabilistic Gaussian occupancy로 다시 짭니다. Geometry/semantics 분리, opacity prior, image‑driven initialization이 맞물리며, nuScenes SOTA와 KITTI‑360 단일 카메라 강세를 동시에 달성했습니다.
덜 많이, 더 똑똑하게. 빈 공간 연산을 피하고, 필요한 곳에만 무게를 실어 안정적이고 확장 가능한 자율주행 인지를 향해 한 발 더 나아갑니다.