三维表示

三维视觉的起点是如何保存和操作几何。二维图像天然排在规则像素网格上,卷积可以直接利用相邻像素;三维物体却可能来自扫描点、三角面、体积单元或多张投影图,不先决定表示,网络甚至无法统一定义“相邻”和“输出”。一个表示通常需要同时服务于采集、存储、编辑、渲染、动画和学习,因此要在表达能力、内存、查询速度与拓扑约束之间取舍。课件将表示分为显式和隐式两类:前者直接给出组成物体的元素,查询已有几何很快;后者用空间函数定义物体,牺牲直接访问表面的便利来换取连续性和拓扑自由。

常见的三维表示

这些表示的差异可以先概括如下:

表示 拓扑或连续性 主要开销 适合任务
点云 无显式连接,采样离散 O(N)O(N) 个点 扫描、分类、点级分割
网格 显式顶点、边和面 O(V+F)O(V+F) 渲染、动画、表面编辑
体素 规则三维栅格 稠密存储为 O(R3)O(R^3) 三维卷积、占据预测
隐式场 坐标上的连续函数 网络参数与查询次数 连续重建、新视角合成

其中 RR 是每个轴的分辨率。密集体素随分辨率呈立方增长,这一限制会自然引出八叉树、点集和连续隐式场等表示。

点云由一组空间采样点构成,每点至少具有坐标 (x,y,z)(x,y,z),也可附带法向、颜色或其他属性。激光扫描仪、深度相机等设备能直接产生点云;带有局部法向的点常被称为 surfel。它的优点是采集直接、数据结构简单,并能自然保留局部观测;缺点也来自同一处:点之间没有连接关系,表面、内部、遮挡区域和精确边界都需要额外推断。仅有位置时,渲染时甚至无法决定稳定的局部朝向。

网格用顶点及其连接关系表达表面,最常见的是三角网格。与点云相比,边和面的拓扑关系使表面着色、纹理映射、局部编辑与传统图形学算法成为可能;但网格的质量高度依赖连接关系,孔洞、非流形连接和不同分辨率都会增加处理难度。课件还列出细分曲面和 NURBS 一类表示,它们以较粗的控制结构生成光滑表面,适合需要连续几何和可编辑性的场景。

参数曲面把连续参数映射到三维坐标。若

f:XY,XRm,YRn,f:X\rightarrow Y,\qquad X\subseteq\mathbb{R}^{m},\quad Y\subseteq\mathbb{R}^{n},

当曲面嵌入三维空间时,通常有 m=2,n=3m=2,n=3,可写为

s(u,v)=(x(u,v),y(u,v),z(u,v)).s(u,v)=\bigl(x(u,v),y(u,v),z(u,v)\bigr).

Bezier 曲线和张量积 Bezier 曲面是这一思路的典型例子:控制点决定曲线或曲面的形状,多个曲面片可拼成完整物体。它们以紧凑参数描述光滑几何,却需要选择恰当的图元、参数域和拼接方式;任意拓扑、尖锐细节或复杂局部结构往往需要很多片才能表达。

隐式几何不直接列出表面元素,而是定义空间函数 ff,将表面写为零水平集 f(x,y,z)=0f(x,y,z)=0。单位球可由

x2+y2+z2=1x^2+y^2+z^2=1

给出,也可以把左侧移项作为隐式函数。函数的符号还可以区分物体内外;若函数值是到表面的带符号距离,就得到距离场。隐式表示的突出特点是没有固定拓扑,两个形状的并、交、差可通过函数的布尔组合构造,这也是构造实体几何(CSG)的基础。其代价是表面不再显式存在,渲染、网格提取和局部编辑都要通过函数查询完成。

把空间离散成规则网格后,每个格子存一个占据值、距离值或其他属性,就得到体素表示。它把不规则三维几何重新变成类似图像的规则张量,使三维卷积、固定邻域和批量计算都容易实现;代价来自多出的空间维度:分辨率从 NN 增大到 2N2N 时,体素数增长八倍,大量没有表面的空白区域也照样占据内存。Level set 方法不直接把每格判成硬表面,而是在网格上存连续函数的近似,再在相邻格点之间插值寻找零值面;这样能得到亚体素精度,却没有消除底层网格的存储开销。

数据与任务

三维学习常见的数据源包括人工建模资产、扫描数据和多视图图像。课件中的 Princeton Shape Benchmark、ShapeNet、ModelNet、PartNet 等以物体级模型和部件标注为主;ShapeNetCore 含约 5.13 万个模型、55 个类别。Objaverse 将规模扩展到大量网络资产。ScanNet、ARKitScenes、ScanNet++ 更接近真实室内环境,包含 RGB-D 观测、相机位姿及场景级几何。CO3D 和 ObjectScan 则提供围绕物体的多视图观测。不同数据集的采集方式决定了模型能学到什么:合成 CAD 数据具有干净的完整表面,真实扫描则包含噪声、遮挡和不完整观测。

相应任务可大致分为三类。生成模型学习形状先验,用于形状生成、补全和处理;判别模型学习描述符、类别或语义部件;联合模型在二维观测和三维表示之间推理,例如由图像重建形状、由几何支持视图理解。任务目标会反过来决定哪些几何信息值得保留:分类只需全局形状,没必要为每个微小表面都付出存储成本;分割需要局部对应;重建与渲染则必须连续查询几何和外观。表示选择远不止输入格式转换,它会在训练前确定模型能看见什么、容易预测什么。

MVCNN 从多视图切入三维识别。它先从若干相机角度渲染或收集物体的二维图像,让各视图通过共享的二维 CNN 提取特征,再在视图维度做逐元素最大池化,最后接后续网络和分类器。共享权重意味着不同视角被同一套视觉特征处理,最大池化则保留对某个类别最有辨识力的视图响应,因此输出对输入视图顺序不敏感。该方法能够直接复用成熟的二维 CNN 和预训练特征,也避开了稠密三维卷积的高成本;但它依赖相机设置和视图覆盖,投影会丢失深度信息,点云或部分扫描也未必能方便地转成足够好的多视图。

MVCNN 的多视图聚合

离散表示

把三维形状放进体素网格后,可以沿用二维卷积的局部感受野与权重共享。课件以 3D Conv Deep Belief Networks 展示从像素到体素、再到三维卷积特征的做法。它的输入是规则的占据栅格,输出可以是类别、体素标签或新的体素形状。3D-GAN 则把随机形状码送入生成网络,直接输出三维体素;判别器判断生成形状与真实形状,从而将无监督的对抗目标用于形状分布建模。Visual Object Networks 进一步将形状、纹理和视角分别作为可控因素,并通过可微投影把三维结果与二维图像监督联系起来。体素方法结构清晰,生成、插值和卷积都很直接,但分辨率与显存的立方关系仍是主要瓶颈。

八叉树针对这一瓶颈作了稀疏化处理。三维物体的信息通常集中在二维表面附近,均匀体素却为整个体积支付成本;八叉树从一个大立方体开始递归八分,只在靠近表面或包含细节的区域继续划分,远离表面的空区域保持为粗节点。OctNet、O-CNN 等方法据此把算力分配给几何复杂处,在相同内存下获得更高有效分辨率。这个收益以规则性为代价:邻域查询和卷积不再能用固定数组索引完成,网络必须处理层级坐标和不均匀分辨率。

PointNet 直接以无序点集为输入,省去了体素化和网格连接。设点云为 (x1,,xn)(x_1,\ldots,x_n),对任意排列 π\pi,目标函数应满足

f(x1,,xn)=f(xπ(1),,xπ(n)).f(x_1,\ldots,x_n)=f(x_{\pi(1)},\ldots,x_{\pi(n)}).

PointNet 先用共享的逐点网络 hh 映射每个点,再用对称聚合函数 gg 汇总,最后由 γ\gamma 产生分类或分割结果:

f(x1,,xn)=γ(g(h(x1),,h(xn))).f(x_1,\ldots,x_n)=\gamma\Bigl(g\bigl(h(x_1),\ldots,h(x_n)\bigr)\Bigr).

PointNet 的集合建模

最大池化和求和都满足对称性;课件采用的最大池化会从每个特征维度选择最强响应,因而无论点按什么顺序输入,同一组局部模式都会产生相同全局表示。这解决了点集没有固定排列的问题,也允许处理不同数量的采样点;但最大池化只保留每维最强证据,许多点之间的相对布局会在聚合时丢失。对于物体分类,这种全局摘要往往足够;对于部件分割,模型还要把全局特征回传给每个点,与局部特征一起判断“这个点属于什么部件”。纯逐点处理仍没有显式邻域,局部几何、点密度变化和细粒度边界需要图结构或层级邻域补足。

图网络把点视为节点,把近邻关系写为边,通过边上的信息传递更新节点表示,因而能补足无序集合中缺失的局部连接。无论采用点云还是图网络,重建输出仍是一个无序集合,训练时需要使用对点排列不敏感的集合距离,而不能逐位置比较两个点列表。

常用的 Chamfer Distance 对两个点集 P,QP,Q 分别寻找最近邻:

CD(P,Q)=1PpPminqQpq22+1QqQminpPqp22.\operatorname{CD}(P,Q)= \frac{1}{|P|}\sum_{p\in P}\min_{q\in Q}\lVert p-q\rVert_2^2 +\frac{1}{|Q|}\sum_{q\in Q}\min_{p\in P}\lVert q-p\rVert_2^2.

第一项保证 PP 中每个预测点都能在 QQ 找到邻近解释,防止生成点远离目标;第二项反向约束 QQ 中每个目标点都被预测覆盖,避免只生成物体的一小部分。两个方向共同使用后仍无需为点建立固定编号,因此适合无序集合;最近邻却允许多个点匹配同一目标,对局部采样密度、全局一一对应和表面拓扑并不敏感。PointNet++ 等层级方法则在不同半径的局部邻域内反复采样、分组和聚合,使网络同时获得细粒度几何与全局形状信息。

AtlasNet 从点集生成转向参数化解码。它将一个形状的潜向量与二维参数域中采样的点一起输入 MLP,输出对应的三维点;多个 MLP 分别生成多个曲面片,如同把二维布料铺到三维表面上。参数域给输出施加了光滑的局部结构,能够生成连续表面,而片数和片之间的衔接决定了对复杂拓扑与细节的适应能力。

神经场

深度隐式表示将坐标查询交给神经网络。给定三维位置 xx 和一个形状或场景的条件编码 zz,网络预测占据概率、带符号距离或其他场值;满足特定阈值或零值的点构成表面。网络保存的是“任意坐标处是什么”这条规则,而非有限分辨率下所有格子的答案,因此 Occupancy Networks、DeepSDF、Deep Level Sets 能在训练后以更密的坐标重新查询,表达连续表面和复杂拓扑。分辨率并未免费消失:训练必须在空间中选取足够有信息量的点,提取高精度表面也要进行大量查询,漏采的薄结构和高频细节仍可能学不到。

其中占据网络学习 oθ(p,z)[0,1]o_\theta(p,z)\in[0,1],用概率阈值区分内外;DeepSDF 学习 fθ(p,z)Rf_\theta(p,z)\in\mathbb{R},函数正负表示内外,fθ(p,z)=0f_\theta(p,z)=0 给出表面。二者都可在规则网格上密集查询,再用 Marching Cubes 提取三角网格。连续函数摆脱了固定输出分辨率,却把成本转移到坐标采样与网络查询,高精度或大场景仍需要分层采样、空间索引等加速方法。

NeRF 将隐式场扩展为可微的场景表示与新视角合成。网络以空间位置和观察方向为输入,输出该处的体密度和辐射颜色。相机中心为 oo、射线方向为 dd 时,一条像素射线写为

r(t)=o+td.r(t)=o+td.

沿射线采样后,颜色可由离散体渲染近似为

ci=1nTiαici,Ti=j=1i1(1αj).c\approx\sum_{i=1}^{n}T_i\alpha_i c_i, \qquad T_i=\prod_{j=1}^{i-1}(1-\alpha_j).

其中 cic_i 是第 ii 个采样点的颜色,αi\alpha_i 表示光线在该处终止的程度,TiT_i 是到达该点前一路没有被前景挡住的概率。两者相乘后,靠前且不透明的点自然获得大权重,后面的点则被透射率压低,这正是遮挡在可微公式中的体现。训练时,从已知相机位姿的图像发射射线,渲染颜色与真实像素比较;体渲染对颜色和密度可导,即使没有逐点三维真值,多视图像素误差也能反向确定哪里应有密度、那里应呈现什么颜色。密度把几何和可见性联系起来,方向相关颜色则描述反光等视角变化。NeRF 以渲染监督绕过昂贵三维标注,却让每个像素都要沿射线反复查询网络,训练与显示成本较高,也不会自动产生可编辑的语义部件。

NeRF 的体渲染过程

3D Gaussian Splatting 保留体渲染的透明度合成,却把“沿每条射线反复询问 MLP”改成一组可直接投影的三维高斯。每个高斯只放在可能贡献图像颜色的区域,并带有空间范围、透明度和颜色。重建从相机标定产生的稀疏点开始,交替优化高斯参数与数量;渲染时把可见高斯投到图像平面,按深度进行 splatting 合成。显式图元可以被排序、裁剪并交给高度优化的光栅化流程,避免在大量空白空间做神经查询,因而训练和实时显示更快。速度来自针对渲染任务的表示选择:这些高斯并不组成闭合表面或部件图,几何测量、编辑、重光照和结构理解仍需额外约束。

每个高斯通常包含中心 μ\mu、由尺度与旋转参数化的协方差 Σ\Sigma、不透明度和用球谐函数表示的方向相关颜色。优化过程中会根据梯度对欠拟合区域进行 densification,复制或分裂高斯,并裁剪透明度过低的高斯。屏幕空间投影与按深度的 alpha compositing 带来实时渲染优势,但高斯数量会增加显存,占据错误位置的“漂浮物”也会影响几何质量。

3D Gaussian Splatting

结构化形状

上述表示着重几何和外观,却没有直接说明“哪个部分连接哪个部分”。当目标是生成可编辑物体、理解部件功能或复用已有形状时,课件转向结构化表示。分割几何先把形状划分为若干部分,再为每部分使用一个非结构化表示;它便于复用已有生成器,但若独立生成各部分,原子部件的完整性和连接关系无法保证。

体积基元用长方体等简单体积块表示部件,参数少、结构清楚,适合粗粒度布局,却难以覆盖自由曲面。部件级隐式函数让每个部件拥有自己的连续场,能表达更复杂的局部形状,但仍需规定部件之间如何相接。关系图以节点表示部件、边表示连接或相邻关系,可以显式约束连通性;图的生成本身随之成为问题。层级图进一步同时记录父子层次和同层关系,使每一层的图更简单;标注与推理的代价也更高。StructureNet 以图卷积编码、解码不同度数的结构节点,体现了将层级关系纳入生成过程的思路。

结构化三维表示

三维表示没有普适最优解。多视图与点集方法适合直接利用观测,体素与八叉树强调局部规则计算,隐式场和神经渲染提供连续查询与高质量外观,结构化表示则为部件层面的推理和编辑提供约束。任务所需的输出、数据来源与计算预算共同决定选择。