【论文解读】NadirFloorNet:用少量已配准全景图重建多房间户型图

论文名片

项目 内容
论文名​ NadirFloorNet: Reconstructing Multi-Room Floorplans from a Small Set of Registered Panoramic Images
作者​ Giovanni Pintore、Uzair Shah、Marco Agus、Enrico Gobbetti(意大利 CRS4 + 卡塔尔 HBKU)------AtlantaNet 的原班人马​
发表​ CVPR 2025 Workshop(USM3D),pp. 2010--2019
一句话贡献​ 每个房间只拍一张 全景图,就能自动拼出整套房子的户型图 + 层高​
江湖地位​ 把 AtlantaNet 那条"投影到水平面看房间轮廓"的思路,从单房间 扩展到了整套房子;也是这个团队十年积累的一次集大成

一、任务升级:从"一个房间"到"一整套房"

前面我们讲的所有方法(HorizonNet、HoHoNet、LED²-Net、AtlantaNet...)都在做同一件事:

给一张全景图 → 画出这一个房间的盒子。

但现实需求是什么?

房产中介拍了一套三室两厅,想要一张完整的户型图(哪个房间挨着哪个、墙在哪、每个房间多大、层高多少)。

这就从"单房间布局估计 "升级成了"多房间户型图重建"。

举个贯穿全文的例子

你带着一台 360° 相机走进一套公寓:

  • 客厅拍一张
  • 主卧拍一张
  • 次卧拍一张
  • 厨房拍一张
  • ......一共拍了 9 张

相机记录了每张照片拍的时候站在哪、朝哪个方向 (这叫"已配准 / registered")。

NadirFloorNet 的目标:用这 9 张图,输出整套房子的户型图,还标出每个房间的层高。


二、动机:为什么这事这么难?

2.1 传统做法:要么贵,要么累

方案 问题
激光雷达(LiDAR)扫描​ 设备昂贵、操作专业,普通人用不起
密集拍照 + 三维重建​ 需要在房间里来回走、大量重叠拍摄,工作量巨大

2.2 现实约束:每个房间只有一张

房产虚拟看房(如贝壳、Zillow)的实际操作是:走进一个房间,站定,拍一张,走人。

这就是论文的"minimalist capture(极简采集)"。好处是快、便宜;坏处是带来了两个大麻烦:

麻烦 1:家具遮挡(Clutter)

房间里堆满沙发、床、柜子。你看到的是家具的表面 ,不是墙的位置。

例子:一张大床紧贴着墙放。相机拍到的"边界"是床沿 ,不是墙脚。要得到真实户型,必须**"看穿"这张床**。

麻烦 2:数据稀疏(Sparsity)

每个房间只有一张图,房间之间没有重叠区域。

传统的多视角三维重建,靠的是"同一面墙在两张照片里都出现,通过匹配拼起来"。现在每个房间只有一张------没有重叠可匹配,只能靠"猜"。

2.3 前人的局限

  • 很多方法依赖曼哈顿世界假设(墙必须成直角)------真实户型不都这么规整;
  • 或者需要大量人工修正------没法自动化;
  • 主流多房间方法(如 RoomFormer)通常要求密集点云作为输入。

2 . 4 之前方法的三大痛点

在 Nadir FloorNet(2022 年)之前,室内布局重建一直卡在 "单房间" 阶段,面对整套房的多房间场景基本行不通:

1. 只能做单房间,拼不起整套房

像 HorizonNet、AtlantaNet 这些经典方法,都只能单独重建一个房间的布局。但一套房子有客厅、卧室、厨房、走廊,还有门洞、过道,单房间方法没法处理房间之间的连接,更画不出完整的户型。

2. 平视视角 "拐个弯就看不见"

绝大多数方法都用平视全景图推断户型,但平视视线会被墙面挡住,一个全景只能看到当前房间的墙,隔壁房间完全看不到。要覆盖整套房就得拍几十张,采集效率很低。

3. 传统方案成本太高

专业的户型重建用激光雷达扫描,设备贵、操作慢,扫一套房要几小时;普通视觉重建要拍上百张照片,还容易出现错位、漏洞。

核心洞察:盯着地板看,就能看出户型

论文作者跳出了 "平视看墙" 的固有思路,发现了一个非常朴素的规律:

墙和地板的交线(墙脚线),就是户型图的 "直接脚印" 。

你站在房间里垂直向下看地板,能看到的一圈墙脚线,就是你周围户型的轮廓。只要把每个全景图都转换成这种 "垂直向下看地板" 的视角,提取出墙脚线,再把几个视角的结果拼起来,就能得到整套房子的户型。
举个例子:就像你在房子地上放几个透明圆盘,每个圆盘的边缘印着它能看到的墙脚线,把几个圆盘按位置拼好,沿着边缘描一圈,就是完整的户型图。

2 . 5 什么是天底视角(Nadir View)

天底视角,就是从相机位置垂直向下看向地板的鸟瞰视角,相当于把相机镜头朝下 90°,拍一张地板的俯视图。

  • 普通全景是 "平视一圈",天底视角是 "低头看地";
  • 天底图里,墙和地板的交界线就是清晰的线条,这条线和真实户型的边界是 1:1 对应的几何关系。

为什么选天底视角,不选天花板视角

  1. 墙脚线连续稳定:墙和地板的交线是连续的闭合线条,直接对应户型轮廓,几何关系最简单;
  2. 遮挡相对更少:虽然有椅子、桌子挡地板,但大件家具(沙发、柜子)通常靠墙放,中间区域的墙脚线大多能看到;
  3. 单张覆盖范围大:一个全景的天底视角,能覆盖相机周围好几米的地板区域,客厅里拍一张就能看到大部分墙脚。

怎么来的:从天底投影变换生成

  1. 输入一张普通的 360° 平视全景图,通过几何坐标变换,就能算出对应的天底俯视图:
  2. 全景图每个像素对应一个空间方向;
  3. 已知相机高度(比如 1.6 米),把每个像素对应的射线投射到地板平面上,得到对应的平面坐标;
  4. 通过插值计算,生成一张正方形的地板俯视图,就是天底图。

举个例子:就像你站在原地转一圈拍了全景,现在把画面 "掰" 成低头看地的样子,就能看到脚下一圈地板的完整俯视图。


三、核心思路:两步走 + 一个关键洞察

3.1 整体两步

复制代码
第 1 步:Nadir Shape Network(单张图 → 单个房间的"俯视轮廓")
         每张全景图各处理一次,得到各自的 Nadir shape

第 2 步:Nadir Floorplan Network(所有轮廓 → 整套户型图)
         把所有房间的轮廓按相机位置摆到同一张图上,
         用 Transformer 融合、补全被遮挡的部分,输出最终户型图

3.2 最关键的那个洞察(请重点记住)

论文的核心创新一句话概括:

与其让网络去"分割"堆满家具的 RGB 图像,不如让它先预测"这个房间如果是空的,深度图长什么样"。

这叫 Structural Inpainting(结构补全 / 结构修复)。

类比:

  • 笨办法:给你一张堆满家具的照片,让你描出地板轮廓。你得先分辨"这是沙发还是墙",很容易错。
  • 聪明办法 :先想象"把家具全搬走,这个空房间长什么样",再画轮廓。脑子里没有杂物干扰,画得又干净又准。

网络被训练成预测"空房间的深度图"(uncluttered / clutter-free depth) ------相当于让 AI 学会"透视家具"。

为什么这招特别有效? ​ 因为深度图是几何量,比 RGB 颜色稳定得多;而且"空房间"这个监督信号,可以直接从数据集中生成(Structured3D 就有"空房间"和"带家具房间"的配对)。

**效果有多好?**​ 看补充材料的数字:

场景 MAE ↓ RMSE ↓ δ¹ ↑
空房间(uncluttered) 0.034​ 0.027 0.981​
带家具(cluttered) 0.060 0.043 0.964

即使面对满是家具的房间,深度预测的 δ¹ 仍高达 0.964------网络确实学会了"看穿"家具。


四、技术拆解 ①:Nadir Shape Network(单房间)

4.1 什么是"Nadir 平面"?

Nadir(天底点) ​ 是摄影测量里的术语,指"相机正下方"的方向。

Nadir 平面 ​ = 一个水平的俯视平面 ,也就是你从正上方往下看得到的那张图------就是户型图本身。
类比:把房间比作一个鞋盒。Nadir 平面就是你掀开盒盖、从上往下拍的那张照片------看到的就是鞋盒的"脚印"。

**为什么选这个表示?**​ 论文的判断非常精准:

Nadir 投影作为中间表示,比一维向量信息量大,又比三维点云省算力。

这是一次很讲究的尺度选择:

表示 信息量 算力
1D 向量(如 HorizonNet) 太少 极省
Nadir 2D 图​ 适中​ 适中​ ✅
3D 点云 丰富 昂贵

4.2 网络结构(五步)

复制代码
① 输入等距柱状全景图 I_c (512×1024)
   ↓
② 轻量 U-Net(仅 4M 参数)预测 attention mask M_e
   ------ 标记"哪些区域是空的 / 非空"
   ↓
③ Residual-gated encoder(残差门控编码器)提取多层特征
   ↓
④ Gravity-Aligned Features(GAF)Transformer
   ------ 利用"重力对齐"这个先验压缩特征
   ↓
⑤ 输出两样东西:
   ├─ 空房间的等距柱状深度图 D_s / D_h
   └─ 投影到 Nadir 平面的概率图 N_p(即房间俯视轮廓)
      + 地板距离 h_f 和天花板距离 h_c(→ 层高)

几个细节解读:

① 那个 4M 参数的轻量 U-Net 很有意思

它先在 Structured3D 上单独预训练(用二元交叉熵),专门学"判断房间是空还是非空"。

作用:给后续主网络一个注意力掩码------告诉主网络"重点看哪些区域"。

这体现了 AtlantaNet 团队一贯的风格:用轻量模块先把领域知识注入,再让重网络专注主干任务。

② GAF(Gravity-Aligned Features)

这是这个团队的"祖传手艺"------从 AtlantaNet 到 HoHoNet 都在用:室内人造结构沿重力方向排列,所以可以沿垂直方向压缩特征。

③ 一个网络同时输出深度和轮廓

这是"多任务监督"的经典用法:深度任务提供逐像素的几何监督,布局任务提供俯视轮廓的语义监督,两者互相强化。

4.3 损失函数:六个分量

项 含义 权重
Ld​ 深度误差(预测深度 vs 真实空房间深度) λ_d = 1.0
Ldss​ 深度 SSIM(结构性相似度,负号表示越大越好) λ_dss = −0.5
Ll​ 布局误差(Nadir 轮廓) λ_l = 1.0(补充材料)/ 0.5(正文)
Lh​ 高度误差(层高) λ_h = 0.1
Ln​ 法向量误差(表面朝向对不对) λ_n = 0.1
Lg​ 法向量梯度误差(表面是否平滑、边缘是否锐利) λ_g = 0.1

注意这个损失设计的思路:深度 + 法向量 + 梯度 是三维重建的"标准全家桶",再加上布局轮廓 和高度 这两个任务专属项。既学几何细节,又学结构轮廓。


五、技术拆解 ②:Nadir Floorplan Network(多房间融合)

5.1 第一步:把各房间的轮廓摆到一张图上

因为相机是"已配准"的(知道每张照片的位置和朝向),所以可以直接把每个房间的 Nadir 轮廓,按其真实位姿贴到同一张全局户型图上 ,得到一张 Nadir floorplan 图 Fn​。

类比:你手上有 9 张各自画的房间草图,每张都标注了"我站在公寓的哪个坐标、朝哪个方向"。把它们按坐标摆到一张大图纸上------拼图的位置关系就对了。

但摆上去之后会有问题 :每个房间的轮廓都是单视角 推断的,被家具挡住的部分是"猜"的,可能不完整、有缺口、甚至形状不对。

5.2 第二步:用 Deformable Attention Transformer 融合补全

这是第二个 Transformer 模块,采用 DETR 风格(Facebook 的端到端检测框架)。

结构:

复制代码
输入:Nadir floorplan 图 F_n (256×256)
   ↓
ResNet 提取 4 个尺度的特征
   ↓
DSA Encoder(多尺度可变形自注意力编码器)
   ↓
SA-DCA Decoder(自注意力 + 多尺度可变形交叉注意力解码器)
   ↓
输出:M×N×2 的多边形坐标 + M×N×1 的分类分数

两级 Query(论文的重点设计):

  • M 个"房间" query:每个代表一个房间;
  • N 个"角点" query:每个房间由 N 个角点组成;
  • 每个角点输出 2 个数(x, y 坐标)。

所以输出是 M×N×2 ------M 个房间,每个房间 N 个角点的坐标。

这和 RoomFormer 的思路一致(论文明确说训练策略沿用 RoomFormer),但输入换了------下面会讲这有多关键。

5.3 为什么可变形注意力(Deformable Attention)?

标准自注意力要计算所有位置两两之间的相关性------对 256×256 的图来说是 65536×65536,算不动。

可变形注意力 :每个 query 只稀疏地采样少数几个关键位置 (而不是全部),大幅省算力,还更适合处理稀疏、不规则的结构(墙角就是稀疏的)。

5.4 融合时发生了什么?------"互信息解决遮挡"

论文说这个过程"利用互信息来解决结构遮挡、完成房间重建"。

具体例子:

  • 主卧的轮廓里,衣柜挡住的那一角是"猜"的,可能缺一块;
  • 但次卧从另一侧拍到了这面墙------它的轮廓里,这一角是清楚的;
  • Transformer 让两个房间的特征互相参考,用次卧的信息把主卧的缺口补上。

再比如:两个房间共用一堵墙 。Transformer 会发现"这两条边应该重合、墙有厚度",从而让两者的边界对齐。

这类"墙厚多少""房间怎么拼接"的先验,全都是网络从数据里学出来的,没有硬编码规则。


六、技术拆解 ③:2D/3D 户型图构建器

网络输出的还是一堆角点坐标,需要转成可用的成果:

复制代码
网络输出的角点
   ↓
① 提取闭合的 2D 多边形
   ↓
② 去除冗余角点(比如三点几乎共线,中间那个就删掉)
   ↓
   得到规整的 2D 户型图
   ↓
③ 结合 Nadir Shape Network 预测的层高 + 尺度信息
   ↓
④ 拉伸成水密(watertight)的 3D 网格

"水密"是什么意思? ​ 就是网格完全封闭、没有破洞------可以直接用于 3D 打印、体积计算、渲染等下游应用。


七、实验设置

数据集

数据集 规模 特点
**Structured3D (S3D)**​ 3500 套合成房子​ 布局多样,含曼哈顿和非曼哈顿户型;有"空房间/带家具"配对------这正是训练"看穿家具"的关键​
ZInD(Zillow Indoor Dataset) 71,474 张全景图,来自 1524 套真实住宅​ 真实世界、有 3D 多房间布局标注;最大的真实室内数据集之一​

为了公平对比,作者把 ZInD 转换成了 S3D 的格式(按原作者说明操作)。部分标注转换失败的场景被丢弃了。

训练设置

项目 值
Nadir Shape Network Adam(β₁=0.9, β₂=0.999),初始 lr 1e-4,batch 8,单卡 RTX A5000 24GB
平均训练耗时 613 ms/图​
Nadir Floorplan 模块 训练 500 epochs,沿用 RoomFormer 的设置
实现 PyTorch,可变形注意力模块来自 deformable-DETR,可微光栅化来自 BoundaryFormer

八、实验结果

8.1 主结果(Table 1)

评测协议沿用主流户型图重建工作:对每个真实房间,在所有预测中找 IoU 最匹配的那一个,统计 Precision / Recall / F1。

Structured3D(合成):

方法 Room Prec Room Rec Room F1​ Corner Prec Corner Rec Corner F1​ Angle Prec Angle Rec Angle F1​
RoomFormer (RF) 0.892 0.876 0.884​ 0.704 0.681 0.692 0.643 0.623 0.633
Ours NSO(仅 Nadir Shape,未融合) 0.939 0.930 0.928 0.553 0.542 0.647 0.424 0.522 0.466
Ours full(完整) 0.943​ 0.939​ 0.940​ 0.834​ 0.801​ 0.817​ 0.746​ 0.717​ 0.731​

ZInD(真实世界):

方法 Room Prec Room Rec Room F1​ Corner F1 Angle F1
RoomFormer (RF) 0.811 0.756 0.788​ 0.660 0.505
Ours NSO​ 0.786 0.733 0.758 0.627 0.424
Ours full​ 0.824​ 0.767​ 0.794​ 0.689​ 0.536​

8.2 怎么读这两张表?(三个层次的发现)

① 完整方法全面超越 RoomFormer

在 S3D 上,Room F1 从 0.884 → 0.940 (+5.6 个点);Corner F1 从 0.692 → 0.817(+12.5 个点!);Angle F1 从 0.633 → 0.731(+9.8 个点)。

角点和角度的提升远大于房间级 ------这说明补充材料里那句判断是对的:

我们的 Nadir 图里,平面性、锐利度等结构特征在单视角处理阶段就已经显现出来了;而 RoomFormer 用的是点云生成的 occupancy map,这些结构线索被"糊掉"了。
类比:RoomFormer 拿到的是一张模糊的 occupancy 热力图 (哪里可能有房间);NadirFloorNet 拿到的是清晰的房间轮廓草图。起点不一样,终点自然不一样。

② "NSO"(只用 Nadir Shape,不做多房间融合)已经很强

S3D 上 Room F1 已达 0.928,超过 RoomFormer 的 0.884。

这说明第一步的"看穿家具 + Nadir 投影"本身就贡献了大部分收益。第二步融合进一步把 Corner/Angle 指标拉上去。

③ 真实世界(ZInD)上依然领先,但差距缩小

Room F1:0.794 vs RoomFormer 0.788(+0.6)。真实数据的噪声、标注不完整,让所有方法都更难。

8.3 效率(这是很实用的一组数字)

项目 数值
Nadir Shape Network 参数量 31.81M​
计算量 98.97 GFLOPs​
单张 512×1024 全景图推理 67 ms(RTX 2060 笔记本 GPU)
256×256 户型图推理 20 ms​
20 个房间的整套户型图​ 不到 1.5 秒​

注意:67 ms 是在笔记本级 GPU(RTX 2060)上 ------这意味着这套方案真的能在消费级硬件上跑,对房产、装修这类应用极其友好。


九、优势与局限

✅ 优势

优势 说明
极简采集​ 每房间一张图即可,不需要密集重叠拍摄
能"看穿"家具​ 预测空房间深度,从根源上解决遮挡(δ¹ 达 0.964)
Nadir 表示选得好​ 比 1D 信息多、比 3D 点云省算力
多房间互信息融合​ 用相邻房间的信息补全彼此的遮挡缺口
端到端可微​ 两个模块可统一优化
速度快、硬件门槛低​ 67ms/图,笔记本 GPU 可跑
输出水密 3D 网格​ 可直接用于下游(体积计算、渲染、3D 打印)
不硬编码几何规则​ 墙厚、拼接方式等先验全部由数据学出

❌ 局限(作者自己列了失败案例)

局限 说明
假设墙是竖直的​ 非标准建筑(如 A 字形木屋的斜墙)会失效
每房间只预测一个层高​ 错层、跃层、楼梯间的多级高度搞不定
楼梯是老大难​ 补充材料明确展示:楼梯这种结构占主导时,预测会出错
含室外部分会崩​ 图片里出现室外区域时,"室内环境 + 竖直墙包围"的假设失效
窗外景色会干扰​ 透过窗户看到的纹理丰富的室外景象 + 反射表面,会让网络误判
货架类家具仍难​ 补充材料提到:某些类型的货架会让网络分不清"杂物"与"结构"
复杂天花板无法建模​ 论文说方法其实能输出 heightmap,但现有数据集没有无歧义的天花板形状标注,无法监督
依赖图像配准 必须知道每张全景的准确位置和朝向,配准误差会直接导致拼接错位
全遮挡墙段会漏检 如果一整面墙前都打了衣柜、完全挡住墙脚线,网络也没法凭空猜出来
只能输出平面户型 假设所有房间在同一楼层,处理不了错层、复式、挑高这类有高度变化的户型

十、一句话总结 + 四条可迁移的思路

NadirFloorNet 的核心智慧是"先清空,再画轮廓":与其在堆满家具的照片里艰难地找墙,不如先让网络预测"这个房间空着时长什么样",再把每个房间的俯视轮廓按相机位姿摆到同一张图上,用 Transformer 让相邻房间互相补全缺口。结果:每个房间只需一张照片,1.5 秒就能出整套 20 个房间的户型图,在合成和真实数据集上都超越了需要密集点云的对手。

四条可以带走的思路:

  1. 换一个"中间目标",难题可能自动消失。 直接分割带家具的 RGB 图很难;改成预测"空房间的深度",难度骤降。当你觉得任务太难时,先问问:是不是"直接求解"的路径本身就选错了? 有时候加一个"想象出来的中间态"反而更近。
  2. 中间表示的"粒度"要精挑细选。 1D 向量太粗、3D 点云太贵,2D 俯视图正好 ------信息够用、算力友好。选表示时,不要只看"信息量最大",要看"够用且最省"。
  3. 多视角融合的价值在"互补缺口",不在"重复确认"。 主卧看不清的角,次卧看得清------Transformer 的作用是让信息富余的地方去补信息缺失的地方 。做多源融合时,先想清楚:每个源缺什么、谁能补上。
  4. 领域知识可以用"轻量模块+预训练"低成本注入。 那个 4M 参数的 U-Net 注意力掩码,先用 Structured3D 单独预训练好,再挂到主网络上。不需要把先验强行塞进大模型,一个便宜的小模块往往就够了。

📖 名词小抄

名词 大白话
**Nadir(天底点)**​ 相机正下方的方向;Nadir 平面​ = 水平俯视平面 = 户型图本身
**Registered(已配准)**​ 知道每张照片拍摄时的位置和朝向
Minimalist capture​ 极简采集:每个房间只拍一张
Clutter​ 家具杂物------遮挡墙面的"干扰物"
Uncluttered / clutter-free depth​ "空房间"的深度图------让网络学会看穿家具​
Structural Inpainting​ 结构补全:把被家具挡住的结构"想象"出来
**Attention Mask(U-Net, 4M)**​ 轻量预训练小网络,标记"哪些区域空/非空",给主网络当注意力
GAF​ Gravity-Aligned Features:利用"结构沿重力排列"压缩特征
Residual-gated encoder​ 残差门控编码器,稳定深层特征传递
N_p​ Nadir 平面上的概率图 = 房间的俯视轮廓
h_f / h_c​ 地板距离 / 天花板距离 → 两者相减得层高
DETR​ Facebook 的端到端检测框架:用 query 直接出结果,不要 NMS 后处理
Deformable Attention​ 可变形注意力:只采样少数关键位置,省算力、适合稀疏结构
**两级 Query(M×N×2)**​ M 个房间 × N 个角点 × (x, y) 坐标
Watertight mesh​ 水密网格:完全封闭无破洞,可直接用于 3D 打印/体积计算
**Structured3D (S3D)**​ 3500 套合成房子,含空/非空配对------训练"看穿家具"的关键
ZInD​ Zillow 室内数据集:1524 套真实住宅、71474 张全景图
**RoomFormer (RF)**​ 此前主流的户型图重建方法(本文的主要对比对象)
NSO​ Nadir Shape Only:只用第一步(单房间推断),不做多房间融合
Room / Corner / Angle F1 房间级 / 角点级 / 角度级 的 F1 分数
相关推荐
Zentceh4 小时前
PixelClean 这类 AI 降噪算法是怎么工作的?从 RAW 域到 GAN 色彩重建的技术拆解
图像处理·人工智能·科技·算法·计算机视觉·车载系统·智能硬件
ss.li7 小时前
rppg阅读笔记 2026.10.15
图像处理·python·计算机视觉
词却7 小时前
计算机视觉:YOLO 目标检测
yolo·目标检测·计算机视觉
再__努力1点19 小时前
OpenCV 5 vs OpenCV 4:一次讲清所有差异
人工智能·opencv·计算机视觉
pride.li20 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
kyle~1 天前
实时系统通信抖动(Jitter)
计算机视觉·机器人·接口隔离原则·传感器
xingyuzhisuan1 天前
一文读懂星宇智算 StarVerse-AI 无限画布,AI 视频场景的空间扩展方案
人工智能·计算机视觉
晨间晓1 天前
两张图片哪里不一样?用 OpenCV 做图像差异检测工具
人工智能·opencv·计算机视觉
波力海苔夹心脆6751 天前
VisionPro 与 VisionMaster 对比(上):软件定位、开发环境与核心视觉工具对照
图像处理·算法·计算机视觉·c#·视觉检测·个人开发·vp9