![]()
先问你一个问题:如果让你闭着眼睛,只凭刚刚十几秒的身体感觉往前走,你能走多远不迷路?
大概率走不了几步就得睁眼?认。可是阿里的AMAP CV Lab团队做了一件听起来更离谱的事:让一个AI模型只看最近11帧画面,就在一段8.6公里、48656帧、持续27分钟的北京望京街景视频里,把摄像机的完整轨迹和三维场景都重建了出来,而且误差控制得比那些"记性更好"的模型还小。
这篇论文叫《Revisiting Local Context for Long-Horizon Streaming 3D Reconstruction》,讲的是一个反常识的选择:在所有人都在拼命给AI装更大记忆的时候,这个团队反而把记忆砍到了极致,然后靠这个"健忘"的设计打赢了记忆力更强的对手。
这事到底是怎么回事,得从"流式三维重建"这个问题说起。
从视频里"看出"相机在哪、世界长啥样
想象你戴着一台摄像机走在路上,边走边录。现在有个任务:只用这段视频,反推出你走过的每一步具体在哪个位置、朝向哪个方向,同时还原出你路过的每一栋建筑、每一条街道的三维形状。这就是三维重建要干的事,自动驾驶要用它来定位,机器人靠它来导航,AR眼镜靠它来理解你面前的房间。
早些年这活儿是靠一整套精密的工程流水线做的,找特征点、算三角关系、做全局优化、检测是否绕回了原路。近几年出现了一批"喂图就能出结果"的深度学习模型,比如DUSt3R和它的后续者VGGT、Pi3,这些模型不需要你告诉它相机参数,直接从图像里学出几何结构。
流式重建*:指视频是一帧一帧实时到来的,模型必须边看边算,不能等看完整段视频再统一处理,而且内存和计算量不能随着视频变长而无限膨胀。
问题来了:上面提到的那些强模型,大多是设计给"一堆照片"用的,可以把所有图片同时喂进去让它们互相"打招呼"交换信息。可现实中的视频流是源源不断的,你不可能等一万帧都拍完了才开始算,那样根本没法实时用在机器人或自动驾驶上。而且如果模型试图记住从第一帧到现在的所有信息,内存迟早爆掉。
于是研究者们开始给模型装"记忆"。有的用外部空间记忆库存几何特征,有的用循环神经网络维护一个压缩状态,还有的用因果注意力机制缓存最近的键值对。这几年最新的两个工作,LingBot-Map和HorizonStream,已经把流式重建的能力推到了一万帧以上,靠的是把短程观察和长程持久记忆结合起来,一边看眼前,一边翻旧账。
这条路看起来是对的,效果也确实在变好。但这篇论文的团队盯着这个趋势,问了一个不太一样的问题:如果预测目标本身就跟"记多久"没关系,是不是根本不需要那么复杂的长程记忆管理?
被忽略的一个变量:你到底在预测什么
这里有个容易被忽略的细节。很多流式重建模型的做法是,把某一帧(通常是最开始那帧)定为"世界原点",后面所有帧的位置和姿态都相对于这个原点去计算。
这带来一个隐藏的麻烦:随着视频越拍越长,摄像机离这个原点越来越远,预测目标的"数值范围"也在跟着膨胀。你想想,让模型去预测"我现在距离出发点多远",这个数字在视频刚开始时可能是几米,到后面可能是几公里。同一个模型,要在训练时见过的短序列范围内学会预测几米的误差,却要在推理时去应付几公里量级的误差,这个预测问题的难度是随着视频变长而实实在在变难的。
如果不这样设计会怎么样?答案就是我们在实验数据里看到的:很多老牌流式模型跑到几千帧之后,轨迹误差会急剧膨胀,因为它们一直在试图相对一个越来越遥远的锚点去定位自己。
这就好比你在陌生城市里散步,导航App非要你时刻汇报"你距离你家门口多少米、朝向多少度"。刚出门时这个任务很简单,走出去五公里之后,哪怕你自己每一步都走得很稳,光是要精确报出"距离家门口5213米、方位角37度"这种绝对数值,就已经开始容易出错了。如果导航App换个问法,只让你报"你和上一秒相比往哪个方向挪了多少",这个任务无论你走了多远都是同样难度的小任务。
ABot-Recon这篇论文选择的就是后一种问法。它不去预测"我现在相对于第一帧在哪",而是只预测"当前这一帧相对于上一帧动了多少",以及"当前这一帧看到的三维点云,在当前相机坐标系下长什么样"。这个预测目标从第一帧到第一万帧,难度是完全一样的,不会随着视频变长而膨胀。
局部预测*:指模型的输出目标只依赖于最近的一小段上下文,不依赖某个固定的全局参照点,因此无论视频多长,模型面对的都是同一种难度的预测任务。
只留11帧记忆,够用吗
具体来说,ABot-Recon的做法是这样的。每来一帧新画面,模型只回头看最近11帧缓存下来的特征,加上当前这一帧,凑够12帧的窗口去做计算。它输出三样东西:当前帧坐标系下的三维点云、每个点的置信度、以及当前帧相对于上一帧的相对姿态变换。
KV缓存*:Transformer模型在处理序列时,会把每一帧算出来的"键"和"值"存起来供后续帧查询比对,这里的KV缓存被严格限制在最近11帧,超出这个范围的历史全部丢弃,不再保留。
要拿到全局的相机轨迹和完整场景,靠的是"链式组合":把第1帧到第2帧的变换、第2帧到第3帧的变换,一路乘下去,就能算出第1帧到第10000帧的完整变换关系。这就跟你把一串多米诺骨牌的相邻推倒关系记录下来,最终能推算出第一块骨牌倒下会不会影响到第一万块一样,你不需要记住每块骨牌相对于起点的绝对位置,只需要记住每一步的相对关系。
这个设计带来两个直接的好处。第一,模型可以在32帧、128帧这样的短视频上训练,训练完之后直接拿去处理几万帧的长视频,因为训练和推理面对的预测任务本质上是同一种。第二,因为窗口大小固定,模型的内存占用和每一帧的计算量,理论上跟视频总长度完全脱钩,实测中处理4661帧的KITTI-02序列时,峰值显存只要6.71GB,速度能跑到每秒24.45帧,比同类的LingBot-Map和HorizonStream都要快,显存占用也小得多。
误差会不会越滚越大
这里必须承认一个显而易见的风险:如果每一步只看局部,误差会不会像滚雪球一样越滚越大?
这确实是这个方法最大的挑战。相邻两帧之间的姿态估计哪怕只差一点点,尤其是旋转角度的误差,在成千上万次的链式相乘之后,会被指数级放大,最终导致整条轨迹严重跑偏。这就跟你闭眼走路时,每一步方向都稍微偏了那么一两度,走个十步可能感觉不出来,走个一万步,你可能已经绕到马路对面去了。
论文给出的解法分两层。第一层是在推理阶段加一个轻量的"旋转修正器",第二层是在训练阶段改造监督信号,让模型对"链式误差"更敏感。
旋转修正器*:一个额外的小模块,专门用来修正相邻帧之间预测出的旋转角度,因为团队发现平移量相对稳定可靠,真正容易出问题、容易积累误差的是旋转。
这个修正器的思路挺有意思:它同时看两种线索。一种是"运动证据",把相邻两帧的运动描述编码成一个向量;另一种是"视觉证据",通过跨帧的注意力机制,去查询两帧图像里那些密集的视觉细节,看看画面本身给出的线索是不是支持刚才算出来的旋转角度。这两路信息融合之后,再喂进一个轻量级的门控时序卷积网络,这个网络会看最近K帧的历史,输出一个"修正量",把原始的旋转估计往回拉一拉。
门控时序卷积网络*:一种专门处理时间序列数据的神经网络结构,这里用它来综合最近若干帧的运动和视觉线索,判断当前的旋转估计需要往哪个方向、修正多少。
这就像一个老练的司机在倒车入库时,不会只盯着后视镜看车轮打了几度方向盘,还会同时瞄一眼旁边的参照物,两种信息互相印证,才能判断这一把方向打得准不准。如果只信任仪表盘上的数字而完全不看外部参照,稍微有点误差累积几次就容易蹭到旁边的车。
第二层解法叫"组合感知的姿态损失"。传统做法是只监督"第i帧到第i+1帧"这一步的准确性,但这篇论文的团队意识到,真正决定长期轨迹好不好的,是"任意两帧之间,无论隔了多远,组合起来的变换准不准"。于是训练时,他们让模型不仅要把相邻帧预测对,还要把跨越2步、4步、8步乃至更多步的组合变换也预测对,并且给跨度更长的组合分配更高的权重,逼着模型在训练阶段就直面"链式误差"这个问题,而不是等到推理时才发现问题。
这就好比练字,如果你只练"这一笔和上一笔衔接得顺不顺",写出来的单字可能都很工整,但连起来写一整段话时可能会越写越歪。如果训练时就要求你时不时停下来检查"这五个字组合起来端不端正",你写字时自然会更注意每一笔留下的累积影响。
模型是怎么练出来的
训练数据方面,团队用了30个数据集混合训练,覆盖室内场景、户外环境、自动驾驶、手持拍摄、航拍轨迹,合成数据占62.05%,真实数据占37.95%。训练分了两个主要阶段。
第一阶段用32帧的短视频片段训练,先建立起稳定的局部几何和相邻帧运动估计的能力,这个阶段是从公开发布的π?模型权重初始化的,团队把它原来预测绝对相机姿态的输出头换成了预测相邻帧相对姿态的结构。
第二阶段把训练片段拉长到128帧,但局部预测窗口依然固定在12帧不变,同时启用前面说的旋转修正模块。更长的训练片段能提供更连续、更完整的姿态组合链条的监督信号,让模型见识更多真实的运动模式。最后还有一个小阶段专门微调置信度分支,用来判断模型自己给出的密集预测有多可信。
结果到底好在哪
论文在多个高难度长序列基准上做了测试,包括KITTI自动驾驶数据集、Oxford Spires大尺度校园数据集,以及VBR罗马视觉基准。
在Oxford Spires上,ABot-Recon的绝对轨迹误差(ATE)做到了4.35米,相对旋转误差(RPE-R)做到了0.12度,比之前最好的结果分别降低了大约40%。这个降幅意味着什么?意味着同样走过一段几百米长的路,之前最好的模型可能累积出7米左右的定位偏差,而这个模型能把偏差压到4米出头,这在需要精确建图的场景里是实打实的差距。
在KITTI数据集上,团队测试了11条序列,覆盖从271帧的短序列到4661帧的长序列。有一条很能说明问题的对比:在KITTI-02这条4661帧的序列上,团队专门画了一张图,追踪"相邻帧姿态误差"随着处理帧数增加是怎么变化的。结果显示ABot-Recon的误差曲线始终保持在最低水平,没有随着处理帧数增多而逐渐恶化,这正好印证了局部预测目标不随序列长度膨胀这个设计初衷。
同时团队还测试了"跨越不同帧数间隔"的组合误差,发现跨度越大,误差增长得越慢,这说明组合感知的损失函数确实起了作用,模型对长距离的姿态组合更有把控力。
在效率对比上,处理KITTI-02这条序列时,几个对照组的表现是这样的:LongStream每秒处理10.36帧、占用6.62GB显存;LingBot-Map每秒19.74帧、占用18.87GB;HorizonStream每秒8.02帧、占用13.04GB;而ABot-Recon做到了每秒24.45帧、只占用6.71GB显存。速度更快,内存占用却更小,这在实际部署时意味着同样一块GPU可以同时跑更多路视频流。
在稠密三维重建的测试里,团队还看了7Scenes室内场景、TUM-Dynamic动态场景、以及Oxford Spires大尺度场景。有意思的是,在紧凑的室内场景里,ABot-Recon的优势并不算特别突出,团队自己也坦承了这一点:室内场景空间有限、经常反复经过同一片区域、视觉重叠度高,持久的几何记忆在这种情况下确实还是有用的,而ABot-Recon没有专门去保留这种场景级的长期状态。但在Oxford Spires这种更大尺度的环境里,它反而拿到了最低的倒角距离误差和最高的F1分数,说明局部预测这条路径在空间尺度变大之后反而更加吃香。
除了标准测试集,团队还找了几段没有精确真值轨迹的真实长视频做定性验证,包括北京望京8.6公里48656帧的街景、武汉大学8.8公里的校园道路、浙江大学11.3公里的校园道路,甚至还有一段四足机器人低视角导航的视频。低视角这个场景特别有挑战性,因为摄像机架得离地面很近,画面里地面占了大半,能看到的远处结构变少了,帧与帧之间的对应关系比手持或车载视频更难找。即便是在这种明显偏离训练数据分布的场景下,ABot-Recon依然给出了比对照方法更连贯的轨迹。
要不要"翻旧账"检测回环
虽然ABot-Recon的核心设计是完全局部的,但论文里也留了一个可选的插件:训练无关的回环检测后端。
回环检测*:当摄像机绕了一圈重新回到之前经过的地方时,系统能识别出"这里我来过",并利用这个重复观测来修正累积误差,是SLAM系统里的经典技术。
具体做法是用FAISS配合DINOv2-SALAD这类视觉描述子去检索历史帧里跟当前帧相似的画面,一旦找到疑似重复经过的位置,就把这两帧周围的局部窗口再送进ABot-Recon去估计一次相对姿态,作为一个额外的约束加进姿态图里做一次全局优化。这个操作完全在推理阶段进行,不需要重新训练模型。加上这个回环模块之后,Oxford Spires上的ATE能进一步降到4.02米。
这个设计挺聪明的地方在于,它把"局部预测"和"全局修正"这两件事彻底解耦了。局部预测负责提供一套稳定、不随时间膨胀的基础能力,回环检测负责在有机会"翻旧账"的时候顺手修正一下积累的误差。两者互不依赖,谁也不需要为了配合对方而重新设计。
消融实验说明了什么
团队做了一组循序渐进的消融实验,从只用相邻帧监督的基线模型开始,逐步加入组合感知损失、长序列训练、旋转修正器,观察每一步带来的改进。
在KITTI上,加入组合损失后ATE从56.60米直接降到27.66米,几乎腰斩。再把训练片段从32帧拉长到128帧,ATE进一步降到22.31米。最后加入旋转修正器,ATE降到18.25米。整个过程里,旋转修正器只增加了475万个参数,相当于整个模型参数量的0.48%,却带来了18.2%的ATE降幅,这个投入产出比相当划算。
在Oxford Spires和VBR上也能看到类似的递进式改善,说明这几个设计不是孤立起作用的,而是环环相扣:局部预测目标解决了"任务难度不随序列长度膨胀"这个根本问题,组合感知损失解决了"局部预测如何避免链式放大"的问题,旋转修正器则针对性地补上了"旋转误差最容易失控"这个具体薄弱环节。
写在后面
读这篇论文时,最触动我的其实不是最终那些漂亮的数字,而是它提出问题的角度。这几年做长视频三维重建的思路几乎是一边倒的,大家都在琢磨怎么把记忆做得更聪明、更持久、更会取舍,仿佛"记性好"天然就是解决长视频问题的正确方向。这篇论文提醒了一件容易被忽略的事:有时候问题的根源不在"记多久",而在"你到底在问一个什么问题"。把预测目标从"相对于遥远的过去"改成"相对于刚刚发生的事情",这个转变听起来简单,效果却相当直接。
另一个让我印象深刻的细节是附录里那部分数据清洗的描述。团队坦承他们在OmniWorld-Game、TartanAir、BlendedMVS这些公开数据集里发现了不少标注错误,比如天空区域的深度值算错了、某些场景的图片是侧着或倒着的、某个海洋场景的水面深度完全不对。他们没有回避这些问题,而是花了相当的篇幅描述具体怎么用SIFT特征匹配加RANSAC去交叉验证哪些帧对存在几何不一致,然后把问题场景剔除出训练集。这提醒我,很多论文里看不见的功夫,恰恰藏在这些不起眼的数据清理环节里,模型架构设计得再精巧,喂进去的数据本身有问题,训练出来的东西照样会带着这些错误的影子。
这篇论文没有解决的问题也很明确,就是紧凑室内场景里持久记忆仍然有它的价值。一个完全局部化的模型在这种反复兜圈子、高度重叠的环境里并没有表现出压倒性优势,这说明"要不要长程记忆"这件事,本质上还是要看具体场景的空间结构长什么样。一个只走直线的漫长走廊和一个反复绕圈的房间,对"记忆"这件事的需求可能完全不是一回事。
Q&A
Q1:ABot-Recon是什么?
A:ABot-Recon是阿里AMAP CV Lab提出的一种流式三维重建模型,它只缓存最近11帧的特征,通过预测局部点云和相邻帧相对姿态,再链式组合出全局轨迹,从而实现内存和计算量不随视频长度增长的长视频三维重建。
Q2:ABot-Recon为什么只用11帧就能处理几万帧的长视频?
A:因为它预测的目标只是"当前帧相对上一帧的变化"和"当前坐标系下的局部点云",这个预测难度不会因为视频变长而膨胀,模型训练和推理面对的都是同一种任务,全局轨迹靠把每一步的相对变换链式相乘得到。
Q3:ABot-Recon的效果和其他流式重建方法比怎么样?
A:在Oxford Spires上,ABot-Recon的绝对轨迹误差和相对旋转误差比之前最好的方法降低约40%,同时处理速度更快、显存占用更低,在KITTI和VBR等基准上也表现出更强的长距离稳定性。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.