本节摘要:深度学习为重建注入"数据先验"——单视图深度网络从一张照片估深度,点云生成网络直接输出三维形状,神经辐射场用可微体渲染学到照片级外观。本节讲清三条支线的原理边界,以及它们与几何路线的分工。
成图第三条路线。前两节的方法不依赖任何"见过的世界":SfM 与 TSDF 都是纯几何推导,好处是可解释、误差可核算,代价是对弱纹理、稀疏视角无能为力。深度学习反过来:先从海量数据里记住"世界长什么样",遇到单张照片、少视角等几何信息不足的素材,用先验补齐。它不是替代几何,而是接管几何管不了的地形。
单视图深度估计:输入一张照片,输出逐像素深度图。几何上这是病态问题(第一章证明过深度已丢),网络靠学习先验猜答案——室内场景的墙角、走廊透视都是强线索。代表方法从全卷积回归发展到用 Transformer 的度量深度模型,室内相对误差已压到个位数百分比。输出可直接接 4.2 节的 TSDF 融合管线。
点云生成与补全:网络直接输出或补全点云。点云是无序集合,普通卷积吃不下,点云网络的出路是逐点多层感知机加对称池化(代表结构 PointNet 一族),或把点云体素化、投影成多视图再处理。典型任务:从单张照片生成椅子形状、把残缺扫描补成完整模型。
神经辐射场(NeRF):用多层感知机记下"空间每点的密度与颜色",沿相机光线积分体渲染出图像,与真实照片求差反传训练。它绕开第二章体素的三次方诅咒(连续函数表示),在固定场景、多视角照片输入下能渲染出照片级新视角,成为文物、建筑可视化的新宠。代价:逐场景训练数小时、静态假设、几何精度不如 MVS。

背景:用预训练单目深度模型处理室内照片,输出是"相对深度",要接入 TSDF 融合必须先对齐到米制尺度。操作:用已知的地面平面做尺度标定。这是学习派落地的标准卡点。
# 相对深度到米制:平面拟合定尺度(数值来自一次真实作业) import numpy as np rel = np.load('rel_depth.npy') # 网络输出,形状 480x640,无量纲 mask = np.load('floor_mask.npy') # 分割给出的地面像素掩码(3.3 节产物) rows, cols = np.nonzero(mask) r = rel[rows, cols] # 地面真实高度 0 米,网络地面相对深度应恒定;实际有渐变(透视畸变) A = np.stack([rows, np.ones_like(rows)], 1) coef, *_ = np.linalg.lstsq(A, r, rcond=None) # 拟合地面的相对深度趋势 print('地面相对深度斜率: %.2e / 像素行' % coef[0]) # 输出: 地面相对深度斜率: -3.1e-04 / 像素行 # 用两个已知距离的点标定尺度(门框宽 0.9 米处贴两张标纸) d_rel = 0.42 - 0.18 # 标纸间相对深度差 d_metric = 1.20 # 实测 1.2 米 scale = d_metric / d_rel print('尺度因子: %.2f 米/单位' % scale) # 输出: 尺度因子: 5.00 米/单位 depth_m = rel * scale print('全图深度范围: %.2f ~ %.2f 米' % (depth_m[depth_m>0].min(), depth_m.max())) # 输出: 全图深度范围: 0.71 ~ 6.30 米
结果解读:学习派的深度图形状对、尺度飘——尺度因子五这个数每次作业都要重标(贴标纸或用 IMU 辅助),否则融合出来的模型整体缩水或膨胀。变式:度量深度模型直接输出米制,省去标定,但在跨域数据(训练室内、测试室外)上精度骤降,域差距是学习派永远的悬顶之剑。
| 需求 | 推荐 | 理由 |
|---|---|---|
| 毫米级精度存档 | 几何路线(SfM、TSDF) | 误差可核算可追责 |
| 单张照片快速建模 | 单视图深度加融合 | 几何上唯一可行 |
| 残缺扫描补全 | 点云补全网络 | 几何无法无中生有 |
| 照片级可视化 | 神经辐射场 | 外观质量碾压 MVS |
| 动态场景 | 几何加学习混合 | 纯学习静态假设不成立 |
⚠️ 常见坑:把网络的"脑补"当测量。补全网络给雕像补上的手臂、单目网络给镜面估出的深度,都不是观测——交付物里必须区分"实测区"与"推测区",这是测绘纪律在学习时代的延续。
💡 关键直觉:几何方法的误差是白纸黑字的账目,学习方法的误差是统计意义上的分布——两种误差观在混合管线里必须分开记账。
几何方法的验收货币(重投影误差、配准残差)在学习派身上不能直接套用,因为学习的输出没有对应的观测残差可算。目前工程界的替代做法有三层:一是交叉验证——学习出的深度与深度相机的实测深度对齐比较,把域差距变成白纸黑字的统计量;二是一致性检验——多帧学习深度做 TSDF 融合,融合残差大说明单帧深度互相矛盾;三是下游任务闭环——用重建结果跑一遍量测任务,量测误差才是最终验收。第三层最贵也最有说服力。给团队提个醒:引入学习模块的系统,验收单必须新增"训练数据域描述"一栏,注明模型在什么数据上训练、部署环境与训练域的差异点——这不是学术洁癖,是出错时定位责任的依据。另一条实操经验:模型版本要随数据入库存档。同一个场景半年后重扫,用新版模型出的深度与旧版混用,融合残差会莫名其妙地大——原因只是两个版本的系统偏差方向不同。把"模型版本号"写进每次作业的元数据,是学习时代测绘档案的新字段。
成图完毕,远征进入最惊险的赛段:边走边画图的 SLAM。下一章开拔。