
单看每一张都挺像回事四张视角拼成一个环绕视频墙角那条踢脚线在第三帧和第四帧之间错开了将近十个像素桌腿的粗细在两帧里也不一样——这种单张能骗过人、转起来就露馅的结果是多视角合成里最典型也最容易被忽视的失败模式。画质可以靠更大的模型堆上去几何一致性不行因为它约束的不是像素好不好看而是同一个三维点在多张图上的投影必须落在同一个位置。**几何潜在扩散GLD**这套思路干的就是把几何信息提前搬进潜空间让扩散过程在一个带空间结构的表示上做去噪而不是让每个视角各自为战地猜纹理。这篇内容适合三类人看正在做多视角或环绕视角生成、被穿模和错位折磨过的想把几何约束塞进扩散训练但不知道损失怎么配的以及已经跑通 Demo、准备往产品里塞但卡在验收标准上的。下面我把这套技术路线拆开讲包括它为什么这么设计、每一步的坑在哪、以及我自己复现时踩出来的那些文档里不会写的东西。1. 多视角合成里最难缠的从来不是清晰度而是对不上1.1 一次典型的翻车现场单张都对转起来就穿去年我做过一轮环绕视角生成的小规模验证输入是一张正面产品图目标是生成八个均匀分布的视角拼成一个可以拖动旋转的展示。第一版方案就是最朴素的逐视角独立采样同一个参考图喂进去改相机参数出八张图。单张验收的时候几乎全过纹理细节、材质反光、背景过渡都像模像样评审的人也点头。等到把八张图按角度排好做成可拖拽的序列问题一次性全炸出来了——产品底座的轮廓在相邻两帧之间跳了背面的接缝位置每帧都在漂最要命的是有个视角里产品的把手陷进了机身里而前一个视角它还是凸出来的。这就是几何一致性的问题。它不是某一张图错了而是八张图各自都对、合起来不对。人眼对单帧的容错度很高对运动序列里的一致性却极其敏感——只要相邻两帧有任何一个结构点位置对不上大脑立刻判定这是假的。这也是为什么很多方案在论文的定量表格上分数不低放到实际交互里一眼假。我当时的第一反应是加大采样步数、调高引导强度结果更糟引导强度拉高之后每个视角都更自信地朝着自己理解的语义去靠视角之间的分歧反而被放大了。这个反直觉的结果让我意识到问题不在采样环节而在表示层面——模型从一开始就没有一个共享的空间锚点。1.2 几何一致性约束的到底是什么先把概念说清楚。多视角合成里说的几何一致性核心约束的是这么几件事按重要程度排重投影一致性同一个三维点在视角 A 和视角 B 里的像素位置必须满足相机投影关系。这是最硬的约束违反了就是错位。深度序一致谁挡谁不能变。A 视角里手在前、身体在后转到 B 视角不能变成身体挡手除非确实转过去了。轮廓闭合同一个物体在不同视角下的剪影边界必须能对应到同一个三维外形上不能一个视角胖一个视角瘦。光照与材质的方向一致性高光位置随视角变化要符合物理规律而不是每个视角各自随机。前三条是刚性的第四条是柔性的。实际项目里最容易翻车的是第一条和第三条——重投影错位和轮廓不闭合恰恰是逐视角独立生成最容易出问题的地方。用一个生活化的类比想象八个人分别站在八个位置给你描述同一个房间每个人只描述自己看到的。这八段描述单独听都很合理但拼起来你会发现有人把门说在左墙、有人说在右墙。GLD 想做的事相当于先让这八个人共用一张房间的平面草图几何潜变量再各自在这张草图的基础上补充自己角度的细节纹理潜变量。1.3 逐视角独立生成为什么会天生崩掉关键在于扩散模型的采样机制本身。扩散去噪是从纯噪声开始的每个视角各自采样一份初始噪声即便种子固定、参考图相同由于相机条件不同去噪轨迹从第一步就开始分叉。扩散模型本质上是学习了一个图像分布采样是从这个分布里抽一个样本。抽八次就是八个独立样本它们之间没有任何机制保证彼此在三维上自洽。更细一点说崩坏发生在三个层面第一层是高频纹理的随机性。扩散模型对高频细节细纹理、边缘、小结构的生成带有很强的随机性这部分恰恰是人眼判断是不是同一个东西的重要依据。独立采样意味着每个视角的高频细节都是独立掷骰子。第二层是二维先验压过三维先验。模型在训练时见到的绝大多数是单张图像它学到的是一张合理的图长什么样而不是一个合理的三维物体从不同角度看长什么样。在没有额外约束的情况下前者会压倒后者。第三层是误差累积。八个视角不是同时生成的即便做了某种串行条件传递前一个视角的偏差会作为条件喂给后一个滚雪球式放大。转到第八个视角的时候已经偏离第一个视角很远了——这就是常说的漂移。理解了这三点就能明白为什么单纯在采样阶段调参没用需要的是在表示层和训练目标层同时下刀让几何约束成为生成过程的一部分而不是生成之后的补救。2. GLD 的核心思路把几何搬进潜空间再让扩散去补纹理2.1 从像素对齐退到潜空间对齐的动机直觉上最直接的做法是在像素空间做对齐生成八张图算重投影误差反向传播修正。这条路走不通原因很实在——像素空间的重投影对齐要求在生成过程中就有深度信息而扩散的去噪步骤里中间时刻的图是带噪的你很难从一个半噪声的图像里可靠地估计深度再去 warp。噪声本身会污染深度估计深度估计的误差又会污染对齐信号形成负反馈。退到潜空间就不一样了。潜空间的维度低得多空间分辨率也小常见是原图的八分之一同样的重投影误差在潜空间里更容易被稳定地表达和优化。更重要的是潜空间里可以把几何和纹理拆成两个部分来处理几何部分负责回答这个三维形状从各个角度看轮廓在哪纹理部分负责回答这个表面是什么颜色和材质。前者需要跨视角共享后者需要保留视角特异性。这个拆分是整个 GLD 思路的支点。它把一个纠缠在一起的问题解耦成两个相对独立的问题每个问题的约束都清晰得多。注意这个拆分不是免费的。几何和纹理在真实世界里是耦合的——反光表面、半透明材质、细密结构几何估计本身就会出错。所以几何潜在变量的质量直接决定了整条链路的上限后面第 4 节会专门讲这个。2.2 几何潜变量的三种常见编码方式几何潜变量怎么构造是这套方案里第一个需要做决策的地方。我实际试过并在小规模数据上对比过的有三种编码方式具体做法优点主要问题适用场景深度图栈每个视角估一张深度图编码成多通道潜变量实现简单预训练深度模型现成可视化调试方便遮挡区域深度不可知边缘锯齿严重跨视角对齐依赖位姿精度以物体为中心、背景简单的场景点图三维点云投影把参考视角反投影成点云再投影到各目标视角天然满足重投影一致性遮挡关系可算空洞多点云稀疏处纹理生成压力大视角跨度不大、物体表面连续的场景三平面/隐式特征用三个正交平面编码一个隐式几何场连续表示无分辨率限制跨视角查询方便训练成本高收敛慢调试时不容易定位问题需要高保真、可微渲染配合的场合我自己的选择是点图为主、深度图为辅的混合方案。原因很实际点图天然满足重投影一致性它就是从三维点投过来的想不一致都难能直接把硬约束变成结构自带的性质深度图用来补点图的空洞因为单目深度模型在连续区域的表现比稀疏点云稳。三平面那套我试过一轮效果确实好但训练时间和调试成本对我们当时的团队规模来说不划算——这是我基于自身条件的取舍不是通用结论。不管选哪种有一个共同的坑几何潜变量必须是跨视角共享的而不是每个视角各估一份。如果每个视角独立估深度那各视角的深度误差是独立的对齐的时候误差不会抵消只会叠加等于白做。正确做法是从参考视角或少数几个锚视角估计几何再投影到所有目标视角。2.3 跨视角信息在去噪过程里怎么交换有了共享的几何潜变量接下来的问题是各个视角的纹理潜变量在去噪过程中怎么看到彼此。最直接的做法是拼接做全局自注意力。把 N 个视角的潜变量 token 拼成一个长序列配上相机位置编码做一次全局注意力。这样每个视角在每一步去噪时都能看到其他视角正在生成什么从而相互协调。代价很明显注意力复杂度是 token 数的平方视角从 4 个加到 8 个token 数翻倍注意力计算量翻四倍。显存很快就撑不住了。我实际用的折中方案是分层交换在潜空间分辨率最低的几层做全局注意力这时候 token 少能承受在分辨率高的层只做相邻视角的局部注意力。理由是几何一致性主要是在低分辨率的结构层面决定的——轮廓、大块面的朝向、遮挡关系这些在低分辨率潜变量里就已经确定了高分辨率层负责的是纹理细节跨视角共享的必要性低得多反而过度共享会让纹理变得模糊、失去视角特异性。另一个必须提的细节是相机编码的位置。相机条件不能只在输入端喂一次那样在深层注意力里信息已经衰减了。我的做法是在每一层注意力前都重新注入一次相机编码用类似自适应归一化的方式调制保证模型在每一层都记得当前视角在哪。这个改动看起来小实测对几何一致性的提升比我预期的明显——尤其是在视角跨度大的时候。2.4 噪声共享与极线约束哪个更划算还有一个容易被忽略但对齐效果影响很大的点初始噪声。常规采样是每个视角独立抽一份高斯噪声。但如果在加噪阶段就做一次噪声 warp——按几何潜变量的深度把参考视角的噪声重投影到目标视角那么各个视角的初始噪声在三维上就是相关的。这相当于在采样的起点就植入了一部分几何结构后续去噪只需要在这个基础上细化而不是从零开始构建空间关系。我实测下来噪声 warp 的收益在步数少的时候特别明显。步数 20 以下不做 warp 的版本几何崩坏率明显更高步数拉到 50 以上两者的差距会缩小但不消失。这个现象很好理解去噪步数多模型有更多机会自己纠回来但纠的过程是随机的不保证纠对。和极线约束比起来噪声 warp 是软约束影响初始分布极线约束是硬约束直接限制采样空间。硬约束理论上更可靠但实现复杂度高很多而且一旦相机位姿有误差硬约束会把误差固化进去反而更难救。我的经验是位姿精度可控自己渲染的合成数据用极线硬约束位姿来自真实采集、有标定误差的用噪声 warp 这类软约束更稳。3. 训练目标怎么搭每一项损失到底在管什么3.1 基础去噪损失之外几何项为什么一項都不能少GLD 的训练目标不是简单的去噪 MSE 加上几个正则项。每一项损失管的事情不一样缺哪一项就会在某个特定症状上翻车。基础的去噪损失预测噪声和真实噪声之间的 MSE负责的是图像质量和分布拟合这一项不能动动了整个生成能力就垮。但它对几何一致性几乎没有任何约束力——模型完全可以生成八张各自合理、彼此矛盾的图去噪损失照样很低。所以必须加几何项。我用的组合是三项重投影光度损失、深度/法向平滑损失、轮廓一致性损失。这三项的分工是重投影光度损失管同一个点在不同视角的颜色要接近直接对应错位问题。深度平滑损失管相邻像素的深度不能突变除非是真实边缘抑制深度估计的噪声。轮廓一致性损失管同一个物体的剪影在不同视角要能对应到同一个三维形状对应轮廓不闭合问题。三项权重不能拍脑袋定得看它们的数值量级。我踩过的第一个坑就是权重按直觉给了 1:0.1:0.1结果重投影损失的量级比重建损失大两个数量级训练前期梯度全被它带跑了图像质量直接崩掉生成的东西糊成一片。后来改成先各自归一化到同一量级再乘权重才稳定下来。3.2 重投影一致性损失的具体写法与数值陷阱这一项是整个训练目标里最容易写错的地方。给一个我实际在用的伪代码结构# 伪代码重投影光度一致性损失 # pred_a, pred_b: 两个视角的预测图像或潜变量 # depth_a: 视角 a 的深度图来自几何潜变量 # K_a, K_b: 两个视角的内参T_a2b: a 到 b 的外参变换 def reprojection_loss(pred_a, pred_b, depth_a, K_a, K_b, T_a2b): # 1. 反投影到三维 pts_3d backproject(depth_a, K_a) # [H, W, 3] # 2. 变换到视角 b 的相机坐标系 pts_b transform(pts_3d, T_a2b) # [H, W, 3] # 3. 投影到视角 b 的像素平面 uv, z project(pts_b, K_b) # [H, W, 2], [H, W, 1] # 4. 构造有效性掩码深度为正、落在图像内、且通过遮挡测试 mask (z[..., 0] eps) in_bounds(uv) occlusion_test(pts_3d, depth_a) # 5. 在 mask 内采样并计算光度差 sampled grid_sample(pred_b, uv) # 用双线性采样 loss (pred_a - sampled).abs()[mask].mean() return loss看起来简单陷阱全在细节里第一个陷阱是遮挡掩码。不做遮挡测试的话被遮挡的点会被投到目标视角里前景物体的纹理上算出来的光度差是纯粹的噪声而且量级不小会把整个损失拉偏。遮挡测试的做法是在目标视角也做一次深度比较如果投影点的深度大于目标视角在该像素的深度说明它被挡住了这个点不参与损失计算。第二个陷阱是采样方式。grid_sample用双线性采样会引入亚像素的模糊。在深度不连续的边缘处双线性会把前景和背景的颜色混合算出来的光度差永远不为零等于给损失加了一个下不去的底。我的处理是在深度梯度大的区域强制用最近邻采样或者干脆把这些区域从损失里排除。边缘图可以用深度图的梯度阈值提取。第三个陷阱是数值归一化。光度差如果在原始像素值域上算不同曝光、不同亮度区域的贡献差异极大。我改成在归一化后的特征空间的余弦距离稳定性好很多。第四个陷阱是梯度回传。几何潜变量如果是从外部预训练模型估出来的固定值那就没有梯度回传的问题但如果几何潜变量也是可训练的我试过这条路线那么重投影损失会同时往几何和纹理两个方向回传梯度很容易出现几何塌缩——模型发现把深度图压平能让光度损失变小于是学出一个平面深度图。解决办法是对几何分支做 stop-gradient或者给深度预测加明确的监督。3.3 相机条件怎么注入什么情况下会失效相机条件的注入方式直接决定了模型能不能理解视角之间的关系。我试过三种拼接法把相机参数展平成一个向量和潜变量拼在一起。实现最简单问题是空间信息丢了——模型不知道这个参数对应的是整个视角的全局姿态容易把它当成某种全局风格向量。外参矩阵编码把 4×4 变换矩阵展平后过 MLP。比拼接法好一些但矩阵表示本身不是旋转的最优表示模型学起来费劲。Plücker 射线嵌入为每个像素计算一条射线原点 方向共 6 维作为像素级的位置编码。这种方式把相机信息变成了空间对齐的模型能直接知道这个像素对应哪条空间射线效果明显更好。我现在的默认选择是 Plücker 嵌入。它的代价是额外的内存开销每个像素多 6 个通道但在潜空间分辨率下这个开销可以接受。失效场景要特别注意两个。一是坐标系归一化不一致。训练时把场景归一化到单位球内、推理时忘了做同样的归一化模型收到的相机参数分布和训练时完全不同结果就是相机条件完全失效生成出来的视角跟指定角度对不上。这个坑我在换数据集的时候踩过一次排查了大半天才想到是归一化的问题。二是内参分布不匹配。训练数据大多是某个固定焦距范围推理时给了个广角视场角差异会导致几何潜变量的投影关系整体偏移。我的处理是在训练时做内参的随机抖动增强让模型见过不同的焦距。3.4 一个能跑起来的最小训练配置给一套我验证过能收敛的最小配置方便你从零复现项目设置说明视角数4先跑通 4 视角稳定后再加分辨率潜空间 64×64对应原图 512×512几何潜变量参考视角深度 点图冻结预训练模型估计不参与训练跨视角注意力最低 2 层全局其余局部显存和效果的折中相机编码Plücker 射线每层重注入6 维损失权重去噪 1.0 / 重投影 0.1 / 平滑 0.02 / 轮廓 0.05归一化后优化器AdamWlr 1e-4warmup 500 步批大小每卡 2 个场景8 张图24G 显存下的实测值训练过程中有个很实用的监控手段每隔一定步数固定一组相机生成一批图单独算一次重投影误差并记录下来。这个指标比总损失更能反映几何一致性有没有真的在变好——总损失下降很多时候只是图像质量在提升几何项可能一直在原地打转。4. 数据与相机整条链路里最被低估的一环4.1 位姿精度对结果的影响到底有多大我在多个场合跟人聊过这个话题大部分人的第一反应是位姿差不多就行。实测不是。以我们用的分辨率做参照相机外参的旋转误差在 0.5 度以内、平移误差在物体尺度的 1% 以内时重投影误差基本落在 1 到 2 个像素肉眼看不出来误差放大到 2 度、3% 的时候重投影误差会跳到 5 到 8 个像素这时候生成结果的轮廓开始出现可见的漂移再往上几何约束就从帮助变成了干扰模型会为了迁就错误的位姿而牺牲形状的合理性。这个量级关系很重要因为它决定了一个判断如果你的位姿精度达不到这个门槛加几何约束的收益可能是负的。我见过有人在一批位姿不准的数据上硬上重投影损失结果是生成质量比不加约束还差因为模型被迫去拟合一个自相矛盾的几何条件。所以第一步永远应该是评估位姿精度。方法很简单拿几张图做特征匹配算重投影误差的分布。如果中位数超过 3 个像素先解决位姿问题别急着改模型。4.2 数据清洗里那些看起来没问题的坑多视角数据清洗有几类问题特别隐蔽属于肉眼扫一遍完全发现不了、但会显著拉低效果的那种第一类是运动物体和形变。如果采集的是真实场景中间有人走过、有窗帘飘动、有屏幕在播放内容这些区域在不同视角下的内容不一致重投影损失会把它当成几何错误来惩罚模型学到的就是几何要迁就这些随机变化。处理办法是用语义分割或多视角一致性检测把动态区域标出来在损失里降权或屏蔽。第二类是反光和透明。玻璃、金属、水面这些表面的表观颜色强烈依赖视角重投影光度损失在这里的前提假设同一个点在不同视角颜色接近根本不成立。硬算的话会得到一个持续很高但没意义的损失值把其他项的梯度淹没掉。我的做法是用材质分割做掩码这些区域只保留去噪损失不参与光度一致性计算。第三类是曝光和白平衡的不一致。同一批采集里如果相机参数是自动的不同视角的亮度和色温会有系统性差异。这个差异会被光度损失误判为几何错误。处理方法是在预处理阶段做颜色归一化或者在特征空间而非像素空间算一致性。第四类是深度不连续处的标注噪声。单目深度模型在物体边缘的表现一向不稳边缘一圈的深度值往往是错的。这一圈如果不排除会在重投影时投到完全错误的位置。我的做法是对深度图做一次边缘检测把梯度超过阈值的区域从几何损失里排除掉——听起来是少算了实际效果反而更准。4.3 从单视角数据到多视角配对的构造真实的多视角配对数据不好搞。我的主力方案是两条腿走路一条是合成数据。用三维资产渲染多视角图像位姿是精确的深度是真值可以放心地加硬约束。缺点是域差距——合成数据的材质、光照、背景分布和真实数据差得远。我的缓解办法是在合成数据上预训练几何分支在真实数据上微调纹理分支各取所长。另一条是单视角数据的自监督构造。做法是从单张图里裁出两个重叠区域当成两个虚拟视角用单目深度估计建立它们之间的近似对应关系。这种配对是近似的位姿不精确所以只能用软约束噪声 warp 这类不能用重投影硬损失。它的价值在于把海量单图数据利用起来让纹理分支见到足够多的真实分布。两条路的数据配比也要调。我一开始合成数据占八成结果模型生成的图有很明显的渲染感调整到五五开之后真实感明显改善几何一致性只掉了很小一点。5. 推理阶段的工程细节步数、引导强度与视角排布5.1 去噪步数和跨视角注意力的真实开销推理阶段最容易低估的是跨视角注意力的开销。以八视角、潜空间 64×64 为例token 总数是 8×4096 32768全局注意力的计算量按平方增长单步就要吃掉相当一部分显存和时间。实际测下来八视角全局注意力版本的推理时间大约是四视角的 3.5 倍显存占用接近 3 倍。这个开销在离线生成里能接受实时交互就完全不行。我的优化思路是按层分流只在最低的两层做全视角注意力其余层做视角内的自注意力加相邻视角的局部交叉。这样八视角的推理时间降到四视角的 1.8 倍左右几何一致性指标只下降了一点点。步数方面我的实测结论是 30 到 40 步是个甜点区。20 步以下几何结构还没收敛就结束了轮廓明显偏软、错位概率高40 步以上继续加几何指标几乎没有改善时间却线性增长。如果配合噪声 warp20 步也能出一个可用的结果适合对延迟敏感的场景。5.2 引导强度调高反而更崩的原因这个现象我第一次遇到时很不理解引导强度用来强化条件约束的那个系数调高按说应该更贴合参考图、更一致才对怎么几何反而更崩后来想明白了。引导强度放大的是条件与无条件的差异这个差异里既包含了几何信息也包含了语义和纹理的偏好。放大倍数高的时候模型对每一个视角都更强硬地朝参考图看起来的样子去靠而参考图看起来的样子是个二维概念——每个视角都在努力长得像参考图的二维投影结果就是各视角都朝同一个二维外观靠拢三维关系反而被压扁了。表现就是所有视角看起来都挺像原图但转起来发现它们其实是同一张图的轻微变形没有真正转过去。我现在的经验值是引导强度在 3 到 5 之间超过 7 就开始出现这种二维塌缩。这个区间和具体的模型、数据都有关建议你自己扫一遍用轮廓一致性指标来定别凭感觉。5.3 视角数量和排布方式的取舍视角数量不是越多越好。加到一定程度之后边际收益递减而开销线性增长。我的实测视角数相对开销几何一致性提升备注41.0×基准够用适合快速验证81.8×明显提升环绕展示的实用配置163.6×提升有限只有大跨度视角才需要245×以上基本饱和一般不划算排布方式比数量更影响观感。均匀环形排布适合物体展示因为视角之间的角度间隔一致转起来速度均匀半球排布适合需要看到顶部的场景但环与环之间的间隔不好均匀容易出现某个角度跳变。我踩过的一个坑是为了省事用了非均匀的角度间隔结果相邻视角之间的重叠区域大小差异很大重叠少的那些视角对几何约束的贡献很小等于白算。还有一个细节视角之间要有足够的重叠。重叠太少的两个视角共视区域小重投影损失能约束的区域也小。经验值是相邻视角的共视区域不低于图像面积的三成低于这个值就该加密视角或者接受这一段的一致性下降。6. 怎么判断真的提升了指标盲区与验收流程6.1 常规指标的三个盲区PSNR、SSIM、LPIPS 这三个指标在多视角生成的评估里用处有限原因很具体盲区一是参照系。多视角合成里合成视角往往没有真值图像可比只能跟参考视角比。而参考视角是输入比它等于比有没有抄得像跟几何一致性没关系。盲区二是二维度量抓不住三维错误。一张图的重投影错位在单张上是看不出来的——它只是某个边缘位置偏了几个像素PSNR 可能只掉 0.2dB但人眼一看旋转就知道错了。反过来一张几何完全错但纹理漂亮的图LPIPS 可能很低。盲区三是平均值掩盖了个别视角的崩坏。八视角里七个好、一个穿了平均指标依然很漂亮但用户拖动到那个角度就废了。所以一定要看最差视角而不是平均值。6.2 一套能抓住几何崩坏的验收流程我目前用的验收流程分四步每一步针对不同的失败模式第一步重投影自检。把生成的多视角图重新做一次特征匹配算两两之间的重投影误差。这一步不需要真值只要能匹配上就说明几何大致自洽。误差中位数超过 4 个像素就红灯。第二步轮廓对应检查。把各视角的前景剪影提取出来按相机参数反投影到三维看能不能拼成一个闭合的、没有明显空洞的形状。这一步能抓住每个视角单独看都对、合起来是个怪物的情况。第三步稀疏重建可行性。把生成的图丢回一个标准的稀疏重建流程看能不能解出相机位姿、解出的位姿和输入位姿差多少。如果解不出来或者差得远说明这批图的几何关系是乱的。这个指标我觉得比 PSNR 有用得多因为它直接检验了这些图能不能被当成同一个场景的不同视角。第四步人眼旋转检查。前面三步都是自动化的最后还是要人看。把视角拼成可拖拽的序列用正常速度转两圈。人眼对运动中的不一致极其敏感这一关过不了前面指标再好看也没用。6.3 从症状反推问题环节的排错表排错的时候最怕的是知道结果不对但不知道改哪。我把踩过的坑整理成一张对照表按症状反推症状最可能的原因排查手段处理方向相邻视角边缘错位几像素相机位姿精度不足算重投影误差分布重新标定或过滤低精度样本轮廓大小在视角间跳变深度估计尺度不一致比对各视角深度统计量深度估计改成跨视角共享遮挡关系错乱遮挡掩码未生效可视化掩码覆盖区域补遮挡测试检查深度序所有视角都像原图的轻微变形引导强度过高扫引导强度看轮廓指标降到 3 到 5转到后面几个视角明显偏了误差累积/串行传递看首个与末个视角的一致性改并行生成或噪声共享大面积糊、细节丢失几何损失权重过大看各损失项量级重新归一化权重反光区域出现鬼影材质违反光度一致性假设检查高光区域误差材质掩码排除训练前期就发散损失量级失衡打印各损失项数值分项归一化后调权重用这张表的时候有个技巧先排除数据问题再怀疑模型问题。我遇到过好几次排查了半天损失函数最后发现是某个视角的相机参数录错了一个符号。数据层面的检查成本低、命中率高永远是第一顺位。最后再分享一个我在实际项目里养成的小习惯每次改动训练配置固定存一组回归测试视角——固定的参考图、固定的相机、固定的随机种子每次改动后都生成一遍和上一版并排放在一起看。这套回归集救过我很多次有好几次我以为自己在改进并排一看才发现几何一致性其实退化了只是图像质量提升把问题掩盖了。多视角生成的坑大部分都藏在这种局部变好、整体变差的错觉里。