Skip to main content

MoGe — Monocular Geometry Estimation (MoGe 单目几何估计解构 — Microsoft 2024)

Published: 2024 (arXiv 2410.19115) Paper: Microsoft Research — MoGe: Monocular Geometry Estimation https://arxiv.org/abs/2410.19115 Team: Microsoft Research Core position: Relative-track 单任务 affine-invariant monocular 几何模型 (per ontology §9.5; 3 heads 服務同一 affine-invariant 損失,不是 foundation-model multi-task 意義) — 在统一 affine-invariant 3D loss 下预测 point map + depth + normal. 作为 3D-aware 视觉编码器比 Depth Anything 更丰富;仍无米.
Status: v1.1 — 已按 AGENTS.md 14 项门槛模板回填于 2026-05-21. Hyperparams 标 UNVERIFIED. Wedge tier: W2 · relative-depth foundation (geometry-rich) TL;DR: MoGe (Microsoft Research 2024, https://arxiv.org/abs/2410.19115) 是 relative-track 的答案,说”既然要 affine-invariant,就预测整个几何 — point map、depth、normal — 用同一 affine-invariant loss”. 这是 Depth Anything 线的有用分叉,因为 single-task affine-invariant geometry (含 point map, depth, normal 三 head 共用 affine-invariant 損失) 让模型作为 3D-scene-understanding 骨干更有用,即使输出仍 up to scale. 对 VLA 预训练和场景重建有意思. 对带米的机器人,工具错 — 去 Metric3D.

X-Ray (non-expert friendly)

(a) Depth Anything 每像素预测一个标量(disparity, up to affine);Metric3D 预测米但需内参. (b) MoGe 说”既然反正 affine-invariant,就在同一 affine-invariant loss 下预测完整几何 — 3D 点、深度、法线”,模型由此变 3D-aware 编码器,不只深度网. (c) 对空间 AI 工程师:作为 VLA 预训练或场景重建骨干有用;仍非 metric,所以别用于 grasp pose.

📍 Research Landscape Timeline

MoGe 是 VGGT 多视角几何头的单视角前驱. 2 年内,要么 MoGe v2 加 metric 输出(canonical-camera 技巧),要么被静默退役、由 VGGT 类模型接手.

1 · 卖点

Depth Anything 线每像素预测一个标量(disparity, up to affine). Metric3D 线预测 metric depth 但需内参. MoGe 居中:直接从 monocular RGB 预测几何(3D point map + depth + normal),用统一 loss,对场景全局 affine 不变但对内部几何紧. 赌注是这让模型比 depth-only head 学到更丰富的 3D 结构 — 表面连续性、法线一致性、遮挡边界锐度 — 不承诺米. 若你需要 3D-aware 视觉编码器且部署时愿意乘以外部估计的 scale,MoGe 给你的比 Depth Anything 多,推理成本相近.
⚡ Eureka Moment: 把 affine-invariant disparity loss (MiDaS) 推广到 affine-invariant 3D point loss. 输出现是 up to global scale + offset 的完整 point cloud,但跨 point / depth / normal head 内部一致. 三头互为正则化 — surface normal 收紧 depth 梯度,point map 收紧表面连续 — 不付 metric 监督的代价.

2 · 架构

📌 Napkin Formula: RGB → ViT → {pointmap, depth, normal},loss L = AffineInv(pointmap) + AffineInv(depth) + cos(normal, ∇pointmap). 每图像解一个场景级 affine (s, t);跨头强制内部几何约束.
“affine-invariant point” loss 是值得思考的贡献 — 是 MiDaS affine-invariant disparity loss 到完整 3D 的推广. 意味着 MoGe 预测的 3D 场景 up to global scale + offset,但三个输出头之间几何内部一致.

3 · 它在版图中位置

干净选择方法: 需米 → Metric3D 或 stereo. 需相对深度源 → Depth Anything v2(更简单、更广部署). 需下游学习用的 3D-aware 视觉编码器 → MoGe 配得上.

3.5 · Worked example — VLA 预训练特征信号

对比 Depth Anything v2 预训练 vs MoGe 预训练在 manipulation policy 编码器上:
  • Depth Anything v2 预训练: 编码器每像素一个标量监督信号(disparity). 下游 policy linear probe 在 grasp success 上: 78% UNVERIFIED.
  • MoGe 预训练: 编码器每像素三个信号(point、depth、normal)在统一 loss 下. 同编码器骨干(DINOv2 ViT-L),同下游 probe: 82% UNVERIFIED.
  • 成本差: MoGe 推理 ~1.3× Depth Anything v2(三头).
  • Caveat: 数字示意;实际胜负取决于 policy 从预训练需要什么(normal 对抓圆柱重要;对捡积木不那么).
教训:当下游任务本身不是 metric 时,预训练信号丰富度比 metric 正确性更重要.

4 · 它在哪里 break

  • 同 monocular-RGB 失败模式 — 透明 / 镜面 / 无界户外.
  • Multi-task head 修不了 scale — 预测法线找不回米. 模型根本上 affine-invariant;若忘了这点,就掉进 Depth Anything v2 同样的错米陷阱.
  • 部署开销 — 三头比 depth-only 占更多内存;在紧边缘设备上相对 Depth Anything 不明显值.
  • 文档成熟度 — 截至写时 MoGe 论文较新,下游 eval 覆盖比 Depth Anything v2 稀 UNVERIFIED, check post-2025 surveys.

4.x · Hidden Assumptions

上游假设,违反就产生静默失败:
  • 下游可接受 affine-invariant 输出 — 同 Depth Anything v2 陷阱;若消费者需米,MoGe 工具错.
  • Multi-task head 保持一致 — 统一 loss 应该让 point / depth / normal 一致,但偶尔不一致(法线与 point-cloud 梯度不符)会漏到下游.
  • In-distribution 域 — 与 Depth Anything 同样的互联网图像训练偏差.
  • 标准 FOV + pinhole — 鱼眼 / 广角退化,无 canonicalization 机制.
  • 足够推理算力 — 三头 × ViT-L 比 Depth Anything v2 重;紧边缘设备可能不值.
违反时通常得到一个看着合理的 3D point cloud,在一个场景里正确 scale,在下一个里漂移 — 与咬 Depth Anything 用户的同一内容相关 affine.

4.y · GitHub-validated 失败模式(atlas 联动,2026-05)

microsoft/MoGe 76 open issues 揭示三 head “affine-invariant up to its own scale 且无跨 head scale 约束” 的部署后果:
  • GitHub-validated:用户期待 “3D points 直接米” 但实际 scale 不可知 —— MoGe-2 点云 scale 与真实尺寸偏差 “2x? more? less?”(用户原话),对应 issue #75 / #43;印证 §3 “需米切到 Metric3D”。详见 github_failure_atlas.md。
  • GitHub-validated:local vs HF demo 不一致 —— 同图本地跑 vs HuggingFace demo 输出不同,对应 #72 / #66;说明隐藏前/后处理 step,复现实验前必须对照 HF Space 的 pipeline。
  • GitHub-validated:multi-head 矛盾 + sky 球面 hack —— depth + normal + FoV 互不洽(#79 / #81),sky 区被 “推到球面” 是 dynamic range hack 不是几何;印证 §X.1.1 “mask head 把 infinity 显式排除”。v1 FoV 复现失败(#115);官方 ONNX 缺失(#20 / #83)是社区呼声最高的 PR 方向。

5 · 何处用

  • VLA 预训练 — 把 point/depth/normal 输出作为 policy 编码器的辅助监督. single-task affine-invariant 三头信号(per ontology §9.5)比单深度头丰富.
  • 离线场景重建 — 当你能对已知参考拟合 per-scene scale.
  • 对比 ablation — 若你写论文论证 “geometry-rich 预训练 > depth-only 预训练”,MoGe 是强 baseline.

6 · 2-year outlook + falsifiable prediction

Relative 轨与 metric 轨在收敛 — VGGT(见 foundations/feed-forward-3d/vggt_cvpr2025_dissection.md)已把 depth + pose + pointmap 吸收进单一多视角 feed-forward 模型. MoGe 的 multi-head 模式是单视角前驱;2 年内要么被 VGGT 谱系吸收,要么由 metric-aware MoGe-v2 取代. Falsifiable prediction: 2027-06 前要么 (a) MoGe v2 出 metric 输出(canonical-camera 技巧),要么 (b) 它在同用例上静默被 VGGT 类模型取代. 若 MoGe 仍作为活跃的 “monocular geometry-rich relative” 线未动,则预测失败. Interview Tip: 被问 “MoGe vs Depth Anything”,正确答案:“MoGe 用简单度换更丰富的 3D 预训练信号 — point + depth + normal 在同一 loss 下” — 对 VLA 编码器更好,部署上相同的 affine-invariant 限制. Metric 陷阱仍在;需米切到 Metric3D.

For the reader

  • Manipulation engineer — 跳过,除非作为预训练.
  • Aerial engineer — 跳过;需米.
  • VLA researcher — 值得作为预训练目标看;比 depth-only 丰富.
  • Researcher — affine-invariant 3D point loss 是可推广的想法.


X.1 · Working Range 详细分析 (2026-05-21 补)

MoGe 作为 monocular feed-forward 模型,没有内置 range gating(输入 RGB 不带尺度),但内部各 head 在不同距离段表现差异显著. 下面分四段对照(数字若来自论文则有引用,否则标 UNVERIFIED).

X.1.1 affine-invariant 精度按距离分层

MoGe 输出 up-to-global-(scale, Z-shift) 的 3D point map(论文将 affine 简化为 Z-axis shift,前提是 principal point 居中,见 arXiv:2410.19115,§Method). 这意味着 绝对距离 数字本身没意义,下表读”affine-invariant 后的相对误差”:
⚡ 设计亮点: mask head 是 MoGe 对”超远 / 无界”的明确工程答复 — 不是预测无穷远的深度,而是把这些像素显式排除出 finite point map 的损失. 这是 Depth Anything 系列没有的 wedge.

X.1.2 multi-head 在不同 range 的行为差异

MoGe-1 主要输出 point map + depth + (FOV);MoGe-2 增加 metric scale + normal head(-normal 变体,见 github.com/microsoft/MoGe). 关键洞察: normal 通过 point map 梯度间接监督(v1 §3.3 — angular diff on cross product of image-grid neighbors),所以 normal 在远端”借放大了 point map 的 Z-噪声”. 实践上:近距离信赖 normal,远距离信赖 depth.

X.1.3 Multi-scale local loss 与 range 关系

论文用 三个 sphere 尺度 α ∈ {1/4, 1/16, 1/64} 的 local-region ROE alignment(v1 §3.2). 这本质上是 range-aware 监督:
  • α=1/4 大球 → 覆盖整景,惩罚跨远近物体的 relative-distance 漂移
  • α=1/16 中球 → 房间 / 物体级
  • α=1/64 小球 → 物体表面 / 抓取尺度细节
这三尺度回避了”全局 affine 把近端硬挤压”和”局部尺度孤立漂浮”两个极端. Ablation: 去除 multi-scale local loss 把 ViT-Base 上的 point error 从 8.00 推到 8.10(v1 Tab. 5)— 收益不大但稳定.

X.2 · Sensitivity 详细分析 (2026-05-21 补)

X.2.1 经典 monocular RGB 敏感性

X.2.2 Multi-head 之间的 sensitivity 不一致性 ★★

这是 MoGe 比 Depth Anything 更复杂的地方:三 head 不一定一致敏感.
⚡ 隐含失败模式: MoGe 三 head 用 “joint affine-invariant loss” 训练应该保持几何一致,但论文未提供 “三 head 一致性”的显式度量(如 depth from ∂Z(pointmap) - depth_head 残差直方图). 这是工程实践中需要自己 ablation 的内容. UNVERIFIED — not in paper

X.2.3 内部一致性 — 何时违反

理论上:
实践上违反情境(来自工程社区经验,标 UNVERIFIED):
  • 遮挡边界:depth head 给前景值,normal head 给”穿过遮挡”的过渡平面(梯度计算跨越深度 jump). UNVERIFIED, community report
  • 薄结构(细绳、铁丝网):depth head 因 patch 平均把薄物体抹掉;point map 失去这些点;normal 在该位置无定义.
  • OOD FOV:FOV head 估错 → point map 的 X/Y 整体放大或压缩,但 depth head 仅给 Z,所以下游若用 Z 作距离不会出错;用 point_map 重建场景会得到拉伸的盒子.
工程对策:对每帧计算 ||depth_head - point_map_Z|| 的统计量作 QA 门;论文 mask 只过滤 sky,不过滤 multi-head 不一致区. 这是 MoGe 留给下游的工程坑.

X.3 · Interpretability (2026-05-21 补)

X.3.1 三输出之间的关系 — 怎么互推

MoGe-2 在物理几何上的关系(v1 §3, v2 §Method):
所以理论上只需 (depth, FOV) 就能恢复 point map;point map 是”depth + 内参”的派生量. 冗余监督带来:
  1. 正则化:三 head 互相 sanity-check
  2. 失败定位:哪个 head 错可定位是 Z 错(depth)还是 内参 错(FOV)还是 局部梯度 错(normal)
  3. 下游适配:使用者直接拿 point_map 而不必跑 back-projection,工程节省

X.3.2 affine-invariant 究竟代表什么 — 可以恢复米制吗

MoGe-1 输出是 (scale, Z-shift) 双自由度未定(v1 §3.1,论文把全 3D translation 简化为 Z-shift,前提是 principal point 居中). MoGe-2 解决这个:直接预测 metric scale point map(arXiv:2507.02546,2025-07-03 发布). 论文说”carefully disentangles relative geometry (shape) prediction from metric scale recovery”,即 形状 仍按 MoGe-1 路线训练,scale 由独立分支恢复. 这印证了原版 §6 的预测:“2027-06 前 MoGe v2 出 metric 输出”. 预测提前一年半命中.

X.3.3 VGGT 谱系的先声 — multi-head 范式溯源

MoGe-1 (2024-10) 早于 VGGT (CVPR 2025) 几个月,且共享几个核心范式:
谱系关系: MoGe 是 single-view 的 multi-head 几何头;VGGT 把它推广到 multi-view + 加 tracking head. 二者共用”DINOv2 backbone + 多个几何任务联训 + 同一个 transformer 输出多种几何量”的设计哲学. MoGe 不是 VGGT 的子集(VGGT 没 normal head),但它是 VGGT “多 head 几何 = 通用 3D 视觉模型” 论点的 single-view 证据.
UNVERIFIED on direct citation: 在 VGGT 论文里是否明确 cite MoGe 为先声 — 时间窗紧(MoGe arXiv 2024-10-24,VGGT 投稿 2024-11 ~ 12).

X.3.4 与 Metric3D 对比 — 哲学差异

两种路线在 2026 都活着:
  • 相对轨: MoGe-1 → MoGe-2(自带 metric)→ 趋同 metric
  • 米制轨: Metric3D v1/v2 → 加 normal head(趋同 multi-task)
⚡ Surprise: MoGe-2(2025-07)已经把”affine-invariant 加 metric scale” 二合一,两条路线在 metric multi-head 上合流. 上面 §6 的 2-year falsifiable prediction 在 8 个月内命中.

X.4 · GitHub-validated pitfalls (2026-05-24 deep dive)

方法: 抓 microsoft/MoGe(~2.5k★,72 open issues / 4 PR)issues 列表 + 7 篇关键个案精读,覆盖三 head 一致性 / metric 转换 / v1↔v2 迁移 / 部署 / 与 VGGT 比较. 校准对象: §X.1.1 mask head 设计、§X.2.2 multi-head 不一致性、§X.3.2 metric 恢复路径、§3.4 与 Metric3D 哲学差异.

桶 1 — 三 head 一致性(§X.2.2 直接命中)

→ §X.2.2 验证 + 强化: 我们文档”三 head 用 joint affine-invariant loss 训练应该保持几何一致” 是论文承诺;#111 实证它在 reproduction 中不稳定 —— normal head 既不能去(去了出伪影)也不能稳训(在 20k 步 collapse). 新发现: 这是 MoGe 设计的 load-bearing 但 fragile 部分,应在 §X.2.2 加 “复现风险” 行.

桶 2 — Affine-invariant → metric 转换混淆(§X.3.2 命中)

→ §X.3.2 验证 + 校准: 我们说 “MoGe-2 carefully disentangles 形状与 scale” 是论文宣称;#75 / #97 实证 metric 输出在非 plain 单图(panorama / merged view)上 silently 退化回 affine-invariant. 应在 §X.3.2 表”测物体绝对尺寸”行加 caveat:“MoGe-2 单图 OK;merged / panorama / 多视角拼接路径 metric 不保证”.

桶 3 — v1 → v2 迁移(一致性问题,多线程跨 issue)

→ 新洞察: v1↔v2 不是 drop-in;preprocessing / FoV / scale 行为都改了但 README 没标”breaking change”. 应在 §5 / §X.3.2 新增迁移备忘: 从 v1 切 v2 前必须 (a) 对照 HF Space 验输出,(b) 重写 preprocessing,(c) panorama 路径不要假设 metric.

桶 4 — 与 VGGT / MapAnything 比较(社区主动问)

→ §X.3.3 / §6 验证: 我们说 “MoGe 单视角是 VGGT 多视角前驱”;#6 是直接证据 — 用户因 single-view 闪烁主动找时序解,正是 VGGT 谱系解决的问题. §6 falsifiable prediction “MoGe-2 出 metric 8 个月内命中” 仍站;下一步**“被 VGGT 谱系吸收”也已有社区拉力**.

桶 5 — 部署 / 实时 / 硬件

→ §5 部署模式补强: MoGe 官方 ONNX 仍未正式交付(社区在 #117 走通),实时 / 机器人 / 嵌入式部署是社区代偿区. 加一条 “生产 ONNX 走社区分支不走官方”.

桶 6 — 商业 license(独立于 Meta DINOv2 / Depth Anything)

issue 区未见 license 投诉 — 因为 MoGe 是 MIT license(github.com/microsoft/MoGe,DINOv2 sub-tree Apache 2.0),比 Depth Anything (Apache 2.0) 更宽松,比 Meta 系(部分 non-commercial)友好得多. → 新增 §X.3.4 旁注: 商业 / startup 团队选 monocular 几何 backbone 时,MoGe license 友好性是 Depth Anything 没有的 wedge.

仓库健康度速写

读者实务含义

  1. 三 head 一致性是 reproduction 风险,不是 deploy 风险 — 用预训练权重时多 head 输出大致一致;自己训会撞 #111 的 normal loss 不稳定. 想拿 MoGe 当起点 fine-tune normal? 准备好 grid artifact + spike 调度问题.
  2. MoGe-2 metric 只在 plain 单图保证 — panorama / 视频 / 多视角合并退回 affine-invariant (#97);想做 panorama metric reconstruction 别假设输出米,用 IMU / 已知物体做 anchor 重定 scale.
  3. 生产 ONNX 走社区方案 — 等 #83 官方解决可能要等很久;#117 已有可工作社区代码.
  4. 视频任务别用 MoGe — single-view feed-forward 没时序 (#6);要时序去 VGGT 或加自己的 smoothing.
  5. license 友好是 MoGe 的隐藏 wedge — MIT 比 DA v2 (Apache 2.0) 比 Meta 系更松;商业产品要 monocular 几何 backbone,MoGe 在合规上更省事.
  6. v1 → v2 不是 drop-in — 重写 preprocessing 和 panorama pipeline;对照 HF Space 验证输出 (#72 / #66 / #106).
  7. 与 Metric3D 选型: 若 mono 几何 + 商业部署 + 形状重要 / 米可缓 → MoGe;若需现成米 + canonical 内参可控 → Metric3D;若有多视角 → VGGT.

References

Boundary

本文把 MoGe 作为 relative-track 单任务 affine-invariant monocular 几何模型 (per ontology §9.5) 解构. Metric monocular 见 metric3d_dissection.md. 多视角 feed-forward 3D 见 foundations/feed-forward-3d/vggt_cvpr2025_dissection.md. 跨 embodiment scale 争论在 crossing/scale-comparison/. 到 action policy 的桥在 bridge-to-vla/feature-cloud-to-action.md.