论文名片
| 项目 | 内容 |
|---|---|
| 论文名 | 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 对应的几何关系。
为什么选天底视角,不选天花板视角
- 墙脚线连续稳定:墙和地板的交线是连续的闭合线条,直接对应户型轮廓,几何关系最简单;
- 遮挡相对更少:虽然有椅子、桌子挡地板,但大件家具(沙发、柜子)通常靠墙放,中间区域的墙脚线大多能看到;
- 单张覆盖范围大:一个全景的天底视角,能覆盖相机周围好几米的地板区域,客厅里拍一张就能看到大部分墙脚。
怎么来的:从天底投影变换生成
- 输入一张普通的 360° 平视全景图,通过几何坐标变换,就能算出对应的天底俯视图:
- 全景图每个像素对应一个空间方向;
- 已知相机高度(比如 1.6 米),把每个像素对应的射线投射到地板平面上,得到对应的平面坐标;
- 通过插值计算,生成一张正方形的地板俯视图,就是天底图。
举个例子:就像你站在原地转一圈拍了全景,现在把画面 "掰" 成低头看地的样子,就能看到脚下一圈地板的完整俯视图。
三、核心思路:两步走 + 一个关键洞察
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 个房间的户型图,在合成和真实数据集上都超越了需要密集点云的对手。
四条可以带走的思路:
- 换一个"中间目标",难题可能自动消失。 直接分割带家具的 RGB 图很难;改成预测"空房间的深度",难度骤降。当你觉得任务太难时,先问问:是不是"直接求解"的路径本身就选错了? 有时候加一个"想象出来的中间态"反而更近。
- 中间表示的"粒度"要精挑细选。 1D 向量太粗、3D 点云太贵,2D 俯视图正好 ------信息够用、算力友好。选表示时,不要只看"信息量最大",要看"够用且最省"。
- 多视角融合的价值在"互补缺口",不在"重复确认"。 主卧看不清的角,次卧看得清------Transformer 的作用是让信息富余的地方去补信息缺失的地方 。做多源融合时,先想清楚:每个源缺什么、谁能补上。
- 领域知识可以用"轻量模块+预训练"低成本注入。 那个 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 分数 |