先問你一個問題:如果讓你閉著眼睛,只憑剛剛十幾秒的身體感覺往前走,你能走多遠不迷路?
大概率走不了幾步就得睜眼?認。可是阿里的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等基準上也表現出更強的長距離穩定性。






