做视觉定位的人,多少都动过这个念头:图像分类、目标检测都能被CNN端到端搞定,相机位姿为什么不行?一张图进去,六自由度的位姿(位置加朝向)直接输出,不建3D地图、不用特征匹配、不用PnP、不用RANSAC,整个管线干净得让人心动。PoseNet在2015年出现之后,各路变体层出不穷,貌似给了大家一个“可以从传统几何派转向学习派”的理由。
但真把它拉到实际场景里用的时候,问题就来了:同一栋楼里精度还行,换一栋楼基本不能用;训练集上误差小得漂亮,测试集上误差突然放大一个数量级;室内小场景勉强能看,室外大场景直接飘掉。这些问题到底是因为“网络还不够强”,还是“这个路线本身就存在天花板”?如果只是工程调优能解决的,那砸更多算力继续卷就好;如果是路线问题,就得尽早知道边界在哪。
这篇2019年的论文《Understanding the Limitations of CNN-based Absolute Camera Pose Regression》,就是冲着这个疑问去的。它没有急着提出一个新模块去刷榜,而是非常严谨地设计了一组对照实验,试图回答三个问题:APR(Absolute Pose Regression,绝对位姿回归)方法到底在学什么?它能泛化到什么程度?它的精度天花板由什么决定?这篇文章我早先读完时只觉得“说得挺对”,后来自己动手复现、再到真实数据上踩过若干坑之后,才意识到论文里那些结论的分量。这篇笔记就把论文的论证逻辑,以及实际做项目时会用到的点,一起梳理一遍。如果你正在做视觉定位、SLAM重定位、AR初始化,或者准备把端到端位姿估计写进技术方案,这篇内容应该能帮你少走不少弯路。
1. 先交代问题:为什么端到端定姿一度被寄予厚望
1.1 传统视觉定位流程的痛点
传统视觉定位的典型流程是:先离线建好一个包含三维点云和特征描述子的场景模型,在线查询时,从查询图像里提取特征点,与场景模型做特征匹配,然后通过PnP求解相机位姿,RANSAC负责剔除误匹配。这套流程精度高、可解释性强,几十年来都是视觉定位的黄金标准。
但它的问题也显而易见。第一,建图和维护3D模型成本高,场景一变化就得重新更新地图。第二,在线特征匹配在纹理稀疏、重复纹理、剧烈光照变化的环境下容易失败。第三,整个过程环节之间耦合得很紧,特征提取、匹配、位姿求解任何一个环节出错,最后结果就是空的或者错的。所以在实际工程里,人们天然希望有一个更“鲁棒、简洁”的替代方案,最好连地图都不需要。
1.2 APR方法的卖点与典型代表
PoseNet这类APR方法从根本上改写了这个问题:训练阶段用大量带位姿标注的图像,直接学习“图像到位姿”的映射;推理阶段网络前向一次,输出平移向量和旋转四元数。它完全绕开了特征匹配和几何优化,也不需要在推理时访问3D点云。这种简洁性是它最大的吸引力。
随后几年,改进工作层出不穷。有的在损失函数上做文章,把位置误差和旋转误差加权组合;有的在输出结构上做文章,预测一个位姿分布而不是单点位姿;有的引入时序信息,把单张图变成连续帧输入。这些变体在常见数据集上看起来越做越好:误差从几米降到一两米,转角从几度降到一两度。如果不加分析,确实很容易得出“再发展几年就能替代传统方法”的结论。
而这篇论文最关键的态度是:先不急着相信这些数字。作者想弄清楚,这些漂亮的数字里,有多少是模型真的理解了三维场景,又有多少只是把训练数据的分布“背”了下来。这个追问直接决定了方法的可信度——一个能真正理解几何的模型,和一个把场景背下来的模型,在真实项目里的命运是完全不同的。
2. 这篇论文最狠的一刀:随机特征也能“拟合”位姿
2.1 实验设计:把特征提取器冻成随机数
论文第一个核心实验,设计得非常干净。通常训练一个APR网络,特征提取器(比如骨干网络)和位姿回归头是一起训练的。作者做了这样一个对照:把特征提取器的权重完全初始化成随机值,并且冻结住,训练过程中完全不更新;只让后面加的一小撮全连接回归层去学习,把随机的高维特征映射到位姿空间。
这个操作乍一听有点疯狂——特征提取器是随机的,意味着网络看到的“图像内容”其实是一堆噪声模式,怎么可能学出位姿来?但实验结果出乎意料:在训练场景内部,这个随机特征版本的定位精度并没有比正常训练的版本差太多,某些配置下甚至能打平。
我当时看到这个结果的第一反应是:这也太反直觉了。但仔细想一想,逻辑其实通顺。随机卷积核虽然不包含语义,但它仍然给每张图像产生了一个高维的、稳定的特征响应模式。同一个场景里的图像,因为内容相近,随机特征也相近;不同位置的图像,随机特征也有区分度。也就是说,随机特征本身就是一个极强的、可用的图像指纹。后面那个全连接头,只需要学会把这个指纹映射到对应位姿即可。
2.2 结果说明了什么:记忆与泛化的分界线
这个实验的意义,在于它提供了一个非常有力的证据:APR方法更像一个“带插值的检索器”,而不是“三维几何的理解器”。当训练集和测试集来自同一场景时,网络真正利用的,是训练图像位姿标签在特征空间里的分布。查询图像的特征落在这个分布中间,回归头就给它插值出一个差不多的位姿;如果查询图像的特征落在分布之外,结果就会明显变差。
换句话说,网络学到的不是“图像如何决定位姿”这种因果映射,而是“在这个场景的数据分布里,什么特征大概对应什么位姿”的经验拟合。这个拟合过程确实需要一定的网络容量,但并不需要网络真的理解图像内容。这也解释了为什么随机特征也能凑效——特征里的语义信息根本不重要,重要的是特征空间的几何形状和标签分布的对应关系。
这里补充一个我自己复现时的体会。这个实验特别适合作为你项目的对照组:不管你在做位姿回归还是其他连续值回归任务,都可以试着把骨干网络冻成随机权重,只训练回归头。如果随机特征版本的表现并没有差太多,那就说明你的模型大概率在记忆数据分布,而不是在学习任务本身。这个检查成本极低,但对判断模型能力非常有效,强烈建议实践一次。
2.3 位姿回归到底在学什么
顺着这个思路,论文进一步分析了训练数据规模对APR的影响。他们发现,当训练图像数量减少时,APR的精度会显著下降;而一个简单的、基于检索的基线方法(在训练图像里找最近邻,然后用近邻的位姿做插值)受到的影响要小得多。这说明APR需要稠密覆盖整个位姿空间,才能“背”得足够好。
这和分类任务完全不同。图像分类学的是类别之间的抽象边界,所以哪怕每类只有几张图,也能泛化到未见过的同类别图片;而APR学的是连续位姿空间里的稠密映射,训练样本一旦稀疏,插值就失效。一个很直接的推论就是:对大场景、长走廊、多楼层这种位姿空间很大的环境,APR需要的数据量和模型容量会急剧膨胀,这在实际项目中几乎不可承受。
从这个角度看,早期PoseNet在室内小场景上的成功,部分原因是场景空间有限、训练数据容易覆盖;到了室外大规模环境,同样的方法很快就碰壁。论文指出的不是“CNN拟合能力不够”,恰恰相反,是“拟合能力太强,以至于掩盖了它没有学会几何泛化的事实”。这句话值得所有做端到端视觉任务的人反复琢磨。
3. 精度之外的硬伤:跨场景泛化几乎为零
3.1 从训练场景换到新场景后的表现
如果说“随机特征实验”是戳穿了APR在学习层面的假象,那“跨场景实验”就是把它在应用层面的底裤也扒了。论文设计了这样一个测试:用A场景的数据训练APR模型,然后拿到B场景去测试,看精度会掉多少。
结果非常惨烈。正规训练过的APR模型在B场景上的定位结果,几乎退化到“不如随机猜测”的程度。原因不复杂:模型在训练过程中把所有几何信息都隐式编码进了那一堆网络参数里,而这一堆参数是场景专属的。换一个场景,场景的三维结构、视角分布、光照条件全变了,网络参数完全无法迁移。
这一点其实很多人都隐约知道,但论文把它做成了严格的实验,并且和另一类方法做了对比:基于场景坐标回归的方法。在论文里,这类方法走的是“逐像素预测三维场景坐标+RANSAC/PnP求解位姿”的路线。场景坐标回归网络同样依赖场景数据,但它保留了“像素级几何对应”这个中间表示,因此在同场景内对未见过视角的泛化能力,明显优于直接回归位姿的APR。
3.2 维度诅咒:高维姿态空间的稀疏采样
为什么APR在同场景内的泛化也受限?论文给出一个很关键的解释:相机位姿是一个6自由度的连续空间,而训练数据只是这个空间里的稀疏样本。
想象一下,你手上有一张场景的照片,相机的精确位置和朝向是那个6维空间里的一个点。训练时你只是在这个空间里撒了几千个点,网络要做的事情,本质上是把这些离散点之间的空隙也填满。但6维空间比3维空间稀疏得多,数据量稍微不够,空隙处的预测就会变得不可信。更麻烦的是,位姿空间里还存在拓扑问题,比如相机绕一圈回到原点附近时,位置接近但朝向可能完全不同,这类歧义是纯回归方法很难处理的。
这也解释了为什么APR对训练数据的密度异常敏感。作者观察到,同一个网络配置下,只要训练图像数量降一个量级,误差立刻翻倍甚至更多。相比之下,基于特征的定位方法因为依靠局部特征匹配,原则上只要求“场景里出现过足够多的可匹配特征点”,而不需要对整个位姿空间做密集采样。这个区别在工程中的数据采集环节体现得特别明显:做APR你得把每一寸可走空间都采一遍,做特征匹配你只需要保证特征覆盖度够用就行。
3.3 为什么相对位姿回归比绝对位姿回归更聪明
论文还对比了另一条路线:不直接回归绝对位姿,而是回归连续帧之间的相对位姿(Relative Pose Regression,RPR)。结果发现,在同样的精度评价标准下,RPR方法通常明显优于APR方法。
原因也很直观。相邻两帧之间的相对运动通常很小,数据空间被约束在一个很窄的流形上,网络学起来容易得多;更重要的是,相对位姿的标注不受全局坐标系漂移的影响,模型不需要去记住“整个场景长什么样”,只需要理解“图像之间的运动关系”。再配合后端的全局姿态图优化,RPR甚至能恢复到相当可用的定位精度。
当然,RPR也有它的代价:它无法单独给出全局位姿,必须依赖一个全局参考,通常需要额外的回环检测或起点已知。论文在这里并没有贬低RPR,而是用对比说明了一个道理:把问题拆成“容易学习的相对运动部分”和“交给几何优化的全局部分”,往往比一步到位端到端输出绝对位姿更可靠。这个“拆分”的思想,后来也成了我做定位系统时的一条重要设计原则。
4. 和传统方法放在同一张表上:差距不是一点半点
4.1 定量对比中暴露出的数量级差异
论文在不同基准上把APR和传统特征匹配方法(以及场景坐标回归)放在一起做了定量对比。结论很直接:在常见室内外定位基准上,传统特征匹配方案的中位误差通常能到厘米级到分米级,而APR方法的误差普遍在米级,旋转误差在若干度。
关键的不是“APR不如传统方法”这个结论本身,而是差距的性质——这不是调参就能补上的。传统方法在特征覆盖良好的区域,精度受限于特征检测和PnP的数值精度;APR则受限于网络对位姿空间插值的固有误差。前者是工程问题,后者是方法论的天花板,两者的“可改进空间”完全不同。
| 方法类型 | 典型精度量级 | 是否需要3D模型 | 跨场景泛化 | 推理成本 |
|---|---|---|---|---|
| 特征匹配+PnP/RANSAC | 厘米级到分米级 | 需要 | 只需更新地图特征 | 中高 |
| 场景坐标回归+几何优化 | 分米级 | 训练时需要 | 同场景内较好 | 中 |
| 绝对位姿回归(APR) | 米级 | 不需要 | 基本无法泛化 | 低 |
| 相对位姿回归+姿态图优化 | 分米级到米级 | 需要全局参考 | 依赖回环与参考帧 | 中 |
4.2 APR的实际适用精度区间
基于这些实验,可以大致画出APR的“可用区间”:在训练场景内部、位姿分布覆盖良好、且对精度要求不苛刻(米级定位、十几度朝向)的场景下,APR能提供一个轻量的粗定位结果。一旦要求提高,比如要做厘米级的AR叠加,或者想在未建图区域定位,APR就基本出局了。
我自己的经验是,如果你只是想判断“用户大概在这栋楼的哪个房间”,APR勉强可以;但如果你要做导航级的位姿输出,必须叠加其他手段。论文虽然没有直接给出这样的工程建议表格,但从它的实验数据里完全可以推出这个边界。对一个做应用的工程师来说,知道边界在哪,甚至比知道上限在哪更有价值——因为你不会再抱着不切实际的期望去选型。
4.3 为什么特征匹配+几何校验依然不可替代
那到底为什么传统方法依然这么能打?论文的分析让我印象很深:传统方法全程在“显式几何”的约束下运行。特征匹配给出的是图像点和三维点的对应关系,PnP利用的是刚体变换的几何约束,RANSAC在几何上验证每个假设是否与所有观测一致。每一步都在利用“相机成像的物理规律”,这些规律是绝对可靠的先验。
而APR把所有这些约束都压缩到一个高维函数的拟合里。它没有显式的深度,也没有显式的几何对应,更没有物理校验环节。网络能做的只是从数据统计规律里“猜”一个位姿,这个猜测自然可以在数据覆盖范围内表现不错,但一旦遇到分布外的输入,就失去了任何兜底能力。
还有一个常被忽略的点:特征匹配方法天然支持增量式扩展——新场景只需要新特征点加入地图,旧地图不用动;而APR每加一个新场景,往往需要重新训练或至少微调整个网络。论文虽然没有在运营成本上展开讨论,但对实际项目来说,这一点往往是压死骆驼的最后一根稻草。很多团队试完APR后又退回传统方案,不是因为精度不够,而是因为“每次换场景都要重新训练”这件事在工程上根本维持不下去。
5. 埋在结论里的关键洞察:缺乏几何约束是根本原因
5.1 端到端网络里没有“几何”这件事
把论文的所有实验串起来看,你会发现它真正想说的只有一句话:APR之所以有这些局限,是因为它的内部没有一个“三维几何”的显式表示。
这句话看似简单,但值得展开。像场景坐标回归那样输出三维场景坐标,网络其实在内部被迫学会了“每个像素对应的三维点在哪”,这个中间表示就是显式几何;而APR直接回归位姿,网络完全不需要知道三维结构,它只要记住“这组特征对应这个位姿”就行。后者的学习目标更短视,所以更容易拟合,也更难泛化。
这就好比一个学生考试时直接背答案,而不去理解题目背后的公式。背答案在题库内(训练场景)当然能拿高分,但题库一变(新场景)就原形毕露。论文的实验恰好证明了这一点:APR在同场景内成绩尚可,跨场景直接失效;而理解了“公式”的方法(带显式几何),即使在同样的考试制度下,面对没见过的新题也表现更稳。
5.2 输出表示的坑:四元数、尺度与歧义
除了“没有几何”这个根本问题,论文也对输出表示本身的坑做了分析,这部分对写代码的人来说特别实用。
首先是旋转表示。很多APR方法用四元数作为朝向输出,但四元数有两个数学上的坑:一个是单位四元数和它的负值表示同一个旋转,网络在回归时如果不做特殊处理,会在对称性上产生歧义,拖慢收敛;另一个是四元数空间的距离度量不直观,L2损失在四元数空间里并不直接对应角度误差。论文提醒我们,输出表示的选取会在很大程度上影响精度和训练稳定性。
其次是尺度与平移耦合的问题。位置误差通常用欧氏距离衡量,但同一个误差在不同场景尺度下的意义完全不同:室内0.5米可能是灾难,室外0.5米可能无所谓。如果网络不感知场景尺度,它实际上很难在所有环境里保持一致表现。这类问题在论文里被归纳为“输出表征的选择对回归任务有决定性影响”,我建议所有要做位姿回归的人把这一部分多读几遍——很多莫名其妙的训练不收敛,根子其实就在输出表示上。
5.3 对后续研究方向的直接影响
这篇论文发表之后,学术界对端到端位姿回归的态度明显冷静了许多。后续一个很明确的研究趋势,是把几何约束重新引入学习管线:有人在损失函数里加多视图几何一致性,有人用可微PnP/RANSAC把几何优化嵌进网络,有人转向场景坐标回归和深度特征匹配的结合。可以说,这篇论文为“学习与几何结合”的路线扫清了障碍——它证明了纯粹端到端路线有天花板,但不等于“学习没用”,恰恰是给“学习在哪里有用”划了范围。
从我观察到的后续工作看,真正在工程上立住脚的,几乎都是混合方案:用深度学习做特征提取、匹配、检索这些“感知”环节,再用经典几何做“几何估计”环节。这和论文的结论高度一致。如果你正在调研相关课题,看到“端到端位姿回归再创新高”这类标题时,可以先对照这篇论文提几个问题:它跨场景测了吗?它跟检索基线比了吗?它的“新高”是不是只在特定小场景里成立?
6. 读完之后,我做项目的思路变了
6.1 什么样的任务还值得用APR
我不是说APR一无是处。读完论文后,我给自己总结了几条“还能用APR”的判断标准:第一,任务是粗定位,允许米级误差;第二,场景固定,且能方便地采集到覆盖整个位姿空间的训练数据;第三,对推理延迟和资源占用极其敏感,不想引入特征匹配之外的额外环节;第四,系统后续还有精配准模块,粗结果只需要提供一个初始化。
满足这些条件时,APR的价值在于它极简的推理流程。比如在移动端AR里,先用APR快速判断用户大概在哪个区域,再在确认的小范围里做特征匹配精定位,整体体验会好很多。这个思路在许多后来的实践里被反复验证,论文虽然没有直接推荐这种组合方案,但它的分析为这种混合方案提供了理论上的解释:既然APR擅长“分布内插值”,那就把它放在“分布内”的粗定位场景里用,把硬骨头留给几何方法啃。
6.2 评估模型时最容易踩的坑
读完论文后,我对“如何评估一个定位模型”变得格外敏感。现在回头看,很多论文里看似漂亮的数字,几乎必然要打折扣:只报告训练场景内的结果,不报告跨场景;只报告整体误差,不报告误差分布;只和同门类方法比,不和检索基线、传统基线比。
我自己现在评估位姿模型,至少会做四件事:第一,加一个“最近邻检索基线”,看复杂模型比基线好多少;第二,把训练数据和测试数据在空间上做严格划分,保证测试图像来自未训练过的位置;第三,画出误差的空间分布图,看误差是否集中在某些区域;第四,随机初始化骨干网络跑一轮,作为模型能力的下限参考。这四件事都直接得益于论文里那些实验设计的启发。尤其是“随机特征对照”和“检索基线”,这两个成本极低、信息量极大的实验,能让模型的真实水平立刻现形。
6.3 混合方案是当前工程落地的最优解
最后说说我目前认为最稳妥的工程落地思路:用轻量级全局检索(比如全局描述子)缩小候选范围,再用局部特征匹配加RANSAC/PnP求解精确位姿,如果计算资源允许,再叠加一个基于场景坐标或可微PnP的深度细化模块。这套方案在精度、泛化能力、可扩展性上都经过了大量验证,论文的分析也为这个方向提供了理论背书。
如果你非要在系统里加入APR,我的建议是把它放在“提供粗初始位姿”的位置,不要指望它直接输出最终结果。同时,务必要在方案里保留一条纯几何的兜底路径,以防学习模块在异常输入下输出离谱结果。这个兜底思想,也是我从“缺乏几何约束”这个核心结论里延伸出来的工程原则——学习模块负责提供候选,几何模块负责做最终裁决,两者各司其职。
最后分享一个我自己养成的小习惯:每当看到一篇位姿回归论文里没有“随机特征对照”或者“检索基线”,我都会在心里先打个问号。在这篇论文之后,判断一个模型到底是在学习还是在记忆,成了我看相关工作的默认动作。数据和代码能解决大部分“能不能跑”的问题,但只有这种细致的归因分析,才能回答“为什么能跑、换个环境还能不能跑”。希望这篇笔记也能帮你建立起同样的直觉。