2026/10/16 5:23:32

无监督单图三维重建:对称性先验如何替代三维标注

无监督单图三维重建:对称性先验如何替代三维标注 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. 写在最后对称性作为一种学习信号的价值这篇论文给我最大的启发不是它的网络结构有多精巧而是它展示了一种思路几何先验可以作为一种免费的学习信号替代昂贵的标注。对称性只是其中一种先验还有大量的几何、物理、语义先验等着被挖掘。在标注成本越来越高、数据规模越来越大的今天如何用先验来减少对标注的依赖是一个非常有价值的研究方向。我自己在实际项目里用这套思路做过一些实验最深的体会是先验的强度要适中。太弱的先验起不到约束作用网络还是会在解空间里乱跑太强的先验会限制网络的表达能力导致在不符合先验的样本上表现很差。论文的对称置信度机制本质上就是在动态调节先验的强度这个设计思路可以推广到其他先验上。另外一点体会是无监督不等于不需要数据。这篇论文虽然不需要三维标注但它仍然需要大量的二维图片来训练。而且图片的质量、多样性、覆盖度都会直接影响最终效果。如果你打算在自己的项目里用这套方法数据准备这一块不能省该清洗的清洗该增强的增强该分割的分割。把这些基础工作做扎实模型的效果会好很多。最后分享一个小技巧在调试这类无监督重建模型的时候可视化中间表示比看损失曲线更有用。把规范深度图、对称置信度图、形变场、反照率图都画出来你一眼就能看出网络有没有学歪。比如对称置信度图如果整体偏暗说明网络在逃避对称约束形变场如果出现剧烈的局部扭曲说明形变正则化不够强。这些信息比损失值直观得多能帮你快速定位问题。