MonoRec

Wimbauer 2021 · Paper

One-line summary — Semi-supervised dense 3D reconstruction from a single moving camera that handles dynamic environments by detecting moving objects from photometric inconsistencies in multi-view-stereo cost volumes.

Problem

Multi-view stereo gives geometrically grounded dense depth from a single moving camera, but it rests on a static-scene assumption: moving cars and pedestrians violate the multi-view constraints and corrupt the cost volume exactly where autonomous systems care most. Single-image depth prediction handles moving objects but relies on learned perspective appearance tied to specific camera intrinsics, so it generalizes poorly. A second obstacle is supervision — dense ground truth means LiDAR. MonoRec targets both: dense reconstruction in dynamic scenes, trained without LiDAR depth values.

Method & architecture

Given consecutive frames {I1,,IN}\{I_1,\dots,I_N\} with poses from a sparse VO system (DVSO), MonoRec predicts a dense inverse depth map DtD_t for keyframe ItI_t. Two modules operate on plane-sweep cost volumes.

SSIM cost volume. Instead of the usual patch-wise SAD, the per-pixel photometric error at depth hypothesis dd uses SSIM with 3×33\times3 patches, pe(x,d)=1SSIM(Itt(x,d),It(x))2pe(\mathbf{x},d)=\frac{1-\text{SSIM}(I_{t^{\prime}}^{t}(\mathbf{x},d),I_{t}(\mathbf{x}))}{2}, aggregated over frames into

C(x,d)=121tωttpett(x,d)ωt(x)C(\mathbf{x},d)=1-2\cdot\frac{1}{\sum_{t^{\prime}}\omega_{t^{\prime}}}\cdot\sum_{t^{\prime}}pe_{t^{\prime}}^{t}(\mathbf{x},d)\cdot\omega_{t^{\prime}}(\mathbf{x})

where the weight ωt(x)\omega_{t'}(\mathbf{x}) emphasizes the frame’s photometric-error minimum over other depth steps, so confident frames count more; C[1,1]C\in[-1,1].

MaskModule. Predicts Mt(x)[0,1]M_t(\mathbf{x})\in[0,1], the probability that a pixel belongs to a moving object, from the set of single-frame cost volumes CtC_{t'}: dynamic pixels yield inconsistent optimal depth steps across different CtC_{t'}. Pre-trained ResNet-18 features of ItI_t add semantic priors (geometry alone confuses low-texture/non-Lambertian surfaces and constant-velocity objects). A shared-weight U-Net encoder processes each CtC_{t'}, features are max-pooled and decoded — so the module works with any number of frames.

DepthModule. Receives the multi-frame cost volume CC after pixel-wise multiplication with the predicted mask at every depth step — leaving no maxima (strong priors) in moving-object regions — concatenated with ItI_t; a U-Net decodes multi-scale inverse depth, forcing it to infer moving-object depth from image features and the surroundings.

Multi-stage semi-supervised training. Bootstrapping trains DepthModule with Ldepth=s=03Lself,s+αLsparse,s+βLsmooth,s\mathcal{L}_{depth}=\sum_{s=0}^{3}\mathcal{L}_{self,s}+\alpha\mathcal{L}_{sparse,s}+\beta\mathcal{L}_{smooth,s}, combining a per-pixel-minimum photometric loss over temporal and static-stereo reprojections,

Lself,s=mintt{tS}(λ1SSIM(Itt,It)2+(1λ)IttIt1),λ=0.85\mathcal{L}_{self,s}=\min_{t^{\star}\in t^{\prime}\cup\{t^{S}\}}\Big(\lambda\tfrac{1-\text{SSIM}(I_{t^{\star}}^{t},I_{t})}{2}+(1-\lambda)\,\lVert I_{t^{\star}}^{t}-I_{t}\rVert_{1}\Big),\quad \lambda=0.85

with sparse depth supervision Lsparse,s=DtDVO1\mathcal{L}_{sparse,s}=\lVert D_{t}-D_{VO}\rVert_{1} from the VO point cloud — no LiDAR, no manual labels. MaskModule bootstraps on auxiliary masks (Mask-RCNN movable instances flagged as moving via temporal/static-stereo inconsistency). Refinement stages then couple the modules: the mask is trained as an interpolation factor between static-stereo and temporal-stereo losses (Lm_ref\mathcal{L}_{m\_ref}), and depth refinement backpropagates only static-stereo losses on moving pixels plus a stereo-depth prior (Ld_ref\mathcal{L}_{d\_ref}).

Results

Why it matters for SLAM

Dense monocular reconstruction in the real world must cope with cars and pedestrians; MonoRec showed that the cost volume itself contains the evidence needed to find them, unifying dynamic-object detection with depth estimation instead of bolting on a semantic detector at inference. Coming from the TUM direct-SLAM group, it deliberately consumes poses from any sparse VO system (poses in, dense maps out) and influenced later real-time dense mapping work such as TANDEM.