RAFT-3D

Teed 2021 · Paper

One-line summary — Extends RAFT from 2D optical flow to 3D scene flow by iteratively refining a dense field of pixelwise SE(3)SE(3) rigid-body motions, with learned rigid-motion embeddings and a differentiable Dense-SE3 optimization layer enforcing geometric consistency.

Problem

Scene flow — given a pair of stereo or RGB-D video frames, estimate pixelwise 3D motion — is what a robot needs to separate camera ego-motion from independently moving objects. Real scenes are largely collections of rigidly moving objects, so their 3D motion fields are piecewise constant in SE(3)SE(3), but earlier methods either predict unconstrained per-point translations (e.g. FlowNet3D) or exploit rigidity through object detection/instance segmentation networks — which need instance supervision, cannot handle unknown objects, and insert non-differentiable components into the pipeline. RAFT-3D asks how to build the rigidity prior into a RAFT-style dense architecture without any object instance labels.

Method & architecture

Input: two RGB-D pairs (I1,Z1)(I_1, Z_1), (I2,Z2)(I_2, Z_2) (depth from an off-the-shelf stereo network, GA-Net, for stereo input); output: a dense transformation field TSE(3)H×W\mathbf{T} \in SE(3)^{H \times W}. Using an augmented pinhole projection π\pi that maps a 3D point to pixel coordinates plus inverse depth d=1/Zd = 1/Z, the field induces correspondences

xi=π(Tiπ1(xi))\mathbf{x}_i' = \pi(\mathbf{T}_i \cdot \pi^{-1}(\mathbf{x}_i))

whose first two components of xixi\mathbf{x}_i' - \mathbf{x}_i are optical flow and whose third is the inverse-depth change.

aij=2σ(vivj2)[0,1]a_{ij} = 2\,\sigma(-\lVert \mathbf{v}_i - \mathbf{v}_j \rVert^2) \in [0, 1]

and each pixel’s transform is updated by one Gauss-Newton step on the weighted reprojection objective

E(δ)=iΩjNiaijrj+π(TjXj)π(eδiTiXj)wj2E(\delta) = \sum_{i \in \Omega} \sum_{j \in \mathcal{N}_i} a_{ij} \left\lVert \mathbf{r}_j + \pi(\mathbf{T}_j \mathbf{X}_j) - \pi(e^{\delta_i} \mathbf{T}_i \mathbf{X}_j) \right\rVert^2_{w_j}

i.e. each pixel seeks a motion that explains its neighbors — but only pairs with similar embeddings contribute. Because every term touches a single Ti\mathbf{T}_i, the enormous system (200M equations at FlyingThings3D resolution) decomposes into H×WH \times W independent 6-variable problems built in place in CUDA; 12 GRU iterations yield 12 Gauss-Newton updates.

Results

Why it matters for SLAM

Dynamic environments are a core SLAM failure mode: moving objects violate the static-world assumption behind ego-motion estimation. RAFT-3D’s per-pixel rigid-motion fields provide exactly the representation needed to segment dynamic objects and estimate their motion separately from the camera — the same problem that dynamic SLAM systems (VDO-SLAM, DynaSLAM II) attack with detector-based pipelines, solved here without instance supervision. Its combination of learned iterative refinement with an embedded differentiable geometric optimization layer sits on the direct lineage from RAFT to the same authors’ DROID-SLAM.