DPV-SLAM
Lipson 2024 · Paper
One-line summary — Extended DPVO into a full SLAM system (ECCV 2024) by adding efficient loop-closure and global-correction mechanisms, keeping real-time operation on a single GPU.
Problem
Deep-network SLAM backbones deliver excellent accuracy but “such approaches are often expensive to run or do not generalize well zero-shot. Their runtime can also fluctuate wildly while their frontend and backend fight for access to GPU resources.” Concretely: two CUDA workloads on one device run sequentially, so existing deep SLAM systems periodically drop from ~30 Hz to <1 Hz while a backend iteration runs — consistent real-time needs two GPUs — and flow-based backends must retain dense feature maps for every frame, so memory grows with video length. DPVO solved efficiency but is odometry-only, so drift grows without bound. DPV-SLAM completes the design: monocular deep SLAM with loop closure, high minimum framerate, and 5-7 GB memory on a single GPU.
Method & architecture
DPVO base. The frontend keeps DPVO’s patch graph: patches (pixel coordinates + inverse depth ) reproject into frame via ; a recurrent operator predicts residuals and confidences , and bundle adjustment aligns reprojections to the “ideal” targets :
Proximity loop closure (mid-term). The key observation: for each directed edge, the correlation operator only needs dense features of the destination frame, while the BA factor constrains both poses regardless of edge direction — so edges can be flipped arbitrarily to control which frames pay the memory cost. DPV-SLAM therefore permanently stores only patch features for past frames (~0.6 GB per 1000 frames) and inserts uni-directional edges from old patches into recent frames whenever the camera passes near a previously visited pose. Odometry and loop-closure factors are mixed in one shared optimization, run by a new CUDA block-sparse bundle adjustment built for sparse, variable-sized patch graphs. Everything runs in a single process on a single GPU; one proximity global BA takes 0.1-0.18 s on EuRoC vs 0.5-5 s for DROID-SLAM’s backend.
Classical loop closure (long-term, “DPV-SLAM++”). A complementary CPU backend corrects scale drift: dBoW2 image retrieval over ORB features detects loop candidates; off-the-shelf detectors/matchers plus structure-only BA triangulate 3D keypoints around each retrieved pair, whose alignment via RANSAC + Umeyama gives the drift . Keyframe similarities are then optimized by Levenberg-Marquardt over a pose graph with smoothness and loop residuals
after which poses and depths are rescaled (). Retrieval and PGO run in parallel processes, adding virtually zero runtime.
Results
Median of 5 runs, timings on an RTX-3090; same TartanAir-trained weights everywhere (zero-shot):
- EuRoC: avg ATE 0.024 m vs DROID-SLAM 0.022 — comparable accuracy at 50 FPS vs 20 FPS using 5 GB vs 20 GB. Versus base DPVO, error drops 4x (0.105 to 0.024) for only 60 to 50 FPS and 4 to 5 GB.
- KITTI: DPV-SLAM++ avg ATE 25.76 m at 39 FPS vs DROID-SLAM 54.19+ (fails on 02 and 09) and LDSO 22.42; on seq 00/05/07 it reaches 8.30/5.74/1.52 where proximity-only deep methods drift by scale (DPVO 113.21 on seq 00). Proximity-only loop closure cannot fix scale drift — image retrieval is what rescues outdoor driving.
- TUM-RGBD (freiburg1): DPV-SLAM++ avg 0.054 vs DROID-SLAM 0.038 and GO-SLAM 0.035 — similar accuracy band at 30 FPS with 4.0-6.0 GB vs 7.2-8.5 GB.
- TartanAir (competition test set): avg ATE 0.16 vs DROID-SLAM 0.24, at 27 FPS vs 8 FPS.
- Overall: 0 catastrophic failures across all four benchmarks, indoor and outdoor, with 1x-4x real-time throughput.
Why it matters for SLAM
DPV-SLAM completes the DROID-SLAM → DPVO arc: differentiable-BA visual odometry, made sparse and fast, finally equipped with loop closure to be a genuine SLAM system — and it is a clean case study of how learned frontends combine with classical global machinery (dBoW2 retrieval, pose-graph optimization) in one budget. Its edge-flipping memory trick and single-GPU frontend/backend co-existence address the systems problems that keep deep SLAM out of robots.