3줄 요약

  1. 룬드 대학·ETH 취리히·마이크로소프트 공간 AI 랩 공동 연구진이 ECCV 2026에 낸 실내 방 구조 추정 방법 PolyLayout. 카메라 위치를 아는 여러 장의 사진에서 벽·바닥·천장의 3D 위치를 복원한다.
  2. 방을 직육면체로 가정하는 대신 벽이 직각으로만 꺾이는 맨해튼 다각형으로 표현하고, 벽의 개수를 최적화 도중에 늘리거나 줄인다. 한 건물 안 여러 방의 방향과 바닥·천장 높이는 하나로 묶어 함께 푼다.
  3. 합성 데이터 ASE에서 3D IoU 94.3, 실촬영 ScanNet++ v2에서 87.4를 기록해 직전 최고 방법인 PixCuboid(각각 68.1, 78.8)를 앞섰다. 성능의 출처를 갈라 본 실험에서, 새 백본보다 다각형 표현 자체의 기여가 더 컸다.

PolyLayout이 여러 장의 실내 사진에서 여러 방의 구조를 한꺼번에 복원한 결과. 방마다 색이 다르고, 각 방 안의 작은 사각뿔이 입력 이미지를 찍은 카메라다. 점구름은 시각화용이며 입력이 아니다.

어떤 문제를 다루는가

실내 공간의 3D 구조를 추정하는 일은 로보틱스·증강현실·장면 이해의 바탕이 된다. 여기서 말하는 방 구조 추정(room layout estimation)은 가구나 잡동사니가 아니라 벽·바닥·천장의 위치만 복원하는 과제다.

기존 방법들은 대체로 두 갈래로 막혀 있었다고 저자들은 정리한다.

  • 일반화가 약하다. Plane-DUSt3R는 기반 모델 DUSt3R를 재학습해 구조 평면을 예측하지만, 학습에 쓰인 Structured3D를 벗어나면 성능이 무너진다.
  • 기하 가정이 너무 좁다. PixCuboid는 최적화 기반으로 정확하지만 방 하나가 직육면체라고 고정한 채 출발한다. ㄱ자 방, 기둥이 튀어나온 방, 벽이 여섯 개인 방은 애초에 표현할 수 없다.

여기에 세 번째 문제가 겹친다. 거의 모든 방법이 방을 하나씩 따로 푼다. 한 건물 안의 방들이 같은 방향으로 정렬돼 있고 바닥과 천장을 공유한다는, 도면을 조금이라도 본 사람이면 당연하게 여길 구조를 아무도 쓰지 않았다.

PolyLayout은 이 셋을 한꺼번에 겨냥한다. 전체 흐름은 이렇게 생겼다.

PolyLayout의 전체 파이프라인. 왼쪽에서 신경망이 이미지마다 특징·모서리·신뢰도 지도를 뽑고, 카메라 위치로 초기 다각형을 세운 뒤, 최적화와 단순화·복구·쪼개기를 번갈아 돌려 최종 구조에 도달한다.

방 하나를 어떻게 적는가

핵심은 방을 적는 방식에 있다. 방 하나는 회전 행렬 $R \in SO(3)$ 하나와 평면 오프셋 벡터 $d = [d_1\ d_2\ \cdots\ d_p]$ 하나로 표현된다. $p \geq 6$이다.

  • $R$은 전역 좌표계를 방의 국소 좌표계로 옮기는 회전이다. 맨해튼 가정 아래에서 모든 평면은 국소 좌표계의 세 축에 정렬된다.
  • $d_1$은 바닥 평면 $z = d_1$, $d_2$는 천장 평면 $z = d_2$.
  • 나머지는 벽이며 $x$축과 $y$축을 번갈아 가리킨다. 첫 벽은 $x = d_3$, 둘째 벽은 $y = d_4$, 그다음은 $x = d_5$ 하는 식이다. 벽 평면의 개수는 항상 짝수이고 최소 네 개다. 정확히 네 개면 그 방은 직육면체가 된다.

ㄱ자 방을 오프셋 벡터로 적은 예. 벽은 $x$축 정렬 평면과 $y$축 정렬 평면이 번갈아 나타난다.

이 표기가 왜 중요한지는 논문이 대안과 비교하며 밝힌다. 회전·평행이동·크기 $(R, t, s_x, s_y, s_z)$로 방을 적으면 각 평면의 위치가 평행이동과 엉켜 버려서, 방들 사이에 파라미터를 나눠 쓰기가 어려워진다. 오프셋 벡터로 적으면 바닥 높이 $d_1$ 하나만 떼어내 여러 방이 공유하는 일이 그냥 된다.

무엇을 최소화하는가

초기 다각형 $\mathcal{P}$를 놓고 레벤버그-마쿼트 최적화로 다듬는다. 비용 함수는 네 항의 합이다.

$$E(\mathcal{P}) = E_{feat}(\mathcal{P}) + \alpha E_{edge}(\mathcal{P}) + \beta E_{VP}(\mathcal{P}) + \gamma E_{per}(\mathcal{P})$$
무엇을 재는가
$E_{feat}$현재 다각형을 통해 이미지 $i$의 점을 이미지 $j$로 옮겼을 때, 두 곳의 신경망 특징이 얼마나 어긋나는가
$E_{edge}$다각형 모서리를 각 뷰에 투영했을 때, 신경망이 예측한 모서리 지도 위에 잘 얹히는가
$E_{VP}$맨해튼 다각형이 만드는 소실점 세 개가, 이미지에서 검출한 선분들과 맞아떨어지는가
$E_{per}$다각형이 쓸데없이 복잡해지지 않았는가 (이 논문에서 새로 넣은 항)

앞의 세 항은 PixCuboid의 것을 다각형에 맞게 옮겨 왔다. 직육면체와 달리 다각형은 자기 자신을 가릴 수 있어서, 뷰 사이로 점을 옮길 때 이 자기 가림을 따로 처리해야 한다.

네 번째 항인 둘레 비용 $E_{per}$이 이 논문의 추가분이다. 벽 일부만 사진에 찍힌 상황에서 관측되지 않은 영역이 무한정 뻗어 나가는 것을 막는다. 다각형을 살짝 수축시키는 편향을 넣어 발산을 억제한다.

각 항의 가중치는 $\alpha = 0.05$, $\beta = 40$, $\gamma = 5 \times 10^{-4}$이며, 가장 정밀한 스케일에서는 $\gamma = 0$으로 꺼서 최종 결과가 수축 편향에 물들지 않게 한다. 특징 비용에는 뷰당 256개 점을 뽑고, 모서리 비용에는 모서리마다 40개 점을 균일하게 뽑는다. 선분 검출에는 DeepLSD를 쓰고 이미지당 최대 100개를 쓴다.

최적화는 거친 단계에서 정밀한 단계로 내려간다. 신경망이 입력 크기의 1/16, 1/4, 1/1 해상도로 특징·신뢰도·모서리 지도를 내놓고, 가장 거친 단계의 결과가 다음 단계의 출발점이 된다. 스케일마다 LM 스텝은 15회다.

벽의 개수를 정하지 않고 시작한다

PixCuboid와 갈라지는 두 번째 지점은 벽의 개수를 미리 정하지 않는다는 것이다. 초기값을 만들고, 최적화 도중에 벽을 쪼개거나 지운다.

카메라 위치(검은 점)에서 초기 다각형을 만드는 과정. 오목 껍질(빨강)을 구하고, 일정 거리만큼 부풀린 뒤(초록), 래스터화해 맨해튼 다각형(주황)으로 바꾼다.

초기화. 카메라들의 $y$축 평균으로 위쪽 방향을 잡아 회전 행렬을 세우고, $E_{VP}$만 최소화하는 LM 스텝을 다섯 번 밟아 방향을 다듬는다. 그다음 카메라 위치들 주위로 알파 셰이프(오목 껍질)를 구하고 $\delta = 3$ m만큼 부풀린 뒤, 1 m 픽셀로 래스터화해 윤곽을 따라가면 맨해튼 다각형이 나온다. 바닥과 천장은 카메라 중심까지의 최소 거리가 $\delta$가 되도록 놓는다.

갱신. 최적화 스텝마다 세 가지를 한다.

  1. 카메라 중심이 방 밖으로 나가 있으면 가장 가까운 벽을 바깥으로 민다.
  2. 다각형을 단순화한다. 비스발링감-와이엇 알고리즘을 맨해튼 성질이 깨지지 않도록 고쳐서, 꼭짓점 하나가 아니라 인접한 벽 두 개를 한꺼번에 지운다. 두 벽이 만드는 사각형의 면적이 중요도가 되고, 이미 수렴한 벽($|\Delta d_i| < 5$ cm)만 제거 대상이 된다. 이 과정에서 생긴 자기 교차는 Shapely로 정리한다.
  3. 거친 단계와 중간 단계가 끝나면 가장 넓은 벽을 반복해서 쪼갠다. 모든 벽이 1 m보다 좁아지거나 평면 개수가 32개에 이르면 멈춘다.

여러 방을 함께 푸는 것의 값

한 건물 안의 방들은 방향 $R$을 공유하고, 선택적으로 바닥·천장 높이 $(d_1, d_2)$도 공유한다. 공유하면 자유도가 크게 줄어 수렴이 좋아지고 정확도가 오른다.

ASE 테스트 세트에서 공유의 효과만 떼어 본 결과다.

공유 범위IoU ↑Chamfer ↓벽 재현율 ↑방 재현율 ↑Depth ↓Normal ↑
없음 (방마다 따로)93.50.13 m88.578.50.11 m97.9
방향93.80.13 m88.979.60.10 m98.0
방향 + 바닥 + 천장94.30.12 m89.079.00.09 m98.2

정직하게 읽으면 개선 폭 자체는 크지 않다. 93.5에서 94.3으로 오르고, 방 재현율은 도리어 79.6에서 79.0으로 내려간다. 벽 위치도 공유할 수 있지만 이 논문에서는 다루지 않았다고 밝혀 둔다. 덧붙이면 이 설정은 어느 이미지가 어느 방에 속하는지 미리 안다고 가정한다.

신경망은 특징만 낸다

신경망은 이미지마다 조밀한 특징 지도 $F$, 모서리 지도 $E$, 그리고 둘의 신뢰도 지도 두 장을 내놓는다. 그게 전부다. 카메라 투영과 다각형 갱신은 학습되지 않은 명시적 기하 코드가 담당한다. 저자들은 이 분리가 새 데이터셋과 새 카메라 파라미터로의 일반화를 좋게 만든다고 본다.

구조는 MoGe-2에서 가져왔다. DINOv2 ViT-S/14 인코더(레지스터 없는 사전학습 모델) 하나에 합성곱 디코더 두 개를 붙였고, MoGe-2와 달리 두 헤드가 목을 공유하지 않는다. 인코더는 얼리지 않되 낮은 학습률을 쓴다.

학습은 PixCuboid의 절차를 따르되 데이터를 늘렸다. ScanNet++ v2에서 온 직육면체 방 391개에 저자들이 직접 손으로 표시한 맨해튼 방 107개를 더했고, 후자에서 방당 네 배 많은 예제를 뽑았다. 전체 감독 신호는 출력 방 구조 하나뿐이며, 손실의 그래디언트는 펼쳐진 최적화 과정을 거슬러 흐른다.

사전 학습이 DINOv2에서 훨씬 빨리 수렴하는 것을 확인해 에폭을 10에서 3으로 줄였다. 두 단계 학습은 12 GB 메모리의 NVIDIA TITAN V 한 장에서 각각 약 4시간, 72시간 걸렸다.

새 벤치마크 두 개

기존 데이터셋에 방 구조 정답을 새로 표시해 다중 뷰·다중 방 벤치마크 두 개를 만들었다.

  • ASE (Aria Synthetic Environments): 합성 데이터 10만 장면 중 검증·테스트용으로 각 100장면을 뽑았다. 방마다 이미지 10장씩, 장면당 다섯 벌을 샘플링했다. 카메라 궤적이 조밀해 균일 샘플링을 하면 어떤 뷰에도 안 찍히는 벽이 생기므로, 아직 안 본 점을 우선 보는 가시성 기반 샘플링을 설계했다. 옆방 내용물이 문틈으로 10% 넘게 찍힌 이미지는 아예 제외한다.
  • ScanNet++ v2: 실촬영 80장면의 방 구조를 손으로 표시했다. 3D GUI에서 사용자가 고른 메시 정점에 평면을 맞추고, 평면들의 교선을 자동으로 찾아 정답을 만든다. 이 80장면은 PixCuboid가 쓴 ScanNet++ 세트와 겹치지 않고 학습 데이터와도 겹치지 않는다.

여기에 PixCuboid가 쓰던 2D-3D-Semantics(직육면체 방 160개)를 더해 세 데이터셋으로 평가한다.

평가 지표에는 3D IoU와 챔퍼 거리, 픽셀 단위 깊이 RMSE와 법선 각도 재현율(10°)에 더해 벽 재현율방 재현율을 새로 정의했다. 정답 벽마다 0.25 m 간격 격자점을 뿌리고, 그중 90% 넘는 점이 예측 구조에서 0.25 m 안에 들어오면 그 벽을 잡아낸 것으로 센다. 방 재현율은 벽을 100% 잡아낸 방의 비율이다.

비교 결과

같은 ASE 장면에 대한 방법별 예측(초록)과 정답(파랑). 왼쪽부터 SceneScript, Plane-DUSt3R, PixCuboid, RoomFormer, PolyLayout.

ASE 테스트 세트 결과다.

방법IoU ↑Chamfer ↓벽 재현율 ↑방 재현율 ↑시간 ↓
SceneScript (SLAM 반조밀 점구름)†N/A0.12 m96.191.05.31 s
SceneScript (이미지 10장 COLMAP)N/A2.44 m16.79.17.45 s
Plane-DUSt3RN/A23.16 m0.10.0105.60 s
PixCuboid68.10.93 m54.945.51.01 s
RoomFormer13.82.37 m5.00.50.06 s
PolyLayout94.30.12 m89.079.05.48 s

† SceneScript의 첫 행은 장면의 전체 이미지로 만든 반조밀 점구름을 쓴다. 게다가 SceneScript는 ASE로 학습됐고, 이 테스트 세트는 그 학습 장면의 부분집합이다. 같은 조건의 비교가 아니라는 뜻이다.

같은 SceneScript도 이미지 10장에서 COLMAP으로 만든 점구름을 주면 벽 재현율이 96.1에서 16.7로 떨어진다. Plane-DUSt3R는 Structured3D를 벗어나자 거의 아무것도 복원하지 못했다. RoomFormer는 0.06초로 압도적으로 빠르지만 밀도가 낮은 점구름에서 평면도를 뽑아내지 못한다.

실촬영 ScanNet++ v2에서는 격차가 좁아진다.

방법IoU ↑Chamfer ↓벽 재현율 ↑방 재현율 ↑
PixCuboid78.80.36 m58.926.1
PolyLayout87.40.20 m69.336.3

논문은 그 이유를 이 데이터셋의 방들이 직육면체는 아니어도 거의 직육면체에 가깝기 때문이라고 설명한다. PixCuboid의 가정이 그럭저럭 통하는 조건인 것이다.

세 번째 데이터셋 2D-3D-Semantics는 방이 전부 직육면체이고 층고도 제각각이라 방향만 공유해 돌렸다. IoU는 PolyLayout이 90.0으로 PixCuboid의 89.0을 앞서지만, 벽 재현율은 92.2 대 93.8, 방 재현율은 80.6 대 85.0으로 뒤진다. 직육면체 전용으로 만든 방법이 직육면체만 있는 데이터셋에서 재현율을 지키는 결과를 논문이 감추지 않는다.

성능은 어디서 왔는가

DINOv2 백본을 새로 얹었으니 개선이 거기서 온 것 아니냐는 의심은 자연스럽다. 저자들은 두 방법에 두 백본을 교차로 물려 이 질문을 정면으로 다룬다.

ASE IoU ↑ScanNet++ IoU ↑2D-3D-S IoU ↑
PixCuboid (ResNet-101)68.178.889.0
PolyLayout (ResNet-101)82.784.785.4
PixCuboid (DINOv2)75.981.292.1
PolyLayout (DINOv2)94.387.490.0

ASE와 ScanNet++에서 구형 백본을 단 PolyLayout이 새 백본을 단 PixCuboid를 앞선다(82.7 대 75.9, 84.7 대 81.2). 다각형 표현과 다중 방 공유가 백본 교체와 별개로 값을 만든다는 뜻이다. 반대로 2D-3D-S에서는 PixCuboid가 이긴다. 그 데이터셋의 방이 전부 직육면체이니 놀랄 일은 아니라고 논문은 적는다.

다른 설계 선택들의 기여는 이렇게 갈린다.

  • 백본 단독: 특징 비용 $E_{feat}$만 켠 채로 비교하면 ResNet-101이 IoU 24.6, DINOv2가 45.1이다. 두 신경망의 파라미터 수는 30M 대 28.5M으로 비슷하다. 학습된 특징만으로는 절반에도 못 미치고, 나머지는 명시적 기하가 채운다.
  • 초기화: 직육면체 90.5, 원형 93.2, 오목 껍질 94.3.
  • 다각형 갱신: 단순화를 끄면 92.9로 떨어지고 방 재현율은 79.0에서 72.5로 무너진다. 반면 벽 쪼개기를 끄면 IoU는 93.6으로 조금 낮지만 방 재현율은 82.2로 더 높다. 오목 껍질 초기화가 이미 벽을 넉넉히 만들어 주기 때문에 쪼개기의 몫이 크지 않다고 저자들도 인정한다.

카메라 포즈와 점구름

이 방법은 카메라 포즈를 안다고 전제한다. 저자들은 이것이 실전에서 큰 제약이 아니라고 보고, 포즈 회귀 방법 $\pi^3$로 포즈를 추정한 뒤 같은 실험을 돌렸다. IoU 94.3이 89.4로, 챔퍼 거리 0.12 m가 0.21 m로 내려간다. 떨어지긴 하지만 다른 방법들과의 격차를 유지하는 수준이다.

마지막 실험은 점구름에 직접 모델을 맞추는 고전적 접근과의 비교다. ScanNet++ v2의 직육면체 방만 골라 돌린 결과다.

방법IoU ↑Chamfer ↓벽 재현율 ↑
RANSAC26.11.34 m2.5
거리 기반 최적화 $E_{dist}$45.91.17 m19.1
$E_{feat}$63.50.74 m54.4
$E_{feat} + E_{edge}$92.40.15 m95.0

RANSAC은 점구름의 이상치 때문에 인라이어 집합을 뽑을 확률이 낮아 직육면체를 제대로 맞추지 못한다. 거리 기반 ICP 방식은 그보다 낫지만 학습된 비용에 밀린다.

가장 눈여겨본 것은

위 표의 마지막 두 행이다. 특징 비용만 쓰면 IoU 63.5, 여기에 모서리 비용을 더하면 92.4. 한 항을 추가한 것만으로 29포인트가 오른다.

DINOv2의 특징 지도는 벽 표면의 시각적 대응을 잡는 데는 유능해도, 벽과 벽이 만나는 선이 정확히 어디인지는 알려주지 않는다. 방의 구조를 규정하는 것은 면이 아니라 면들이 만나는 모서리인데, 조밀한 특징 매칭은 바로 그 정보를 흐린다. 모서리 지도라는 별도의 출력 헤드가 그 빈칸을 메운다.

같은 이야기가 백본 단독 실험에도 있다. DINOv2 특징만으로 최적화하면 IoU 45.1에서 멈추고, 모서리와 소실점과 둘레 항을 전부 켜야 94.3에 닿는다. 강력한 사전학습 표현을 얹는 것만으로는 절반도 가지 못하고, 나머지 절반은 반세기 넘게 쓰여 온 레벤버그-마쿼트와 소실점 기하가 채운다.

이 논문이 반복해서 지키는 원칙이 있다. 학습된 것은 점수를 매기고, 기하는 명시적으로 남긴다. 그 선을 넘지 않은 덕분에 저자들은 학습 때 본 적 없는 합성 데이터에도, 다른 카메라 파라미터에도 방법을 그대로 가져갈 수 있었다. 기반 모델을 통째로 재학습한 Plane-DUSt3R가 학습 도메인 밖에서 벽 재현율 0.1을 기록한 것과 나란히 놓고 보면, 어디까지를 학습에 맡길지가 성능을 가른 조건이었던 셈이다.

한계도 분명하다. 방이 아주 복잡한 모양이면 벽을 다 찾아내지 못하고, 가시성 기반 샘플링을 써도 어떤 뷰에도 안 찍힌 부분은 복원할 수 없다. 어느 이미지가 어느 방에 속하는지 미리 알아야 한다는 가정도 남아 있다.

출처

Gustav Hanning, Shaohui Liu, Rémi Pautrat, Marc Pollefeys, Kalle Åström, Viktor Larsson, “PolyLayout: Multi-room Manhattan Layout Estimation”, European Conference on Computer Vision (ECCV) 2026. Lund University, ETH Zurich, Microsoft Spatial AI Lab. arXiv 제출 2026년 8월 4일.

본문 도판은 저자들의 arXiv 논문과 프로젝트 페이지에서 인용했다.