Previous slide Next slide Toggle fullscreen Open presenter view
Vox-Fusion: Dense Tracking and Mapping with Voxel-based Neural Implicit Representation
巫玟槿
2026/05/28
X. Yang, H. Li, H. Zhai, Y. Ming, Y. Liu and G. Zhang, "Vox-Fusion: DenseTracking and Mapping with Voxel-based Neural Implicit Representation,"
2022 IEEE International Symposium on Mixed and Augmented Reality (ISMAR), Singapore, Singapore, 2022, pp. 499-507, doi: 10.1109/ISMAR55827.2022.00066.
keywords: {Fuses;Source coding;Rendering (computer graphics);Real-time systems;Systems support;Augmented reality;Dense SLAM;Implicit Networks;Voxelization;Surface Rendering},
是一個運用融合了 Neural Implicit Representation 和 Volumetric Fusion 的 Dense SLAM
是一個運用融合了 Neural Implicit Representation 和 Volumetric Fusion 的 Dense SLAM
Dense SLAM / Sparse SLAM
是一個運用融合了 Neural Implicit Representation 和 Volumetric Fusion 的 Dense SLAM
Explict / Implicit representation
Explict 能結構化的記錄每個位置的資訊,但記憶體開銷會較大,且在新視角容易產生間隙(洞);使用 Implict 的話則有可能因為場景太大而造成一些細節上的瑕疵
是一個運用融合了 Neural Implicit Representation 和 Volumetric Fusion 的 Dense SLAM
SDF (Signed Distance Function) / TSDF (Truncated Signed Distance Function)
是一個運用融合了 Neural Implicit Representation 和 Volumetric Fusion 的 Dense SLAM
Neural Implicit Representation
是一個運用融合了 Neural Implicit Representation 和 Volumetric Fusion 的 Dense SLAM
Volumetric Fusion
Vox-Fusion 可以做到什麼
Neural Implicit Representation + Volumetric Fusion => 能用 Explict 表示大致的結構,每個小塊再用 Implict 表示出細節,並且很適合提供給 XR 的應用場景使用:
dense geometry -> Dense SLAM
occlusion handling -> 需要明確知道哪些地方有物體
collision detection -> 需要知道明確的物體表面
(scene editing) 將虛擬物件放到場景中 / 將場景中的部分物件移除
KinectFusion (2011)
RGB-D dense reconstruction 的經典方法
傳統 volumetric fusion 的代表 (Explicit Representation)
缺點:記憶體開銷大、新視角繪製品質不佳
CodeSLAM (2018)
嘗試解決記憶體開銷大的問題
Use an encoder-decoder structure to embed depth maps as low dimensional codes (深度圖 -> embedding)
Used to jointly optimize a collection of key-frames and camera poses
缺點:Encoder / Decoder 都是預訓練的,對新場景的泛化能力可能會不佳、無法重建三維地圖
NSVF (2020)
是 NVS(Novel View Synthesis) 不是 SLAM
使用 Voxel Explict 表示的概念,但改為儲存一個 embedding (latent) 並使用一個 decoder (MLP) 計算該位置的 SDF 為何,進而重新創建場景
缺點:離線、需要事先知道相機位姿
(本篇 Vox-Fusion 大致就是以這個架構為原型)
iMAP (2021)
用單一 MLP 代表整個場景(NeRF-based),邊跑邊訓練
缺點:對大場景細節會不清楚、無法精準知道物體位置
DI-Fusion (2021)
採用與 NSVF 類似 voxel + neural implicit 方法,但他是個 SLAM
Each PLIVox is independent and the relationships between neighboring PLIVoxs are not considered; therefore the spatial continuity of the reconstructed scene is not guaranteed.
Encoder / Decoder 都是預訓練的,對新場景的泛化能力可能會不好
僅能重建沒有顏色的 3D mesh
NICE-SLAM (2022)
與 NSVF 相同概念,但使用了不同解析度的 Voxels 加強模型對場景的理解
密集的 voxel grid 較耗費記憶體,且需預先決定場景大小 scalability 不佳
但是 Decoder 仍是預訓練的,對於新場景的泛化能力可能會不好
選取 keyframes 的方式與 iMAP 相同,Vox-Fusion 團隊認為應該使用 Voxel 的特性採用更有效率的方式
Neural Implicit vs. Traditional TSDF
Pros
Cons
Compact representation
Harder to segment or edit
Plausible hole filling
Require prior knowledge of the scene
Adaptive resolution potential
A single network may struggle with large scenes or fine details
Continuous functions produce smoother geometry
Slow Queries due to require neural network inference
Contribution
Combines an explicit octree voxel structure with voxel embeddings and a neural implicit network for scalable detailed scene reconstruction.
Show that directly renders signed distance volumes, improving camera tracking accuracy and reconstruction quality compared to current SOTA systems without extra performance cost.
Propose a fast and efficient keyframe selection strategy based on ratio test and measuring information gain, (which is more suitable to maintain large-sized maps.)
Experiments on synthetic and real-world RGB-D sequences show high-quality 3D reconstruction and potential for AR applications.
Method
Volume Rendering
Voxel-based sampling
Naive random sampling wastes computational power on empty spaces.
Fast Ray-Voxel Intersection: Performs a quick intersection test for each ray, masking out pixels that hit no valid voxels to skip empty regions.
Dynamic Sampling Limits: dynamically set the maximum number of voxels a ray can intersect ( ) based on a specified maximum sampling distance ( ).
Implicit surface rendering
: predicted color for each 3D poin
: predicted SDF value
: MLP
: trilinear interpolation function
: Voxel embeddings
: 相機座標系下的 3D 點
: current camera pose
: the frame pose update
: Truncation distance (TSDF)
C: output color
D: output depth
Optimization (Loss functions)
: Set of sample points
: free space
: sample points in which distance to surface larger than
: sample points in which distance to surface smaller than
Tracking
固定 embeddings 和 MLP
Sample a sparse set of pixels from the input images for tracking
假設是 zero motion model,使用上一幀計算出的 最佳化 使得 loss 最小 (back-propagation)
重複 num_iterations 次
Mapping
Key-frame selection
: number of voxels that would be allocated if we are to choose it as a new keyframe
: number of currently observed voxels
Enforce a maximum interval between adjacent frames, i.e., we will create a new keyframe if have not done so for the past N frames.
Joint mapping and pose update
Randomly select keyframes
For each frame randomly sample rays
計算 Loss 更新 MLP / embeddings /
Dynamic Voxel Management
Only interested in reconstructing surfaces that have observation
Morton coding to quickly find its position in the octree by traversing through its Morton code (因此需先確認場地的最大範圍)
Experiments
Dataset:
Replica
ScanNet
Indoor and outdoor RGB-D sequences by IOS device (eg. iPhone 13 Pro / iPad Pro)
Evaluation Metrics:
軌跡評估: ATE (Absolute Trajectory Error)
地圖重建評估:
Mesh accuracy (Acc.)
Completion (Comp.)
Completion Ratio (Distance to the ground truth mesh is smaller than 5cm)
定性比較
定性比較 - 使用 SDF 的效果
定性比較 - iPhone 13 Pro
定量比較 - Replica - 軌跡
定量比較 - Replica - 地圖重建
定量比較 - Replica - 地圖重建(NICE SLAM 更新版本)
看了 NICE SLAM 後發現兩者的數據好像對不上,似乎是因為 NICE SLAM 有在後續更新 ,但 Vox-Fusion 仍使用舊的資料
定量比較 - ScanNet - 軌跡
Time and Memory Efficiency
Taking around 150-200 ms to track a new frame and 450-550 ms for the joint frame and map optimization.
In a typical setting, our system can run 5hz for tracking, and 2hz for optimization.
Application
Conclusion
Supports dynamic voxel creation, which is more suitable for practical scene
Multi-process architecture and corresponding strategies for better performance
Improving reconstruction quality compared to current SOTA without extra performance cost
Show the potential for AR applications
Limitation: dynamic objects / drift in long-time tracking (Loop Closure) / (view-dependent appearance (like NeRF))
因為準確來說 CodeSLAM 無法重建三維地圖 所以他不應該算是 Dense SLAM 的範圍
iMap/NICE-SLAM 則是因為作者沒寫上去所以我幫他補上
Ple-no-xels 則是因為他是使用了球諧函數取代神經網路,因此我認為把它放到 Neural implicit network 有點不合適
Code SLAM 將原先的深度圖轉為一個 embedding,decoder 使用 embedding 和 RGB 影像還原深度圖,以此省下記憶體開銷
但這篇論文並沒有引用 NSVF 且有不少細節不同 猜測是同期類似想法的作品
不過我是覺得其實一般的方法也是可以手動修改 Maximum number of voxel
xi: /ksaɪ/
相機位姿 T 屬於 SE(3),Special Euclidean group 是一個 4*4 的矩陣,用來旋轉加平移的變換,但是我們不能直接對這個做最佳化,可以想像兩個旋轉矩陣相加之後的矩陣並不會是一個旋轉矩陣,因此這邊多使用了一個 xi 是 Special Euclidean group 的李代數,大致可以想像是對相機位姿的更新量,而後續在算 loss 時只要更新 xi 就能更新相機位姿了
在 Mapping 的部分當每幀傳入會先判斷是否要成為 Keyframe,判斷邏輯是當目前這幀會產生的新 voxel 數量除以目前已經有的 Voxel 數量,就是用來評估會有多少新資訊會被加入
另外 octree 的優點是在前面找哪些 voxel 跟 ray 有 intersection 時可以從大的範圍開始找 就能將原本 O(n) 的時間複雜度縮短到 O(log(n))
因為只會 Render 看過的 voxel 所以會發現空洞,作者表示這樣的狀況是預期之中的 Feature,沒有看過的場景本來就不該隨意猜測,並且認為在實際場景中,本就應該知道哪些位置是有觀測過哪些位置是有觀測過
至於為什麼沒有 ScanNet 的地圖重建比較我們暫且蒙在鼓裡,有找過了後來的論文但都沒有找到對兩者在 ScanNet 上的比較
右邊的時間是一次 iteration 的時間,但 tracking / mapping 需要跑 20 / 50 次 iteratoins 所以時間會增大
記憶體使用就是在炫耀他們效果比 NICE SLAM 好,記憶體又少,可能還記得 NICE SLAM 他們使用了四層不同精度的 voxel 來增進精度,但就算除四他們還是好得多
支援動態新增 voxel 更適合用在實際的場景
利用 tracking / mapping 兩個 process 平行計算達到更好的性能
在 3D 重建的品質超過目前的 SOTA 而且還使用了更少的性能
展現在 AR 的應用
而這篇論文目前對於:動態的物體(例如人)和長時間的追蹤效果不佳 文章中沒提到:無法根據不同視角產生不同眼色,不能像是 NeRF 有反光之類的效果
dark / light toggle btn
<style>
#theme-toggle-btn {
position: fixed; top: 20px; right: 20px; z-index: 9999;
width: 50px; height: 50px; border-radius: 50%; border: none;
background: #444; box-shadow: 0 4px 6px rgba(0,0,0,0.1);
cursor: pointer; font-size: 24px; transition: 0.3s;
display: flex; align-items: center; justify-content: center; padding: 0;
}
#theme-toggle-btn:hover { transform: scale(1.1); }
#theme-toggle-btn.is-dark { background: #f0f0f0; }
#theme-toggle-btn::after { content: '🌙'; }
#theme-toggle-btn.is-dark::after { content: '☀️'; margin-top: 0; }
</style>
<button id="theme-toggle-btn"
onclick="document.querySelectorAll('section').forEach(s=>s.classList.toggle('invert'));this.classList.toggle('is-dark')">
</button>