AI Hero Club

视觉与三维场景 · 第 8 章

已自行标记完成0 / 8

仅保存在当前浏览器;完成标记不代表通过项目验收。

本章提纲 3 个小节
全课目录 8 章
完整课程计划 ↗
视觉与三维场景 / 课程计划 ↗

CHAPTER 08 / 8建议学习 120 分钟

共同版本的三维场景验收与失败报告

原件到新视角的链路跑通后,怎样联合核对几何、光度、错误对应和真值隔离?

本章要解决的 3 个问题
  • 运行原件到新视图的完整链路
  • 组织多口径评价和负对照
  • 保存源码、输入、模型与实测收据
课程项目 ZIP ↓

几何、光度与来源的联合验收

验收的对象是一个完整执行链,而不是一张好看的截图。固定输入图像、标定靶、配置和源码后,重新检测像素、估一般相机、自动匹配、三角化、拟合并渲染保留视角,才能判断各模块是否共同工作。把一个版本的检测结果、另一版本的最佳训练和第三版本的截图拼在一起,不能支持同一系统的结论。本章把实际交付与失败边界写成可重做协议。

环境最低 Python 三点一一,因为固定的 NumPy 二点三点五要求该版本;实际验证为 Python 三点一二、PyTorch 二点六,Pillow 十二点三。CPU 强制一个线程,避免在个人电脑启动不必要负载。三个依赖的固定版本写入 requirements,不把系统里恰好能导入当成完整环境说明。项目命令从 README 所在目录运行,相对路径由该工作目录解释,清单再绑定实际文件内容。

原件共有五张场景 RGB PNG 与五张单独标定 PNG,每张九十六乘八十像素。标靶十六个非共面点,场景十二个发光珠;真值单独保存在 evaluation-only 文件。每个输入有 SHA256,清单说明生成方式、单位、背景和外部资产为空。它们是独立原创合成图像,并不因“合成”自动覆盖其他项目的版权;这里没有复制第三方照片、模型或原论文代码。主源引用只支持机制核对。

重建函数读取场景与标定图片、已知标靶和视图划分,不读取未知场景真值。它先为每视角估相机,再在前两训练图用颜色与几何得到十二条轨迹。第三训练图只参与光度优化。两保留图的场景像素不进入梯度,但它们的相机来自各自独立标定图。这是明确的已标定视角重建任务,既不是全未知相机的 SfM,也不是把手写证据点表装成自动视觉。

算例一:同一模型的训练与留出指标

一百八十更新后,三个训练视角全图 MSE 约一点七一九四、一点七零一九、一点五七六一乘十的负五次方;两保留视角约一点七二九二、一点六七九九乘十的负五次方。按定义 PSNR 为负十乘以十为底的 MSE 对数,动态范围固定一。第一保留图 MSE 一点七二九二乘十的负五次方对应约四十七点六二分贝,可用计算器独立核对,不从截图目测补出数字。

MSE=13HW∑u,v,c(Ipred−Iobs)2,PSNR=−10log⁡10(MSE)\mathrm{MSE}=\frac1{3HW}\sum_{u,v,c}(I_{pred}-I_{obs})^2,\qquad\mathrm{PSNR}=-10\log_{10}(\mathrm{MSE})
强度范围固定[0,1];零MSE对应无穷PSNR,实际代码设极小保护值。

全图分数之外,第一保留图前景 MSE 从约零点零一零五一四降至零点零零零三三四八九,第二图从零点零零九八五二降至零点零零零三零七二零。前景掩码由观测强度大于零点零八定义,数百像素的分母与全图不同。改掩码会改指标含义,因此保存各图前景像素数。对现实场景,还需轮廓、深度和局部遮挡质量;当前协议不把没有实现的指标写成通过。

三维几何使用评价专用真值匹配后计算每点米制欧氏误差,最后平方平均开根号。原始图像三角化 RMS 为零点零零二九零八米,拟合后零点零零一五五四米。低像素误差与低几何误差是两种互补证据:前者检验图像解释,后者借合成真值检验结构。现实照片没有完整三维真值时应明确缺失,不用重投影误差冒充同等地面真值检验。

算例二:错误对应和不可识别失败

负对照把右图观测编号相对左图错开三个位置,构造十二组假对应。实际运行一组因背后点拒绝,其余因像素重投影超过一像素拒绝;详细原因与数值逐组保存。这是故意错误的检测能力,不进入正常重建。若另造同一极线上的重复颜色错配,有可能通过几何门槛,所以报告不能把十二组全拒绝写成“任何错误都能发现”。

另一个失败来自纯旋转或太弱基线。精确投影可以有极低重投影残差而深度仍无法唯一决定;共面标靶也可能完美拟合其平面却误投影离平面点。这两类应由配置约束和退化测试显式拒绝,不能只靠最后图像分数发现。当前测试对共面 DLT 输入报错,并对一般旋转三角化的精确例验证;弱基线连续敏感性则由第五章公式说明,不宣称测试覆盖所有条件数。

十二项独立机制测试分别覆盖合法旋转和相机中心、手算针孔与背后拒绝、一般 DLT 与共面退化、旋转双目三角化、极线和错误对应、深度缓冲、实际 PNG 检测匹配、重复颜色拒绝、渲染梯度有限差分、移除真值仍重建、篡改保留图不影响参数、真实短训下降。测试合并只说明这些命名断言通过,不等于任意物体和光照上的视觉能力证明。

代码检查要包含反证,避免实现和测试重复同一个错误公式。手算投影采用明确数值,DLT 用未参与估计的点检验,Gaussian 梯度用数值差分;删除真值和改黑保留图直接改变输入信息。它们各自建立独立参照,比只检查输出形状或函数是否返回更有意义。仍没有形式化证明所有浮点情况,尤其极端深度、重叠核和破坏文件的行为需作为扩展测试而非现有证据。

实际训练耗时约一点七一秒,只对应这台环境的一次 CPU 小实验。包含图片读取、相机标定和文件写入的总流程耗时与该纯训练计时不同;不能把一个数字当整个端到端延迟。每次重新训练即使参数可能确定,也应保存当次报告与来源,不覆盖历史文件后沿用旧时间。当前模型、输入散列、源码散列和逐项测试放入共同版本收据,便于下载后独立重跑。

拟合检查点保存位置、颜色、半径、优化器、步数和相机,但没有声明跨硬件精确恢复接口。图片输出包括各视角初始预测与最终预测,原输入保留原件。查看时应把输入与同视角预测并排,特别检查点是否缺失、宽度是否过大、颜色是否交换。截图大小很小,是机制场景的真实尺度,不通过插值放大来假装高分辨率细节。

完整复做先生成自有数据,再运行主链与测试。如果只想评估已给输入,省略 create-data,避免覆盖自己修改的文件;输出目录可另指定以保存原报告。更换阈值、焦距、场景或步数后,原结果就不再是该配置的证据,必须重新运行。源码收据记录当前版本,训练历史不因只改讲义就冒称重新训练;任何测试与训练记录都保留它真正对应的来源。

迁移到自然场景需要新的模块与新的失败协议:稳定特征或学习描述子、未知相机定位与鲁棒轨迹、镜头畸变、遮挡材质、稠密表示以及更大留出视角集。课程已经推导这些问题之间的连接,但没有声称全已实现。这里可验收的能力是从实际小图自动观测到米制几何,再到一个真实训练的受限三维场景与新视图,不是把旧点表换成长说明,也不是完整生产级三维重建。

终端命令在项目目录执行完整原件到场景链;给新输出目录避免覆盖历史记录。
python -m vision3d.make_data --output-dir data/inputs
python -m vision3d.run --input-dir data/inputs --steps 180 --output-dir evidence/reproduction
python -m tests.run_tests

TRY IT YOURSELF

练习一:PSNR换算

MSE从零点零零一降到零点零零零一,动态范围为一,PSNR增加多少?若改用八位整数却仍套同公式,会发生什么?

提示 1
PSNR看峰值平方/MSE的对数,先比较两次MSE的比例。
提示 2
像素单位从0到1改为0到255后,MSE与峰值平方应同步缩放,不能只改数组数值。
对照参考解答
负十乘对数给三十分贝与四十分贝,增加十分贝。若像素改为零到二百五十五,MSE会乘二百五十五平方,正确PSNR应使用峰值平方除MSE;仍用峰值一会平白降低约四十八点一三分贝。因此必须固定强度范围和分母,不能跨报告直接比较未归一化数字。

TRY IT YOURSELF

练习二:泄漏与标定条件

保留场景图没进梯度,但该视角标定图参与估相机。这是否矛盾?应如何准确表述,不能声称什么?

提示 1
区分估相机使用的独立标定靶与拟合未知场景使用的像素。
提示 2
分别列训练读到的数据,判断当前任务是已标定新视角还是未知姿态定位,不把二者合并宣称。
对照参考解答
不矛盾,只要任务明确是已标定新视角:相机参数来自独立已知靶,未知场景的保留像素只评价。不能声称系统从完全未知姿态新照片自行定位,也不能把标定图当未使用数据。若研究目标是未知相机泛化,需另设姿态估计模块与分离协议;当前改黑场景图参数不变测试保护的是场景像素边界。

TRY IT YOURSELF

练习三:共同版本验收

甲报告检测测试通过,乙报告另版本渲染好,丙提供没有输入散列的训练模型。能否合成完整PASS?给出最小修复步骤。

提示 1
先问检测、渲染与模型能否绑定同一源码和输入身份。
提示 2
冻结一个版本后顺序重跑整链,保存逐步产物与失败;不同版本局部最好不能拼为联合通过。
对照参考解答
不能,三个结果没有绑定同一执行链。应冻结一个源码版本与原始输入清单,记录配置和随机种子,重新依次检测、标定、匹配、重建、训练、留出评价和机制测试,保存各产物散列及原始失败记录。只把已有数字排进一张表并未建立共同来源。若某步未跑,明确NOT RUN;若模型质量有偏差,记录实测,不以测试通过替代质量判断。

CHECK YOUR UNDERSTANDING

检验理解

先作答,再决定是否展开解析。选择题用于发现理解缺口;独立实现与迁移任务仍需另行检验。

1. 三个版本各自最佳结果能否合成系统验收?

查看解析完整链必须在同一来源和配置上共同成立。
2. 项目主要未实现哪项?

查看解析受限Gaussian拟合明确不含完整原方法机制。
3. 十二测试PASS对质量的正确含义是什么?

查看解析机制通过与有限场景质量、许可问题互不替代。
4. 修改检测阈值后能否直接沿用旧训练收据?

查看解析输入观测变化可能传播到标定、匹配与最终场景。

自行标记用于记录学习进度,不代表通过项目验收。