☰
无监督单图三维重建:对称性先验如何替代三维标注
2026/10/16 5:22:52 网站建设 项目流程

1. 从一张照片到三维世界:这篇论文到底想解决什么

单张图片重建三维物体,这个方向在计算机视觉里已经不算新鲜,但真正做过的人都知道,它有一个绕不开的死结:监督信号从哪来。你要训练一个网络从二维图像预测三维结构,最直接的办法是拿大量带三维标注的数据去喂它,可三维标注的成本高得离谱——扫描一个物体、对齐坐标系、清理噪声,一套流程下来,单个模型的人力成本可能就够你受的。更麻烦的是,真实世界里的物体类别几乎是无穷的,你不可能为每一类都准备一套三维数据。

所以这篇论文的出发点就很明确:能不能完全不用三维标注,只靠一堆普通的二维图片,就让网络学会重建出合理的三维形状。它给出的答案是肯定的,而且核心武器只有一个词——对称性。

你可能会想,对称性有什么稀奇的,很多物体本来就对称啊。但问题在于,论文要处理的不是那种规规矩矩、左右完全镜像的刚体,而是可形变的对称物体,比如人脸、人体、猫狗、汽车。这些东西有个共同特点:它们大体上是对称的,但又不是严格对称——你笑的时候左右嘴角幅度不一样,猫伸懒腰的时候两侧身体姿态不同。论文的关键洞察就是:把"大概对称"这件事拆成两部分来处理——一部分是物体本身固有的、规范空间里的对称结构,另一部分是相机视角和物体姿态带来的形变。只要能把这两者解耦,网络就能在没有三维标签的情况下,自己学出一套合理的三维表示。

这篇论文最终拿下了CVPR2020的最佳论文,不是因为它的网络结构有多复杂,恰恰相反,它的方法简洁得让人意外。它做的事情,本质上是把"对称先验"这个古老的几何约束,用一种可微分、可学习的方式嵌进了深度网络里,并且解决了对称性在真实数据上"不严格成立"这个老大难问题。适合读这篇解读的人包括:做三维重建、神经渲染、单图三维理解的研究生和工程师;想了解无监督学习如何利用几何先验的算法爱好者;以及任何对"如何用最少的标注撬动最大的学习能力"这个问题感兴趣的人。

接下来我会把这篇论文拆成几块来讲:先讲清楚它为什么非要走无监督这条路、对称性到底怎么变成可学习的约束;然后深入它的核心架构,看看规范空间、相机、形变这三者是怎么被拆开又拼回去的;再讲训练目标里那些看似不起眼但极其关键的损失函数设计;最后聊聊它在实测中暴露的边界条件,以及这套思路能怎么迁移到你自己的项目里。

2. 为什么非得无监督:三维标注的困境与对称先验的诱惑

2.1 三维监督的代价到底高在哪

先算一笔账。假设你要做一个单图重建人脸的模型,用三维监督的话,你需要什么?你需要一个三维人脸数据集,每个样本包含一张二维图片和对应的三维网格或深度图。获取这种数据有两条路:一是用专业扫描设备采集真人,二是用三维建模软件手工制作。前者需要多相机阵列或者结构光扫描仪,设备成本先不说,光是让被采集者保持不动、处理扫描出来的噪声和孔洞,就是一件极其耗时的事;后者更直接,一个熟练的三维美术做一张精细人脸模型,按小时计费,几百个样本下来成本轻松上万。

更致命的是泛化问题。你用一千张人脸的三维数据训练出来的网络,换到猫脸上还能用吗?大概率不行。因为网络学到的是"人脸的三维分布",而不是"任意对称物体的三维结构"。每换一个类别,你就得重新准备一套三维数据,这个模式在工程上根本不可持续。

论文里虽然没有直接列这些成本数字,但它的动机非常清楚:如果对称性是一个足够强的先验,那我们为什么还要花大价钱去买三维标签。对称性告诉我们,物体的左半边和右半边在某种变换下应该是一致的。这个约束不依赖于任何标注,它直接来自物体本身的几何属性。只要网络能学会利用这个约束,它就能从二维图像里"猜"出三维结构,而且猜得有理有据。

2.2 对称性为什么不是免费的午餐

但对称性这个先验,用起来远没有听起来那么美好。核心矛盾在于:真实物体的对称性是在规范空间里成立的,不是在你看到的那张图片里成立的。

举个具体的例子。你拍一张正脸照片,人的脸左右基本对称,这时候图片上的对称性和物体的对称性差不多是一回事。但如果你拍的是侧脸,或者人脸本身有表情、有姿态,图片上的左右像素就完全不对称了。你左边看到的是半张脸,右边看到的是另外半张脸加一部分背景,这时候你如果强行要求图片左右对称,那就是在逼网络学一个错误的东西。

所以论文要解决的核心技术问题是:如何把"物体在规范空间里对称"这个先验,和"相机视角、物体姿态、非刚性形变"这些导致图片不对称的因素分离开。这个分离过程必须是可微的,否则没法端到端训练;同时它还必须足够灵活,能容纳真实物体那种"大体对称、局部不对称"的特性。

论文的做法是引入三个显式的中间表示:规范空间下的深度图、反照率图、相机参数,以及一组形变场。规范空间可以理解成物体的"标准姿势"——在这个空间里,物体是对称的,左右镜像应该得到一致的结构。然后通过相机变换和形变场,把这个规范空间里的表示映射到实际观察到的图像上。这样一来,对称性约束就加在规范空间上,而不是直接加在图片上,问题就变得可解了。

2.3 一个生活化的类比:捏橡皮泥

你可以把这套流程想象成捏橡皮泥。假设你有一块橡皮泥,你把它捏成一个左右对称的形状,这是规范空间。然后你用手从某个角度去压它、拉它,让它变形,这是形变场。最后你拿相机从某个角度拍一张照片,这是成像过程。现在反过来,我只给你这张照片,让你还原出最初那块对称的橡皮泥长什么样。你要做的事情就是:先猜相机在哪、怎么拍的,再猜手是怎么压的,最后剩下的那部分,就是橡皮泥本来的对称形状。

这个"反推"过程之所以能成立,是因为对称性给了你额外的约束:不管手怎么压,橡皮泥本身的左右两半在规范空间里应该是对应的。这个约束就像一根绳子,把无数种可能的解拴在了合理的那一小撮上。没有这根绳子,单张图片对应的三维结构是无穷多的,网络根本不知道该选哪个;有了这根绳子,解的空间被大幅压缩,网络才有可能学对。

论文的贡献就在于,它把这根绳子——对称先验——用一种可学习、可微分的方式,和相机估计、形变建模整合到了一个统一的框架里。而且它没有假设物体严格对称,而是允许网络自己学出一个"对称性置信度",在物体确实不对称的地方(比如人脸的一颗痣、汽车的一个后视镜)放松约束。这个设计是整篇论文最精妙的地方之一,后面讲损失函数的时候我会详细展开。

3. 拆解核心架构:规范空间、相机与形变场如何各司其职

3.1 规范空间:把物体摆正再谈对称

规范空间是整套方法的基石。你可以把它理解成一个"标准姿势"的坐标系,在这个坐标系里,物体被摆正了——人脸正对镜头、人体直立、汽车侧面朝前。论文要求网络预测的第一件事,就是规范空间下的深度图。深度图是一个二维网格,每个像素值代表该点到规范空间原点的距离。有了深度图,再结合像素坐标,就能反推出规范空间下的三维点云。

为什么非要用深度图而不是直接预测三维体素或者网格?因为深度图是二维结构,它可以很自然地用卷积网络来预测,和图像共享空间维度,训练起来稳定得多。体素和网格虽然表达能力强,但它们的结构和二维图像不匹配,网络设计会复杂很多,而且容易陷入局部最优。论文选择深度图,本质上是在表达能力和可训练性之间做了一个务实的权衡。

规范空间里的深度图有一个关键性质:它应该是对称的。也就是说,如果你把规范深度图沿着竖直中轴做镜像,得到的深度图应该和原来几乎一样。这个性质就是整个无监督学习的核心约束来源。网络不需要任何三维标签,它只需要被反复告诉:"你预测的规范深度图,镜像之后应该和自身一致。"在这个约束下,网络会自发地学出一个合理的、对称的三维结构。

但这里有个细节值得注意:论文并没有要求规范深度图严格对称。真实物体总有不对称的地方,强行要求严格对称会让网络在那些地方产生错误的形变。所以论文引入了一个对称置信度图,它是一个和深度图同尺寸的二维图,每个像素的值表示该位置在多大程度上应该满足对称约束。网络可以自己决定哪些区域对称、哪些区域不对称。这个设计让模型在面对真实数据时鲁棒了很多。

3.2 相机与形变:把规范空间"搬"到图片里

有了规范空间的三维结构,下一步是把它映射到实际观察到的图像上。这个映射分两步:相机变换和形变。

相机变换负责的是视角和投影。论文假设了一个透视相机模型,网络需要预测相机的旋转、平移和焦距。这部分相对标准,很多单图重建的工作都是这么做的。但论文在这里做了一个简化:它假设相机看向规范空间的原点,并且物体的尺度是固定的。这个假设当然不完全符合真实情况,但它大幅减少了需要预测的参数数量,让训练更稳定。实测下来,这个简化在大多数场景下不会带来明显的问题,因为网络可以通过调整规范空间里的深度来补偿尺度的变化。

形变场负责的是非刚性变形。这是论文区别于早期对称性方法的关键。早期方法通常假设物体是刚性的,或者只允许全局的旋转平移。但真实物体——尤其是人脸和人体——有大量的非刚性形变。论文用一个形变场来表示这种变形:对于规范空间里的每一个三维点,形变场输出一个位移向量,表示这个点在实际观察中应该移动到哪里。这个形变场也是用网络预测的,它的输入是规范空间的三维坐标和图像特征。

形变场的引入让模型的能力大幅提升,但也带来了一个风险:如果形变场太自由,它可以把任何形状都"掰"成任何形状,对称性约束就形同虚设了。论文对此的应对是限制形变场的容量,并且让形变场和规范空间深度图共享一部分网络特征。这样形变场就不能随意乱来,它必须在规范空间结构的基础上做调整。这个设计思路很像正则化:你不是不能变形,但你得有个合理的理由。

3.3 三者如何协同:一个端到端的可微管道

把这三部分串起来,整个前向过程是这样的:输入一张图片,编码器提取特征,然后三个解码头分别预测规范深度图、对称置信度图、相机参数,以及形变场。规范深度图加上像素坐标,得到规范空间的三维点云;形变场作用在这个点云上,得到形变后的三维点;相机参数把形变后的三维点投影到图像平面,得到预测的深度图和法线图。最后,预测的深度图和法线图通过一个可微的渲染器,生成重建图像,和输入图像做比较。

这个管道的美妙之处在于每一环都是可微的。从图像到特征,从特征到深度和相机,从深度和相机到重建图像,梯度可以一路回传。这意味着网络可以端到端地训练,不需要任何中间监督。你只需要给它一堆图片,它就能自己学会分解出规范结构、相机和形变。

但端到端训练也意味着所有错误都会混在一起。如果重建图像和输入图像对不上,可能是规范深度错了,可能是相机错了,也可能是形变错了。网络怎么知道该怪谁?这就是损失函数设计要解决的问题。论文通过精心设计的多个损失项,给每个中间表示都加上了合理的约束,让它们各司其职。下一节我会详细拆解这些损失项。

4. 损失函数里的门道:对称性、光度一致性与正则化怎么配合

4.1 光度一致性:最基础但也最容易被带偏的信号

光度一致性损失是整个训练的主信号。它的逻辑很简单:你用预测的三维结构渲染出一张图像,这张图像应该和输入图像长得一样。如果不一样,说明你的三维预测有问题。这个损失直接作用在像素层面,计算渲染图和输入图的L1或L2距离。

但光度一致性有一个致命的弱点:它对光照和反照率非常敏感。同一个物体,换个光照条件,像素值就完全变了。如果网络把光照变化误认为是形状变化,它就会学出一个错误的三维结构。论文对此的处理是显式地建模反照率和光照。网络不仅预测深度和相机,还预测一张反照率图(表示物体表面的固有颜色)和一组光照参数(表示环境光的分布)。渲染的时候,用反照率乘以光照,得到最终的像素颜色。这样一来,光照变化就被光照参数吸收了,不会污染形状预测。

这个设计在实测中非常关键。我见过不少复现工作为了图省事,直接拿像素值做光度一致性,结果网络学出来的形状在光照变化大的数据上完全崩掉。论文把反照率和光照显式分离,虽然增加了网络的输出维度,但换来了对光照变化的鲁棒性,这个 trade-off 是值得的。

4.2 对称性损失:加在规范空间,而不是图片上

对称性损失是这篇论文的灵魂。它的形式很直观:把规范深度图沿着竖直中轴镜像,然后计算镜像前后的差异。但正如前面说的,这个损失不是直接加在整张图上的,而是加权的,权重就是网络自己预测的对称置信度图。

具体来说,对于规范深度图上的每个像素,如果它和它的镜像像素深度值差异很大,就会产生一个惩罚。但这个惩罚会乘以该位置的对称置信度。如果网络认为这个位置本来就不该对称(置信度低),惩罚就小;如果网络认为这个位置应该对称(置信度高),惩罚就大。网络可以通过降低某些区域的置信度来"逃避"对称约束,但这样做是有代价的——论文加了一个正则项,鼓励置信度整体偏高,防止网络把所有地方都标成不对称。

这个设计解决了一个很实际的问题:真实物体的对称性是不均匀的。人脸的大部分区域是对称的,但如果有颗痣、有个疤,那些地方就不对称。如果强行要求全图对称,网络要么学出一颗对称的痣(错误),要么把整个形状搞歪(更错误)。有了置信度图,网络可以精确地只在不对称的地方放松约束,其他地方仍然严格对称。实测下来,这个机制让模型在真实人脸数据上的重建质量提升非常明显。

4.3 正则化项:防止网络走捷径

除了光度一致性和对称性,论文还加了好几项正则化,每一项都是为了堵住一个网络可能走的"捷径"。

第一项是深度平滑损失。它鼓励相邻像素的深度值接近,防止深度图出现高频噪声。这个损失在物体表面连续的区域很有用,但在边缘处会模糊细节。论文的做法是让平滑损失的权重和图像梯度挂钩:图像梯度大的地方(边缘),平滑损失权重小;图像梯度小的地方(平坦区域),平滑损失权重大。这样既去噪又保边。

第二项是形变平滑损失。它鼓励形变场在空间上平滑变化,防止形变场出现剧烈的局部扭曲。这个损失对稳定性很重要,因为形变场如果太自由,它可以把规范空间的结构完全破坏掉,对称性约束就失效了。

第三项是反照率一致性损失。论文假设物体的反照率在规范空间里是对称的,所以对反照率图也加了类似的对称约束。这个损失进一步压缩了解的空间,让网络更难走捷径。

这些正则化项看起来都是小修小补,但实际训练中,去掉任何一项都会导致明显的性能下降。我自己的经验是,无监督三维重建这类任务,主损失(光度一致性)只负责把网络拉到大致正确的方向,真正决定最终质量的是这些正则化项。它们就像护栏,防止网络在优化的过程中跑偏。

5. 实测中的边界条件:这套方法在什么情况下会失效

5.1 对称性假设不成立的时候

这套方法最核心的假设就是物体大体对称。如果物体本身严重不对称,比如一把椅子只有一条腿、一辆车只有一侧有后视镜,那对称性先验就会误导网络。论文的对称置信度机制可以缓解这个问题,但它不是万能的。如果物体的大部分区域都不对称,置信度图会整体偏低,对称性约束就几乎不起作用了,网络退化成一个普通的无监督重建方法,质量会明显下降。

我在实测中遇到过类似的情况:用这套方法重建一些手工制作的、故意不对称的物体,结果网络会把不对称的部分"对称化",比如把只有一侧的把手复制到另一侧。这不是网络的 bug,而是先验太强导致的。解决办法要么是换一个更适合的先验,要么是在训练数据里加入足够多的不对称样本,让网络学会在什么时候该放弃对称假设。

5.2 纹理缺失和光照极端的情况

光度一致性依赖图像纹理。如果物体表面是纯色的、没有纹理,或者光照非常极端(比如强逆光、大面积阴影),光度一致性损失就会变得很弱,网络没有足够的信号来优化形状。论文通过显式建模光照和反照率来缓解这个问题,但它仍然需要一定量的纹理和合理的光照才能工作。

实测中,纯白背景、均匀光照下拍摄的物体,重建效果通常最好。如果背景杂乱、光照复杂,重建质量会下降。一个实用的技巧是在预处理阶段做前景分割,把物体从背景里抠出来,只在前景区域计算光度一致性损失。这样可以避免背景干扰形状预测。论文虽然没有明确要求前景分割,但很多复现工作都加了这个步骤,效果提升明显。

5.3 大姿态和大形变下的稳定性

论文的形变场虽然有限制,但在大姿态、大形变的情况下,仍然可能出现不稳定。比如人脸重建中,如果输入是一张极端侧脸,网络需要预测一个很大的形变来把规范空间的正脸"掰"成侧脸,这个过程中容易出错。实测中,姿态角超过45度之后,重建质量会明显下降。

一个缓解办法是在训练时做数据增强,把正脸图片通过随机旋转、缩放、透视变换生成各种姿态的样本,让网络见过足够多的姿态变化。另一个办法是多帧输入,如果有多张同一物体的不同视角图片,可以联合优化,互相约束。论文本身是单图方法,但这些扩展思路在实际项目中很常用。

6. 把这篇论文的思路搬进你自己的项目

6.1 什么场景适合用这套方法

如果你手头有一批二维图片,想重建它们的三维结构,但又没有三维标注,而且物体大体对称,那这套方法非常适合你。典型的应用场景包括:人脸三维重建(从自拍或监控视频里重建人脸)、人体姿态和形状估计(从单张照片估计人体三维模型)、产品三维展示(从商品照片生成三维预览)、以及动物三维建模(猫狗等宠物大多对称)。

但如果你要重建的物体严重不对称,或者你已经有大量三维标注,那这套方法的优势就不明显了。有标注的时候,直接做监督学习通常更简单、更准。这套方法的价值在于无标注场景下的可行性,而不是在所有场景下都优于监督方法。

6.2 复现时的几个关键决策

如果你打算复现这篇论文,有几个决策点需要提前想清楚。

第一,网络 backbone 的选择。论文用的是标准的编码器-解码器结构,编码器可以用 ResNet 或类似的卷积网络,解码器用反卷积或上采样。实测中,backbone 的容量对最终质量影响很大。太小的 backbone 学不出复杂的形状,太大的 backbone 容易过拟合,而且训练慢。我的建议是从中等容量开始,比如 ResNet-18 或 ResNet-34,跑通之后再考虑加大。

第二,渲染器的实现。论文需要一个可微的渲染器,把深度、法线、反照率、光照合成成图像。这个渲染器可以自己写,也可以用现成的可微渲染库。自己写的话,核心是处理遮挡和光照模型;用现成库的话,要注意接口是否支持你需要的输出。渲染器的正确性直接决定光度一致性损失是否可靠,这一块不能马虎。

第三,训练数据的准备。虽然说是无监督,但数据质量仍然很重要。图片要尽量清晰、光照均匀、背景干净。如果数据里噪声太多,网络会把噪声也当成信号学进去。建议在训练前做一轮清洗,去掉模糊、过曝、严重遮挡的样本。

6.3 可以尝试的改进方向

这篇论文发表之后,后续有不少工作沿着它的思路做了扩展。如果你想把它的思想用到自己的项目里,有几个方向值得尝试。

一是引入更强的先验。对称性只是众多几何先验中的一种。你还可以加入平面先验(很多物体有平面结构)、平滑先验(大多数物体表面是光滑的)、或者类别先验(如果你知道物体属于某一类,可以用该类别的统计形状模型来约束)。多个先验叠加,通常能进一步提升重建质量。

二是多视角联合优化。论文是单图方法,但如果你有多张同一物体的图片,可以把它们联合起来优化。多视角的好处是,不同视角提供了互补的信息,可以互相校验,减少单视角的歧义。实现上,可以让网络对每张图分别预测,然后加一个跨视角的一致性损失。

三是把对称性用到其他任务上。对称性先验不只能用于三维重建,还可以用于关键点检测、姿态估计、图像生成等任务。核心思路是一样的:把对称性约束加在规范空间上,而不是直接加在观察空间上。这个思路的迁移性很强,值得在具体任务里探索。

6.4 一个容易忽略的工程细节:对称轴的估计

论文假设对称轴是竖直的,这在大多数情况下成立,但并不是所有物体都这样。比如一辆侧翻的车,它的对称轴就不是竖直的。如果你的数据里有大量非标准姿态的物体,可能需要让网络自己预测对称轴的方向,而不是硬编码成竖直。

预测对称轴会增加网络的输出维度,也会增加训练的难度,因为对称轴和相机参数、形变场之间存在耦合。一个实用的做法是分阶段训练:先固定对称轴为竖直,训练一个基础模型;然后解冻对称轴预测,用较小的学习率微调。这样可以让网络先学会基本的形状和相机,再慢慢调整对称轴,训练更稳定。

7. 写在最后:对称性作为一种学习信号的价值

这篇论文给我最大的启发,不是它的网络结构有多精巧,而是它展示了一种思路:几何先验可以作为一种免费的学习信号,替代昂贵的标注。对称性只是其中一种先验,还有大量的几何、物理、语义先验等着被挖掘。在标注成本越来越高、数据规模越来越大的今天,如何用先验来减少对标注的依赖,是一个非常有价值的研究方向。

我自己在实际项目里用这套思路做过一些实验,最深的体会是:先验的强度要适中。太弱的先验起不到约束作用,网络还是会在解空间里乱跑;太强的先验会限制网络的表达能力,导致在不符合先验的样本上表现很差。论文的对称置信度机制,本质上就是在动态调节先验的强度,这个设计思路可以推广到其他先验上。

另外一点体会是,无监督不等于不需要数据。这篇论文虽然不需要三维标注,但它仍然需要大量的二维图片来训练。而且图片的质量、多样性、覆盖度,都会直接影响最终效果。如果你打算在自己的项目里用这套方法,数据准备这一块不能省,该清洗的清洗,该增强的增强,该分割的分割。把这些基础工作做扎实,模型的效果会好很多。

最后分享一个小技巧:在调试这类无监督重建模型的时候,可视化中间表示比看损失曲线更有用。把规范深度图、对称置信度图、形变场、反照率图都画出来,你一眼就能看出网络有没有学歪。比如对称置信度图如果整体偏暗,说明网络在逃避对称约束;形变场如果出现剧烈的局部扭曲,说明形变正则化不够强。这些信息比损失值直观得多,能帮你快速定位问题。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询