Introduction
-
계층적 구조의 중요성:
- 현실 세계의 시맨틱 정보는 본질적으로 계층적인 구조를 가진다. 예를 들어, '자동차'라는 클래스는 '차량'이라는 더 큰 범주 아래에 있고, '차량'은 다시 '운송 수단' 아래에 속하는 식이다.
- 기존의 평면적인 시맨틱 표현 방식은 이러한 계층적 특성을 반영하지 못하여 정보의 압축률이 낮고, 복잡한 장면을 이해하는 데 한계가 있었다.
-
계층적 범주형 표현:
- Hier-SLAM은 이러한 계층적 특성을 활용하여 시맨틱 정보를 트리 구조로 인코딩한다.
- 트리의 각 노드는 특정 레벨의 시맨틱 클래스를 나타내며, 엣지는 상위 클래스와 하위 클래스 간의 포함 관계나 속성 관계를 나타낸다.
- 이러한 트리 구조를 통해, 예를 들어 10 레벨 깊이의 이진 트리라면 210 즉, 1024개의 클래스까지 표현할 수 있으며, 각 노드 당 2차원 소프트맥스 코딩을 사용하면 단 20개의 코드로 이 모든 클래스를 표현할 수 있게 된다. 이는 메모리 사용량을 크게 줄이는 효과를 가져온다.
-
LLM의 활용:
- 논문에서는 GPT-4o-mini를 사용하여 이 계층적 트리 구조를 생성한다.
- LLM은 주어진 시맨틱 클래스 레이블들을 반복적으로 클러스터링하여 상위 레벨의 클래스를 생성하는 역할을 수행한다.
- 이 과정에서 LLM이 일부 클래스를 누락하거나 예상치 못한 클래스를 포함하는 문제를 해결하기 위해 'Loop-based Critic Operation'이라는 메커니즘을 도입했다. 이 메커니즘은 LLM의 출력을 검증하고, 누락되거나 잘못된 클래스에 대해 LLM에게 다시 프롬프트를 보내 재클러스터링을 유도하는 방식으로 동작한다.
-
계층적 손실 함수:
- Hier-SLAM은 제안된 계층적 시맨틱 표현을 최적화하기 위해 새로운 시맨틱 손실 함수를 제안했다.
- 이 손실 함수는 LSemantic=ω1LInter+ω2LCross로 구성된다.
- LInter (Inter-level Loss)는 각 트리 레벨 내에서 시맨틱 정보를 최적화한다.
- LCross (Cross-level Loss)는 전체 계층적 코딩을 기반으로 하여, 계층적 임베딩을 플랫 코딩으로 변환한 후 이를 기반으로 시맨틱 정보를 최적화한다.
- 이러한 계층적 손실 함수는 장면을 거친 수준에서 세밀한 수준으로 이해하는 데 도움을 준다.
-
실험 결과:
- 이러한 계층적 표현과 손실 함수를 통해 Hier-SLAM은 기존의 평면적 시맨틱 표현 방식에 비해 저장 공간과 훈련 시간을 크게 줄이면서도 경쟁력 있는 시맨틱 렌더링 성능을 달성했다.
- 특히, 500개 이상의 시맨틱 클래스를 가진 복잡한 실제 환경에서도 뛰어난 성능을 보여주며, 기존 방법으로는 다루기 어려웠던 스케일업 능력을 입증했다.
Method
A. Hirarchical representation
1. 트리 표현
이 논문에서 제안하는 계층적 트리 표현 방식은 다음과 같다.
-
전체 구조: 이 시스템은 세상을 인식하고 지도를 만드는 과정에서 '시맨틱 정보'(사물의 의미, 종류 등)를 좀 더 똑똑하고 효율적으로 저장하고 활용하기 위해 '계층적 트리'라는 구조를 사용한다. 마치 사람의 사고방식이 '동물'이라는 큰 범주에서 '포유류', '조류' 등으로 나뉘고, 다시 '개', '고양이' 등으로 구체화되는 것처럼, 사물들의 관계를 나무의 가지처럼 표현하는 것이다.
-
노드와 엣지:
- 노드 (V): 트리에서 각 '가지 끝'이나 '갈라지는 지점'을 노드라고 한다. 이 노드들은 사물들의 종류나 특징을 나타낸다. 예를 들어, '물건'이라는 노드, '가구'라는 노드, '의자'라는 노드 등이 있을 수 있다. 논문에서는 이러한 노드들을 레벨별로 구분해서 이야기한다. l=0은 가장 최상위 레벨, l=L은 가장 구체적인 레벨이다.
- 엣지 (E): 노드와 노드를 연결하는 선을 엣지라고 한다. 이 엣지는 '어떤 노드가 어떤 노드를 포함한다' 또는 '어떤 노드가 어떤 노드의 속성을 가진다'와 같은 관계를 나타낸다. 예를 들어, '가구' 노드에서 '의자' 노드로 이어지는 엣지는 '의자는 가구의 한 종류'라는 관계를 보여준다. 논문에서는 이 엣지를 em으로 표현하고, m은 엣지가 속한 레벨을 나타낸다.
-
시맨틱 클래스의 표현:
-
우리가 알고 싶은 특정 사물(예: '벽')은 트리의 가장 구체적인 정보, 즉 '리프 노드'로 생각할 수 있다.
-
이 '벽'이라는 정보 하나를 계층적으로 표현하면, 다음과 같은 방식으로 나타낼 수 있다:
gi={vli,emi∣l=0,1,...,L;m=0,1,...,L−1}
-
이것을 풀어서 설명하면, '벽'이라는 i번째 클래스 gi는 여러 레벨에 걸쳐 있는 노드들(vli)과 그 노드들을 연결하는 엣지들(emi)의 조합으로 표현된다는 뜻이다.
-
예를 들어, '벽'을 이해하는 과정을 단계별로 보면:

- v0wall: 가장 큰 범주인 '배경(Background)'
- → v1wall: 좀 더 구체적인 '구조물(Structure)'
- → v2wall: 평평한 형태인 '평면(Plane)'
- → v3wall: 최종적으로 '벽(Wall)'
-
이렇게 루트에서 리프까지 이어지는 경로를 통해 '벽'이라는 개념을 더 풍부하게 이해할 수 있다.
-
계층 구조의 이점:
- 압축: 단순히 '벽'이라고 저장하는 것보다, '배경' → '구조물' → '평면' → '벽'과 같이 계층적으로 저장하면, 유사한 특징을 가진 사물들을 묶어서 표현할 수 있어 메모리 사용량을 크게 줄일 수 있다.
- 이해의 깊이: 이 계층 구조는 마치 사람이 세상을 이해하는 방식과 유사하다. 처음에는 '이게 대략적으로 어떤 것'이라는 큰 그림을 파악하고, 점차 세부적인 특징으로 들어가면서 더 정확하게 이해하게 된다. 이를 '코스-투-파인(Coarse-to-fine) 이해'라고 한다. 이는 카메라가 멀리서 장면을 볼 때와 가까이서 볼 때의 이해 방식과도 일맥상통한다.
- LLM 활용: 이러한 계층 구조를 만드는 데 '대규모 언어 모델(LLM)'이 도움을 준다. LLM은 많은 양의 텍스트 데이터를 학습했기 때문에, 사물들의 의미와 관계를 잘 파악하여 자연스러운 계층 구조를 만드는 데 유용하다.
2. LLM 기반 계층 트리 생성
Hier-SLAM은 복잡한 환경에서 수백 개의 시맨틱 클래스를 효율적으로 관리하기 위해 Large Language Models(LLMs)을 활용하여 시맨틱 계층 구조를 자동으로 생성한다. 이 과정의 핵심인 Loop-based Critic Operation에 대해 상세히 설명하겠다.
-
LLM을 이용한 클러스터링
- Replica나 ScanNet 같은 데이터셋이 제공하는 시맨틱 레이블 리스트를 LLM이 그룹화한다.
- LLM은 GPT-4o-mini를 사용하며, 리프 노드(가장 세부적인 클래스)부터 루트 노드(가장 포괄적인 개념) 방향으로 클래스들을 그룹화한다.
- 예를 들어, Wall, Floor와 같은 세부 클래스를 Plane이라는 상위 개념으로 묶고, 이를 다시 Structure라는 더 큰 범주로 통합하는 방식이다.
-
LLM의 한계와 검증의 필요성
- 클래스 숫자가 너무 많아지면 LLM이 일부 클래스를 누락하거나, 입력에 없던 새로운 클래스를 임의로 생성하는 오류가 발생할 수 있다.
- 이를 해결하기 위해 LLM의 출력 결과를 검증하는 Validator(검증기)를 도입하여 루프(Loop) 구조의 비판적 작업을 수행한다.
- 예를 들어, LLM이 실수로 전체 단어 100개 중 95개만 그룹화하고 5개를 빼먹었는지(Omitted), 혹은 목록에도 없는 단어를 새로 지어냈는지(Unseen)를 입력 단어 목록과 출력 결과만 대조하여 알려주는 것이 Validator의 업무이다.
-
Loop-based Critic Operation의 단계
- LLM이 l 레벨의 클래스 {vl}을 입력받아 상위 레벨인 l−1로 클러스터링한 결과(vl′→vl−1′)를 내놓으면, Validator는 이를 세 가지 요소로 분류한다.
- 성공 노드 (vl,success′): 올바르게 그룹화된 노드들이며 그대로 유지된다.
- 미확인 노드 (vl,unseen′): 원래 입력에 없었으나 LLM이 임의로 추가한 노드들로, 시스템에서 제거된다.
- 누락 노드 (vl,omitted′): LLM이 그룹화 과정에서 빠뜨린 노드들이다.
-
반복 수정 과정
- Validator에 의해 분류된 누락 노드(vl,omitted′)들은 다음 반복 회차에서 다시 LLM의 입력 프롬프트로 들어간다.
- 이때 이전 회차에서 생성된 상위 클러스터 정보(vl−1′)도 함께 참조용으로 제공되어, 누락된 노드들이 기존 그룹에 합류하거나 새로운 그룹을 형성하도록 유도한다.
- 이 루프는 누락된 노드가 하나도 남지 않을 때(vl,omitted′=∅)까지 계속된다.
-
계층 구조의 완성
- 이 과정은 상위 레벨의 클러스터 개수가 설정된 임계값인 θ=4 미만이 될 때까지 반복된다.
- 이 작업은 SLAM이 실제로 구동되기 전 오프라인(Offline) 상태에서 미리 수행되어 실행 시간의 효율성을 높인다.
-
기술적 의의
- 이러한 계층적 방식은 수백 개의 클래스를 평면적으로 나열(Flat representation)할 때보다 파라미터 수를 획기적으로 줄여준다.
- SemGauss-SLAM과 같은 기존의 플랫한 방식과 비교했을 때, 계층적 코딩은 메모리 사용량을 크게 절감하면서도 풍부한 시맨틱 정보를 유지할 수 있게 한다.
-
트리 생성 예시
제시된 '벽(Wall)'의 예시를 통해 Hier-SLAM이 어떻게 리프(Leaf) 노드에서 루트(Root) 노드 방향으로 계층 구조를 생성하는지, 그리고 그 과정에서 Loop-based Critic Operation이 어떻게 작동하는지 단계별로 설명하겠다.
-
1단계: v3 (리프 레벨)에서 v2 (상위 레벨)로의 클러스터링
- 입력: 데이터셋에 포함된 모든 세부 클래스 리스트 {v3} (예: Wall, Floor, Ceiling, Door, Window 등)가 LLM에게 제공된다.
- LLM의 작업: "이 클래스들을 기하학적 혹은 시맨틱 유사성에 따라 그룹화해줘."라는 요청을 받는다.
- 결과 생성: LLM은 Wall, Floor, Ceiling을 묶어 'Plane(평면)'이라는 v2 레벨의 그룹을 만든다.
-
2단계: Loop-based Critic Operation (검증 및 수정)
- 이때 LLM이 실수로 Wall은 'Plane'에 넣었지만, Floor를 누락하거나 입력에 없던 Brick이라는 단어를 새로 만들었다고 가정하자.
- Validator의 분류:
- 성공 (v3,success′): Wall → Plane (성공적으로 유지).
- 미확인 (v3,unseen′): Brick (입력에 없으므로 제거).
- 누락 (v3,omitted′): Floor (다시 처리해야 함).
- 재시도 루프: Validator는 누락된 Floor를 다시 LLM에게 주며, "기존에 만든 Plane 그룹에 넣거나 새 그룹을 만들어줘."라고 요청한다. 이 과정을 통해 모든 클래스가 빠짐없이 계층 구조에 포함될 때까지 반복한다.
-
3단계: v2 (Plane)에서 v1 (Structure)로의 클러스터링
- 이제 v2 레벨의 노드들(Plane, Cube, Soft 등)을 다시 상위 범주로 묶는다.
- LLM은 Plane(벽, 바닥 등을 포함함)이 건물 내부의 뼈대 역할을 한다는 점을 고려하여, 이를 'Structure(구조물)'라는 v1 레벨의 더 큰 범주로 통합한다.
-
4단계: v1 (Structure)에서 v0 (루트 레벨)로의 클러스터링
- 마지막으로 Structure, Furniture, Decor와 같은 범주들을 최종적으로 분류한다.
- LLM은 고정된 환경 요소인 Structure를 'Background(배경)'라는 v0 레벨로 묶는다. 이 단계는 최종 그룹의 개수가 설정값(θ=4) 미만이 될 때까지 진행된다.
3. 계층적 시맨틱 인코딩
Hier-SLAM에서 제안하는 Tree Encoding은 수많은 시맨틱 클래스를 효율적으로 관리하기 위해 정보를 트리 구조로 압축하여 저장하는 방식이다. 이 과정에 대해 상세히 설명하겠다.
계층적 임베딩의 구성
각각의 3D Gaussian 프리미티브(지도를 구성하는 기본 단위)는 고유한 시맨틱 임베딩 h를 가진다. 이 임베딩은 트리의 각 레벨(층)에서 얻은 정보를 하나로 합친 것이다.
h=f(hl)∈RN,hl∈Rn,l=0,1,…,L
- h: 특정 3D Gaussian이 가지는 최종 시맨틱 임베딩 벡터다. 이 벡터가 해당 가우시안이 어떤 물체인지를 나타낸다.
- hl: 트리의 l-번째 레벨(Level)에서의 임베딩이다. 예를 들어, 0레벨은 배경/객체와 같은 거친 분류 정보를 담고, 마지막 L레벨은 구체적인 물체 이름(예: 의자, 벽)을 담는다.
- f: Concatenation(연결) 연산을 의미한다. 각 레벨의 벡터 hl들을 순서대로 이어 붙여서 하나의 긴 벡터 h를 만든다는 뜻이다.
- n: 각 레벨 임베딩의 차원이다. 해당 레벨에 존재하는 최대 노드(분류 항목)의 수와 동일하게 설정된다.
- N: 전체 시맨틱 임베딩의 총 차원이다. 모든 레벨의 차원을 더한 값(N=∑l=0Ln)이 된다.
예시
1. 시맨틱 계층 구조의 정의
먼저 LLM을 통해 벽이라는 클래스를 다음과 같이 4단계의 계층으로 나눈다. 이를 통해 벽은 단순히 벽이 아니라, 배경이자 구조물이며 평면이라는 속성을 모두 갖게 된다.
- l=0 (루트 레벨): v0wall = 배경(Background)
- l=1 (중간 레벨): v1wall = 구조물(Structure)
- l=2 (중간 레벨): v2wall = 평면(Plane)
- l=3 (리프 레벨): v3wall = 벽(Wall)
2. 레벨별 임베딩 벡터 (hl) 생성
각 레벨 l마다 해당 단계에서 분류 가능한 선택지(노드)들이 존재한다. 각 Gaussian 프리미티브는 각 레벨에서의 소속을 나타내는 작은 벡터 hl을 가진다.
- 레벨 0 (h0): 이 레벨에 배경, 객체, 기타 등 4개의 선택지가 있다면, h0은 배경에 해당하는 위치의 값이 높은 4차원 벡터가 된다.
- 레벨 1 (h1): 배경 카테고리 안에 구조물, 가구, 장식 등이 있다면, h1은 구조물 위치의 값이 높은 벡터가 된다.
- 레벨 2 (h2): 구조물 안에 평면, 입체, 부드러운 형태 등이 있다면, h2은 평면을 가리킨다.
- 레벨 3 (h3): 최종적으로 평면 구조물 중 이것이 벽인지, 바닥인지, 천장인지를 결정하며 벽을 가리키게 된다.
3. 최종 트리 인코딩 (h) 결합
이제 위에서 정의한 각 단계의 작은 벡터들을 하나로 이어 붙여(Concatenation) 해당 Gaussian의 최종 시맨틱 신분증을 만든다.
h=f(h0,h1,h2,h3)
이렇게 결합된 벡터 h는 이 Gaussian이 어떤 계층 구조를 거쳐 벽이 되었는지에 대한 모든 정보를 담고 있다.
이 방식의 장점
- 정보의 압축: 만약 1,024개의 물체를 단순히 나열하면 1,024차원의 거대한 벡터가 필요하다. 하지만 10단계의 이진 트리 구조를 쓰면 각 단계별로 2차원씩, 총 20차원(2×10)의 벡터만으로도 1,024개의 물체를 정확히 구별할 수 있다.
- 단계별 렌더링: 논문의 그림 3처럼, 시스템은 상황에 따라 아주 세밀한 벽(Level 3)으로 화면을 그릴 수도 있고, 멀리 있을 때는 그냥 배경(Level 0)으로 뭉뚱그려 화면을 그릴 수도 있다. 이는 연산 효율성을 극대화한다.
- 기하학적 정보 포함: 평면(Plane)이라는 기하학적 속성이 계층 구조에 포함되어 있어, 시스템이 지도를 만들 때 이 물체가 평평해야 한다는 물리적 힌트를 자연스럽게 얻게 된다.
B. Hierarchical loss
1. 전체 시맨틱 손실 함수
전체 손실 함수는 두 가지 하위 손실의 가중치 합으로 정의된다.
LSemantic=ω1LInter+ω2LCross
- LSemantic: 모델이 최종적으로 최소화해야 할 전체 시맨틱 손실이다.
- LInter: 각 계층 내부에서 발생하는 손실을 의미한다.
- LCross: 계층 간 정보를 통합하여 계산하는 손실을 의미한다.
- ω1,ω2: 각 손실의 중요도를 조절하는 가중치 매개변수다.
2. Inter-level Loss (LInter)
이 손실은 트리의 각 레벨(Level)에서 독립적으로 시맨틱 분류가 잘 이루어지는지 체크한다.
LInter=l=0∑LLce(softmax(hl),Pl)
-
L: 시맨틱 트리의 총 레벨 수다.
-
l: 현재 계산 중인 특정 레벨의 인덱스다.
-
hl: Gaussian 프리미티브가 가지는 l번째 레벨의 시맨틱 임베딩 벡터다.
-
Pl: 해당 레벨에서의 시맨틱 정답(Ground Truth) 레이블이다.
-
Lce: Cross-Entropy 손실 함수로, 예측값과 정답 사이의 차이를 계산한다.
-
softmax: 임베딩 벡터를 확률 분포로 변환하여 특정 클래스에 속할 확률을 계산한다.
-
목적: 배경-객체(Level 0)부터 구체적인 가구 종류(Level L)까지 단계별로 정확한 분류를 학습하게 한다.
3. Cross-level Loss (LCross)
이 손실은 모든 계층의 정보를 하나로 합쳤을 때, 최종적으로 원래의 세부 클래스를 얼마나 잘 맞추는지를 측정한다.
LCross=Lce(softmax(F(h)),P)
-
h: 모든 레벨의 임베딩을 하나로 이어 붙인(Concatenation) 전체 계층적 임베딩이다.
- (h=[h0,h1,...,hL])
-
F: 모든 Gaussian 프리미티브가 공유하는 선형 레이어(Linear Layer)로, 계층적 임베딩을 다시 원래의 평면적인 클래스(예: 102개 또는 550개 클래스)에 대한 원핫 벡터로 사영(Projection)하는 역할을 한다.
- 학습 단계: 새로운 프레임이 들어와서 전역 맵(Global Map)을 업데이트하는 매핑 단계에 수행된다.
- 인퍼런스 단계: 생성된 맵에 대한 시맨틱 맵을 렌더링할 때 사용된다.
-
P: 데이터셋이 기본적으로 제공하는 시맨틱 분할 정답이다. 예를 들어, 특정 픽셀이 의자라면 인덱스 5번, 벽이라면 인덱스 1번과 같은 방식으로 주어지는 원핫 벡터 형태의 레이블이다.
-
목적: 계층적 구조로 압축된 정보가 결합되었을 때도 물리적인 의미를 잃지 않고 원래의 클래스 정보를 정확히 복원할 수 있도록 보장한다.
C. Gaussian Splatting Semantic Mapping and Tracking
Hier-SLAM은 3D 공간을 표현하기 위해 시맨틱 정보가 통합된 Gaussian Splatting 방식을 사용하며, 그 주요 구성과 렌더링 공식은 다음과 같다.
D. Entire framework

- 단계별 시맨틱 이해 (Coarse-to-fine rendering)
- 그림 하단 오른쪽은 학습된 맵을 레벨(l)에 따라 렌더링한 결과를 보여준다.
- l=0과 같은 상위 레벨에서는 배경이나 구조물 같은 거친(Coarse) 분류를 보여주고, 레벨이 깊어질수록(l=3) 구체적인 물체의 이름을 식별하는 세밀한(Fine) 이해가 가능해진다.
- 이러한 방식은 카메라의 거리에 따라 적절한 수준의 환경 이해를 제공할 수 있어 실제 로봇이 멀리서 접근할 때 유용하다.
Experiments
-
실험 환경 및 데이터셋
- 합성 데이터셋인 Replica와 실제 환경 데이터셋인 ScanNet을 사용하여 성능을 검증했다.
- 비교 대상으로 NeRF 기반의 SLAM과 3D Gaussian Splatting 기반의 SLAM 모두를 포함햇다.
- Nvidia L40S GPU 환경에서 실험을 수행했으며, 시맨틱 임베딩은 무작위로 초기화하여 학습을 시작했다.
-
평가 지표
- Tracking Accuracy: 카메라 경로의 정확도를 측정하기 위해 ATE RMSE(Absolute Trajectory Error)를 사용했다.
- Mapping Performance: 지도 재구성의 정확도는 실제 깊이 값과 차이를 나타내는 Depth L1 지표로 평가했다.
- Rendering Quality: 이미지 품질은 PSNR, SSIM, LPIPS를 통해 측정했다.
- Semantic Understanding: 3D 세계의 시맨틱 이해도를 평가하기 위해 2D 시맨틱 분할 성능인 mIoU를 활용했다.
-
주요 성능 결과
- 추적 및 매핑 정확도: Replica 데이터셋에서 기존의 모든 최신 기법들을 능가하는 성능을 보여주었으며, ScanNet에서도 SOTA(State-of-the-Art) 모델들과 대등한 결과를 얻었다.
- 작동 효율성: SplaTAM과 비교했을 때 Tracking은 최대 2.4배, Mapping은 2.2배 빠른 속도를 기록했다.
- 렌더링 속도: 시맨틱 정보가 포함된 경우 2,000 FPS, 포함되지 않은 경우 3,000 FPS라는 압도적인 렌더링 속도를 달성했다.
- 확장성: 500개 이상의 시맨틱 클래스를 가진 복잡한 실제 환경(ScanNet)에서도 계층적 표현 덕분에 메모리 문제 없이 성공적으로 작동했다.