☰
GN-Net:基于Gauss-Newton损失的多天气视觉重定位解析
2026/10/14 13:28:17 网站建设 项目流程

1. 论文解读:GN-Net 到底解决了一个什么问题

先说结论:GN-Net 这篇 2019 年的工作,核心贡献不是又造了一个端到端重定位网络,而是把“重定位结果好不好”这件事的度量方式给重新定义了一遍。它提出了一种基于 Gauss-Newton 优化的损失函数,用来替代当时视觉重定位任务里普遍使用的直接回归损失,让网络在训练时不再盲目地逼近坐标数值,而是真正去优化“图像观测和三维地图之间的几何一致程度”。

我做视觉重定位相关方向也有一段时间了,GN-Net 是我当时反复读了很多遍的一篇论文。原因很简单:它的思路并不复杂,但背后的几何动机非常深,而且它把“学习”和“几何优化”这两件事结合得很巧妙。论文题目里的 Multi-Weather Relocalization 也值得注意,说明这套方法是在多种天气条件下做的评估,并不是只在理想场景里自嗨。

如果你刚接触这个领域,可能会问:视觉重定位是什么?通俗讲,就是给一张照片,让程序回答“我在哪”。更准确地说,是估计拍摄这张照片时相机的位置和朝向,也就是 6 自由度的位姿。听起来简单,但现实场景里有光照变化、季节变化、天气变化、动态物体遮挡,同一个地方拍出来的两张照片可能看起来完全不像。GN-Net 的核心价值,就是在这种恶劣条件下仍然能给出可靠的位姿估计。

这篇论文适合谁读?我觉得有三类人值得花时间:

  • 做视觉定位、SLAM 或者 AR 相关应用的研究者和工程师。
  • 对“深度学习和几何优化怎么结合”这个话题感兴趣的人。
  • 准备入门重定位方向、想搞清楚损失函数设计逻辑的学生。

不管你是哪种,这篇文章都会给你一个清晰的路线图:GN-Net 的设计动机、损失函数的几何原理、具体的实现细节、以及我实际复现之后遇到的坑和体会。

2. 为什么需要新的损失函数:直接回归位姿的问题所在

2.1 传统姿势回归的损失到底在优化什么

在 GN-Net 之前,视觉重定位的主流做法之一是 Pose Regression,也就是用一个卷积神经网络直接从图像回归出相机的位姿。最常见的形式是:

L = ||t - t_hat|| + β * ||R - R_hat||

其中 t 是平移向量,R 是旋转矩阵或其某种表示,β 是一个用来平衡平移误差和旋转误差的权重系数。这个公式看起来顺理成章,但仔细一想就会发现几个问题。

第一,平移量和旋转量的单位不一致。平移的单位是米,旋转的误差通常用角度来表示。一个是连续的量纲,一个是归一化或周期性量纲,直接把两者加权相加,β 怎么选都难免顾此失彼。第二,旋转矩阵本身不是欧氏空间里的任意向量,它必须满足正交约束。直接回归 R 的 9 个分量,网络输出的矩阵往往不正交,后处理还要做投影修正,这一步本身就引入了误差。第三,也是最致命的:这种损失函数在网络空间里做比较,而不是在图像观测空间里做比较。网络学到了一个从图像到位姿的映射,但这个映射关系在不同场景之间差异很大,泛化性很弱。

2.2 多天气场景下的难点在哪

多天气重定位难在哪里?核心是外观变化太大。同一个地点,晴天、雨天、雪天、雾天,图像特征差异可能比不同地点的差异还大。在这种情况下,一个直接用图像回归位姿的网络,本质上是在记忆“特定外观下的图像特征和位姿之间的映射”,一旦遇到训练时没见过的外观,就很容易崩。

GN-Net 的洞察在于:与其让网络去记忆外观到坐标的映射,不如让网络去预测“图像和三维点之间的对应关系”,然后通过几何优化来求出位姿。这有点像把问题从“直接背答案”改成了“先把题目条件看清楚,再一步步推理解出来”。网络只负责提取和匹配特征,最后一步交给无可争议的几何计算来处理。

3. GN-Net 的核心思路:把位姿估计拆成两阶段

3.1 第一阶段:场景坐标回归

GN-Net 首先训练一个网络,对输入图像中的每个像素(或稀疏采样点)回归它在三维场景坐标系中的坐标。这个技术的名字你可能听过:Scene Coordinate Regression。它的本质是建立一个稠密的 2D-3D 对应关系:图像上某个像素对应场景中哪个三维点。

这一步和传统特征匹配很不一样。传统方法先检测关键点,再算描述子,再匹配;而场景坐标回归是直接让网络学习像素和三维点的映射,相当于跳过了描述子计算这一步。好处是,网络可以整合全局上下文信息来做判断,即使局部区域模糊或者缺乏纹理,也可以通过周围环境推断出大致的位置。

但这个网络的输出只是初值,不会特别准,尤其是在遮挡区域、重复纹理区域、或者光照剧烈变化的区域,单点预测的误差可能很大。所以 GN-Net 并不指望网络一步到位,而是在后面加了一个几何优化环节来修正。

3.2 第二阶段:Gauss-Newton 优化的几何意义

有了 2D-3D 对应关系之后,理论上可以通过 PnP(Perspective-n-Point)算法求解相机位姿。但 PnP 只对纯几何对应关系有效,而且通常需要 RANSAC 来剔除错误匹配。GN-Net 的创新点在于:它没有直接用 PnP,而是把 Gauss-Newton 优化作为一层可微模块嵌入到整个网络流程中。

你可以在前向传播时做 Gauss-Newton 迭代,得到优化后的位姿;在反向传播时,梯度可以透过这个优化过程传回场景坐标回归网络。这样就实现了端到端训练,但网络从“直接预测位姿”变成了“预测对应关系,再由优化器计算位姿”。

Gauss-Newton 方法本身是一种求解非线性最小二乘问题的迭代算法。对于视觉重定位来说,误差项就是“重投影误差”:把预测的 3D 场景点按照当前估计的位姿投影回图像平面,比较它和观测到的 2D 点的距离。如果位姿不准,这个距离就大;如果位姿准,这个距离就小。

3.3 为什么 The Gauss-Newton Loss 比直接回归更稳

GN-Net 的损失函数不是比较预测位姿和真值位姿之间的距离,而是比较“用预测位姿重投影得到的像素位置”和“观测像素位置”之间的距离。这个设计有多重好处。

好处一是量纲统一了。所有误差项都在像素坐标系里衡量,不再需要纠结平移和旋转之间的权重系数。好处二是几何意义清晰。重投影误差是物理意义上的误差,它直接反映位姿估计对图像观测的拟合程度。好处三是梯度信息更丰富。对场景坐标回归网络的回传梯度,会经过 Gauss-Newton 优化步骤,包含了位姿和三维点之间的耦合关系,网络能够学到对位姿估计更有用的特征。

简单打个比方:直接回归位姿就像蒙着眼猜终点在哪,而 GN-Net 是让选手先看清起点和路标,再通过三角计算推导出终点。后者对环境变化更鲁棒,因为它依赖的是几何关系,而不是外观记忆。

4. 损失函数与几何优化的形式化推导

4.1 重投影误差的定义

假设图像上有 N 个像素点,网络对第 i 个像素预测的场景坐标为 p_i。相机内参矩阵为 K,当前估计的位姿由旋转矩阵 R 和平移向量 t 表示。那么第 i 个像素对应的预测重投影坐标可以写作:

\hat{x_i} = K * (R * p_i + t)

观测到的真实像素坐标是 x_i。重投影误差就是:

e_i = \hat{x_i} - x_i

Gauss-Newton 优化的目标函数是所有误差项的平方和:

E(R, t) = Σ ||e_i||²

我们要做的是找到让 E 最小的 R 和 t。注意这里的 p_i 虽然是网络预测的,但在优化阶段被当作常量,因为我们优化的是位姿变量 R 和 t。

4.2 Gauss-Newton 迭代步骤

Gauss-Newton 方法的核心是用误差函数的雅可比矩阵来近似 Hessian,从而迭代更新位姿。设状态向量为 ξ,它表示位姿的增量扰动,通常用李代数 se(3) 来表示。误差项对状态向量的雅可比矩阵为 J,那么每次迭代求解的线性系统是:

J^T * J * Δξ = -J^T * e

求解得到 Δξ,然后更新位姿:

ξ ← ξ + Δξ

在这个过程里,J 的计算很关键。对于重投影误差,需要链式求导:误差先对 3D 点投影后的坐标求导,再对位姿扰动求导。这两个导数都有解析形式,可以用李代数扰动模型推导出来。推导的时候建议参考 SLAM 里常见的雅可比矩阵形式,网上资料很多,但一定要自己手推一遍,否则后面实现反向传播时很容易出 bug。

4.3 Loss 如何反传到网络

训练时,最终损失是在所有采样点的重投影误差平方和基础上再加一个正则项,或者直接取优化收敛后的残差。关键是反向传播:损失对位姿的梯度已经为零(因为位姿是优化出来的最优值),但损失对场景坐标预测 p_i 的梯度不为零。

这就是 GN-Net 的巧妙之处。虽然优化步骤本身是迭代的,但我们可以把它当作一个带隐函数梯度的层来处理。具体做法是利用隐函数定理,或者直接展开迭代过程做反向传播。论文里采用的方式是在一定迭代次数后停止优化,然后通过完整的计算图回传梯度。实测下来,这样做的训练稳定性比完全展开要好一些。

我在复现时参考过一个开源实现,它用的是 PyTorch,将 Gauss-Newton 优化步骤写成了自定义 autograd Function。只需要定义 forward 和 backward 两个方法,backward 里手动计算损失对场景坐标的梯度。如果你对这个实现感兴趣,最好先理解李代数的左扰动和右扰动模型,这是整个梯度推导的基础。

5. 网络结构与训练流程细节

5.1 编码器与场景坐标回归头

GN-Net 的特征提取骨干网络用的是当时比较常见的编码器结构,类似 VGG 或者 ResNet 的前几层。输入是单张 RGB 图像,输出是稠密的场景坐标图,分辨率与输入成比例缩小若干倍。输出层的最后一层没有用激活函数,因为场景坐标是实数值,可能分布在较大的空间范围内。

这里有一个关键参数:输出场景坐标的维度是 3,即 XYZ。对每个像素,网络都预测一个三维坐标。但在训练时,并不是所有像素都对损失有贡献。对于遮挡严重、超出边界、或者属于天空等无效区域的像素,需要设置一个掩码,在计算损失时排除掉。

5.2 训练数据的准备方式

为了训练场景坐标回归网络,需要知道每张训练图像的像素和三维场景坐标之间的对应关系。这通常通过 RGB-D 传感器采集,或者从已知的 3D 场景模型和相机位姿通过投影获得。

以我复现时用的数据集为例,在训练时使用了一片区域内的多张图像,每张图像对应一个真实的位姿。然后把这个位姿和深度图结合起来,反投影得到每个像素的三维坐标。直接反投影的公式是:

P_3D = R^{-1} * (K^{-1} * z * [u, v, 1]^T - t)

其中 z 是该像素的深度值,[u, v] 是像素坐标。这个步骤做起来不复杂,但需要注意坐标系的一致性,搞错了整个训练就废了。

5.3 训练策略和损失权重

GN-Net 的训练分为两个阶段吗?其实可以端到端训练,但直接端到端训练很容易不收敛。我的实践经验是:先单独训练场景坐标回归网络,使用 L1 或者 Smooth L1 损失做监督。等网络输出的场景坐标基本准确之后,再引入 Gauss-Newton 损失层进行微调。这个策略有点像先让选手学会看路标,再教他如何综合所有路标判断位置。

如果从头端到端训练,网络很容易陷入局部最优。原因是 Gauss-Newton 优化对初始位姿比较敏感,如果网络输出的场景坐标太差,优化步骤会陷入错误的极值,梯度信号也会变得混乱。先预训练,再做联合优化,能大大减少这个问题。

5.4 推理阶段的 RANSAC 是否还需要

这个问题我在读论文时纠结了很久。答案是:GN-Net 在推理阶段仍然可以使用 RANSAC 来做稳健估计,但它的设计目标之一就是让网络预测的场景坐标足够可靠,从而可以不依赖 RANSAC 也能获得不错的结果。

实际使用中,我倾向于保留一个轻量的 RANSAC 后处理,尤其是在室外大规模场景中。因为场景坐标回归网络对动态物体和遮挡区域的预测依然会有错误,RANSAC 可以筛掉这些离群点。不过,如果你追求端到端的可微推理流程,也可以省掉 RANSAC,直接在预测的对应关系上做 Gauss-Newton 优化。

6. 对 Multi-Weather 场景的适应机制

6.1 外观变化下的特征学习

多天气条件下,图像的纹理和颜色变化非常剧烈,但三维结构保持不变。GN-Net 的设计天然适合这种场景,因为场景坐标回归的目标和外观无关,只和位置有关。网络必须学会忽略外观变化,专注于那些真正稳定的几何线索,比如建筑物的轮廓、路面的边界、固定物体的边缘。

但这不代表什么问题都没有。雨天路面有积水反光,雪天大片区域被白雪覆盖,雾天对比度很低。网络很容易被这些干扰带偏。论文里在训练数据里混合了多种天气条件,并且配合数据增强,包括改变亮度、对比度、饱和度,模拟不同天气下的成像差异。这一招看起来很朴素,但真到实际训练时你会发现它比很多花哨的网络结构都管用。

6.2 光照与季节变化对场景坐标回归的影响

光照变化除了改变亮度,还会改变阴影方向。同一面墙,上午和下午的阴影区域完全不同。如果场景坐标回归网络只看得到局部纹理,很容易把阴影边缘误判成真实边界。但 GN-Net 的 Gauss-Newton 损失让网络在做预测时必须考虑全局一致性,因为错误的场景坐标会导致重投影误差在优化时变大,这种来自几何的监督信号能有效抑制外观变化带来的歧义。

我在实验中发现,如果在训练时不加 Gauss-Newton 损失,场景坐标回归网络在正常光照下表现还行,但一到强烈侧光或者逆光场景,预测精度下降得很快。加了 GN 损失之后,这种情况改善明显。这让我相信,几何约束确实是提高泛化能力的重要助力,而不是可有可无的装饰。

6.3 从单场景到跨场景的泛化边界

GN-Net 的思想在单场景内重定位效果很好,但跨场景的泛化能力依然有限。场景坐标回归本质上是针对特定场景的,因为三维坐标的定义依赖于该场景的地图坐标系。换一个场景,坐标意义就变了。所以 GN-Net 更适合在已知地图的环境里做重定位,而不是像图像检索那样直接扔到一个完全没见过的场景里。

这一点必须说清楚,因为很多初学者会误以为 GN-Net 是一个通用的视觉定位系统。它其实是一个“基于已有三维地图的定位模块”,在智能驾驶、AR、机器人导航这些有先验地图的应用场景里非常合适,但如果你想要一个完全通用的零样本定位方案,GN-Net 不是答案。

7. 复现过程中的关键参数与踩坑记录

7.1 训练参数参考

我复现时用的配置大致如下:骨干网络为 ResNet-34 的前几层,输入图像尺寸为 512x384,输出场景坐标图尺寸为 64x48。初始学习率 0.001,使用 Adam 优化器,预训练阶段跑了 40 个 epoch,联合微调阶段又跑了 20 个 epoch。Gauss-Newton 迭代次数设为 5 次。这些参数不一定是论文里的原版,但实测可以稳定收敛。

7.2 常见问题排查速查表

问题现象可能原因解决方案
训练初期损失不下降场景坐标预测输出波动太大先只训练场景坐标回归,不启用 GN Loss
Gauss-Newton 迭代发散初始位姿太差增加 RANSAC 初始化,或增大采样点数
重投影误差一直很大相机内参或坐标系定义错误检查 K 矩阵和 world-to-camera 变换方向
有效像素掩码被过度剔除掩码阈值设置不合理可视化掩码,确认前景物体是否被覆盖
反向传播梯度为 NaN雅可比矩阵计算错误用数值梯度验证手推导数

这里特别提醒一下坐标系问题。视觉重定位涉及多个坐标系:像素坐标系、图像坐标系、相机坐标系、世界坐标系。每一个变换都必须确保方向正确。我当时在这个上面踩了一整天的坑,最后发现是 world-to-camera 的旋转方向写反了,导致所有重投影误差都大得离谱。

7.3 关于训练时间的现实预期

别指望用一张消费级显卡在几天之内跑完整个流程。我用的单张专业级显卡,预训练场景坐标回归网络需要大约 6 小时,联合微调需要再 3 小时左右。数据集越大、图像分辨率越高,时间也会线性增长。如果你只是想验证 GN-Net 的核心思想,建议先用一个小场景、低分辨率的配置跑通全流程,再逐步放大。

7.4 对论文中某开源实现的理解

论文并没有在最初发布时就附带官方代码,但社区里出现了几个非官方实现。我参考的那个版本结构比较清晰:场景坐标回归网络和 Gauss-Newton 优化层完全分离,方便单独调试。这个实现的 Gauss-Newton 层是用自定义 autograd Function 写的,forward 里做了固定次数的牛顿迭代,backward 里用了链式法则配合逆 Hessian 求解梯度。

如果你打算自己实现,我建议先不做端到端,而是在预训练之后,先生成固定的场景坐标预测,然后纯用几何优化来评估重定位效果。这一步通过了,再考虑把梯度接回去做联合训练。这样能有效隔离问题,不至于一出 Bug 就找不着北。

8. GN-Net 的影响与后续发展路线

GN-Net 的贡献不只是提出了一种损失函数,更重要的是它示范了一个思路:深度学习的预测结果不应该孤立存在,而是应该和明确的三维几何约束结合起来。这影响了后面很多工作,比如后来的深度 PnP、可微 RANSAC、以及基于场景坐标回归的多种变体。

从论文标题里的 Multi-Weather Relocalization 也能看出,当时学术界已经意识到鲁棒定位不能只依赖外观特征,必须引入几何不变性。GN-Net 在这个方向上迈出了很扎实的一步,但它的局限性也很明显:依赖已知三维地图、跨场景泛化能力弱、对初始值敏感。

后续研究者在这些方面做了很多改进,比如引入多模态特征融合、用学习的方式生成更可靠的对应关系、或者把 GNN 引入注意力机制来筛选匹配点。但不管怎么变,Gauss-Newton 优化作为端到端可微几何模块这个思路,至今仍然有很强的参考价值。我现在做定位相关项目时,遇到需要把学习和几何结合的场景,第一个想到的依然是类似 GN-Net 的框架。

9. 阅读论文的实操建议与我的心得体会

读 GN-Net 这篇论文,不要只看完摘要和实验结果就完事。建议你重点做两件事:第一,自己动手推导一遍重投影误差对位姿和三维点的雅可比矩阵。这一步能帮你理解 Gauss-Newton 为什么能在像素空间中迭代优化。第二,把网络输出场景坐标到优化求解位姿的流程在脑海里过一遍,搞清楚数据流中间每一步的形状和坐标变换。

我在实际读这篇论文时,最深的体会是:要把重点放在“损失函数设计的动机”上,而不是网络架构。GN-Net 的网络结构并不花哨,真正的精华全在优化层。很多学术论文的卖点都在架构创新,但 GN-Net 是一个典型的损失函数创新的例子,它告诉你,有时候改变学习目标,比增加网络复杂度的收益更大。

如果你希望在自己的项目里借鉴 GN-Net,我的建议是不要一开始就完整复现。先做一个简化版:选一个现有的场景坐标回归网络,不用为特定任务设计,把它输出的场景坐标当作固定值,然后用 Gauss-Newton 优化求解位姿,对比一下和直接用网络回归位姿的效果差距。你会发现哪怕不经过端到端训练,仅仅是把优化步骤加进去,精度就已经有可观的提升。这一步跑通之后,再考虑把优化层变成可微模块做联合训练,收获会完全不一样。

最后提醒一句:如果你同时研究多个相关方向,建议把 GN-Net 和深度 PnP、可微 RANSAC 等算法放在一起读。它们共享很多几何优化的基础,但解决问题的角度各有不同。对照着看,比单独读任何一篇都要收获更多。

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

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

立即咨询