ShengyHuang commited on
Commit
ef3b557
·
verified ·
1 Parent(s): a0cd34c

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +573 -1
README.md CHANGED
@@ -1,3 +1,575 @@
1
  ---
2
- license: apache-2.0
 
 
 
3
  ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ license: other
3
+ license_name: nvidia-open-model-license
4
+ license_link: >-
5
+ https://developer.download.nvidia.com/licenses/NVIDIA-OneWay-Noncommercial-License-22Mar2022.pdf?t=eyJscyI6ImdzZW8iLCJsc2QiOiJ
6
  ---
7
+
8
+ ## Description:
9
+
10
+ MetricTrail estimates camera motion and per-frame metric depth from long RGB
11
+ image sequences for visual odometry and 3D reconstruction research. It combines
12
+ single-image metric depth, learned sparse correspondences, and local geometric
13
+ optimization, with supplied or RGB-estimated intrinsics and optional rectified
14
+ stereo. MetricTrail 1.0 was developed by NVIDIA.
15
+
16
+ The repository provides a CLI that exports camera trajectories and caches
17
+ per-frame depth. Model weights are not included in the source repository;
18
+ the DINO-DPVO checkpoint is planned for a separate Hugging Face release.
19
+ The CLI does not export dense point clouds or meshes. The dense-reconstruction
20
+ results below use a separate research evaluation workflow.
21
+
22
+ This model is for research and development only.
23
+
24
+ ### License/Terms of Use:
25
+
26
+ Use of the model weights is governed by the [NVIDIA License](https://developer.download.nvidia.com/licenses/NVIDIA-OneWay-Noncommercial-License-22Mar2022.pdf), which limits use to noncommercial research or evaluation, subject to the agreement. Use of the DPVO base model is governed by the [MIT License](https://opensource.org/license/mit). Original NVIDIA-authored source and documentation marked Apache-2.0 use the [Apache License 2.0](../LICENSE). Incorporated source, separately obtained upstream weights, and datasets retain their applicable terms; DINOv3 uses the [DINOv3 License](https://github.com/facebookresearch/dinov3/blob/main/LICENSE.md). See [THIRD_PARTY_NOTICES.md](../THIRD_PARTY_NOTICES.md) and the [repository license scope](../README.md#license) for inherited MIT and BSD terms and the removal of legacy retrieval, alignment, and optical-flow helpers. Separately obtained retrieval tools retain their own applicable terms. Source licenses do not replace model-weight or dataset terms.
27
+
28
+ ### Deployment Geography:
29
+
30
+ Global
31
+
32
+ ### Use Case:
33
+
34
+ - Research on long-video camera-motion estimation and metric 3D reconstruction.
35
+ - Studying metric-depth priors, visual representations, and sparse local
36
+ optimization for visual odometry and mapping.
37
+ - Reconstructing indoor and outdoor scenes for computer vision, graphics,
38
+ simulation, and robotics research, with independent validation of geometry.
39
+ - Comparing calibrated monocular, RGB-only calibration, and calibrated stereo
40
+ reconstruction under the reported protocols.
41
+
42
+ ### Release Date:
43
+
44
+ Hugging Face 10/23/2026 via [https://huggingface.co/nvidia/metrictrails](https://huggingface.co/nvidia/metrictrails)
45
+
46
+ ## References(s):
47
+
48
+ - *MetricTrail: Revisiting the Power of Metric Depth and Local Optimization for
49
+ Long-Sequence Streaming 3D Reconstruction*.
50
+ - [Repository overview and running instructions](../README.md).
51
+ - [DPVO](https://github.com/princeton-vl/DPVO), the sparse local odometry backbone.
52
+ - [DINOv3](https://github.com/facebookresearch/dinov3) and the
53
+ [ViT-S/16 LVD-1689M pretrained model](https://huggingface.co/facebook/dinov3-vits16-pretrain-lvd1689m).
54
+ - [MoGe](https://github.com/microsoft/MoGe) and
55
+ [MoGe-2](https://arxiv.org/abs/2507.02546), the default metric-depth provider.
56
+ - [SALAD](https://github.com/serizba/salad), an optional external place-retrieval
57
+ tool obtained and run independently of MetricTrail.
58
+ - [ViPE](https://github.com/nv-tlabs/vipe), used for RGB-only shared-focal calibration.
59
+ - [RoMa](https://github.com/Parskatt/RoMa), used for optional revisit-based focal refinement.
60
+
61
+ ## Model Architecture:
62
+
63
+ **Architecture Type:** Learned recurrent visual odometry with frozen visual
64
+ foundation-model features and explicit bundle adjustment.
65
+
66
+ **Network Architecture:** DPVO's sparse patch correspondence network with
67
+ learned residual feature-fusion adapters, a frozen DINOv3-S/16 encoder, and a
68
+ frozen MoGe-2 metric-depth provider. The complete system includes camera
69
+ calibration and optional pose-graph correction.
70
+
71
+ **Number of model parameters:** The DINO-DPVO checkpoint for the separate
72
+ Hugging Face release contains
73
+ **3,425,860 learned parameters (3.43 million)** across 100 FP32 weight/bias
74
+ tensors. This count excludes the frozen DINOv3 backbone, external MoGe-2 depth
75
+ model, calibration dependencies, and optional SALAD and RoMa models.
76
+
77
+ The local estimator alternates learned patch matching with joint optimization
78
+ of camera poses and sparse patch inverse depths in a bounded active window.
79
+ MoGe-2 independently predicts metric camera-Z depth for each image. These
80
+ predictions initialize patch depths and remain robust soft constraints during
81
+ optimization; multi-view evidence can override unreliable prior measurements.
82
+ In the dense-reconstruction workflow, frame-level depth maps are
83
+ placed in a shared world frame using the recovered poses and are not themselves
84
+ bundle-adjustment variables.
85
+
86
+ Frozen DINOv3 features augment the matching map and recurrent patch context
87
+ through learned residual adapters. Its 384-dimensional features are projected
88
+ to 64 channels and split into two 32-channel branches that augment the
89
+ 128-channel matching stream and 384-dimensional recurrent context. Final
90
+ residual projections are initialized to zero so adaptation starts from the
91
+ official DPVO checkpoint's predictions.
92
+
93
+ We train MetricTrail for 15,000 optimizer steps with global batch size 16 on
94
+ 16 NVIDIA A100 80GB GPUs, taking approximately seven hours. Fusion branches
95
+ first warm up on 5,000 TartanAir clips with odometry frozen; odometry and fusion
96
+ branches are then jointly fine-tuned on the remaining 235,000 clips. DINOv3 stays
97
+ frozen, and MoGe-2 is not used during adaptation. Joint training uses AdamW,
98
+ learning rates of 8e-6 for odometry and 8e-5 for fusion, weight decay 1e-6,
99
+ linear OneCycle annealing with 1% warmup, gradient clipping at 10, and seed 1234. Each clip
100
+ uses 80 patches per frame and 18 recurrent refinements. The frozen DINOv3
101
+ forward pass uses BF16; adapters, odometry, differentiable bundle adjustment,
102
+ and losses use FP32.
103
+
104
+ <!--
105
+ ## Computational Load (internal review only)
106
+
107
+ Remove this entire comment from public source and the published model card.
108
+
109
+ Scope: added compute for the documented MetricTrail adaptation run, including
110
+ fusion warmup and joint fine-tuning. The run uses 16 A100 80GB GPUs for
111
+ approximately 7 hours (112 GPU-hours), processing 240,000 clips of 15 frames at
112
+ 480 x 640 with 80 patches per frame and 18 recurrent refinements. Third-party
113
+ DPVO and DINOv3 pretraining, evaluation, and discarded exploratory runs are
114
+ excluded. MoGe-2 is not used during adaptation.
115
+
116
+ **Cumulative Compute (estimated): 1.3 x 10^18 FLOPs.**
117
+ This is an analytical operation estimate, not a hardware-profiler measurement.
118
+ Counting a multiply-add as two FLOPs gives approximately 2.8 x 10^17 FLOPs for
119
+ frozen DINOv3 forward passes, 2.5 x 10^17 for the DPVO convolutional encoders,
120
+ and 6.9 x 10^17 for recurrent-update matrix operations. The encoder/update
121
+ counts approximate forward plus backward as three times forward, with
122
+ adjustments for the frozen warmup. The subtotal is 1.22 x 10^18 FLOPs; the
123
+ reported value includes an approximate allowance for correlation, adapters,
124
+ bundle adjustment, losses, and other operations. Random edge pruning and
125
+ kernel details are not reconstructed. A reasonable sensitivity range is
126
+ 0.8 x 10^18 to 2.0 x 10^18 FLOPs, not a validated confidence interval.
127
+ Sources for the operation count: DPVO/dpvo/net.py, DPVO/dpvo/extractor.py,
128
+ DPVO/dpvo/blocks.py, and metrictrail/runtime/dino_fusion.py.
129
+
130
+ **Estimated Energy for Model Training: 50 kWh.**
131
+ An ORD hardware query on 10/20/2026 confirmed NVIDIA A100-SXM4-80GB with
132
+ configured and default power limits of 400 W. Applying this rating to the
133
+ documented training run, the prescribed calculation is
134
+ 16 x 0.400 kW x 0.80 x 7 hours x 1.4 PUE = 50.176 kWh.
135
+ The 80% power fraction and PUE of 1.4 are the internal guidance defaults,
136
+ not measured power or a verified ORD facility PUE.
137
+
138
+ **Estimated Emissions for Model Training: 0.021 tCO2e (approximately 21 kgCO2e).**
139
+ 50.176 kWh x 410.5 gCO2e/kWh x 0.000001 = 0.020597 tCO2e.
140
+ The emissions factor is the guidance's fallback value; a site-specific
141
+ electricity emissions factor was not available. These are estimates for
142
+ the documented adaptation run, not metered energy or emissions.
143
+
144
+ Methods:
145
+ https://nvidia.sharepoint.com/sites/TrustworthyAI/SitePages/How-to-Assess-Training-Compute.aspx
146
+ https://nvidia.sharepoint.com/:w:/s/TrustworthyAI/Ecb23D6b-kNLv1c6LCdhSiMBjWFz0MKncBaRcryDsfv-vA?e=lIcO9z
147
+ Hardware specifications: https://www.nvidia.com/en-us/data-center/a100/
148
+ -->
149
+
150
+ ## Input:
151
+
152
+ **Input Type(s):** A temporally ordered RGB image sequence and camera parameters;
153
+ optionally synchronized left/right image sequences for stereo. A JSON
154
+ configuration selects the data adapter and processing settings.
155
+
156
+ **Input Format(s):** Prepared PNG frames or KITTI NPZ files containing `images`
157
+ as `uint8 [N,3,H,W]`. The repository also supplies Oxford Spires and LaMAria
158
+ inventory adapters. Loaders produce CHW RGB `float32` images in `[0,1]`.
159
+ Arbitrary video containers are not decoded by this CLI. See the
160
+ [input layouts](../README.md#layout-of-external-files) and
161
+ [data adapters](../metrictrail/datasets.py).
162
+
163
+ Optional loop correction consumes a saved local trajectory NPZ, its successful
164
+ JSON sidecar, and an externally generated candidate JSON containing frame pairs
165
+ and scores. The candidate file records the baseline NPZ's SHA256; the candidate
166
+ file's own SHA256 must also be supplied.
167
+
168
+ **Input Parameters:** A configured frame inventory with at least 16 images,
169
+ positive FPS, and image dimensions `(H,W)`. Intrinsics use `[fx,fy,cx,cy]` in
170
+ processed-image pixel coordinates. In calibrated KITTI mode, `intrinsics`, `K`,
171
+ or `input_intrinsics` in the NPZ may be a four-vector, a 3 x 3 matrix, or an
172
+ `[N,4]` array; the last format uses its first row as the shared camera model.
173
+ Supplied-intrinsic adapters also exist for VBR and LaMAria. RGB-only mode
174
+ estimates one shared camera model.
175
+
176
+ Stereo takes a synchronized, rectified right-image PNG inventory and a positive
177
+ `stereo_baseline_m`, with a fixed horizontal rig translation. The public
178
+ configuration does not expose an arbitrary stereo extrinsic matrix. Metric
179
+ camera-Z depth is predicted internally by MoGe-2 ViT-L without a normal head,
180
+ available as `Ruicheng/moge-2-vitl`.
181
+
182
+ **Other Properties Related to Input:**
183
+
184
+ - Training uses 15-frame clips resized while preserving aspect ratio and
185
+ center-cropped to 480 x 640. Inference raster size depends on the protocol;
186
+ the canonical KITTI input is 280 x 504, and the 7Scenes trajectory
187
+ protocol uses 434 x 574. The shipped KITTI and VBR configurations use
188
+ 280 x 504; Oxford uses 378 x 518. The 7Scenes evaluation uses a separate
189
+ workflow; this repository does not include a 7Scenes adapter.
190
+ - Images and camera intrinsics must undergo consistent resize and crop
191
+ transforms. Stereo requires synchronization, rectification, and a correct
192
+ horizontal baseline consistent with the processed images.
193
+ - RGB-only calibration estimates intrinsics from a finite prefix, fixes the
194
+ camera model, and replays that prefix before continuing online. Our
195
+ evaluation initializes with the first 32 frames, and robust128
196
+ calibration uses 128 selected keyframes. The repository exposes configurable
197
+ calibration budgets. A shared focal correction is optimized while the
198
+ principal point remains fixed.
199
+ - The implementation's metric-depth validity check requires a valid provider
200
+ mask, finite depth, and camera-Z depth in the inclusive range 0.2-500 m.
201
+ If a full-resolution prediction, its registered stride-4 depth raster, or
202
+ all sampled patch centers contain no valid depth, the sequence terminates
203
+ and the run cannot commit a successful complete trajectory. Failed runs may
204
+ leave cache or older output files; use stage validation to establish success.
205
+ - `max_frames=0` uses the full configured inventory. The default DPVO frame
206
+ buffer has capacity 32,768; buffer exhaustion raises an error. The bounded
207
+ active optimization window does not make sequence duration or total cached
208
+ data unlimited. The shared-intrinsic model assumes consistent camera geometry.
209
+
210
+ ## Output:
211
+
212
+ **Output Type(s):** Per-frame camera trajectories, intrinsics, cached frame-level
213
+ metric depth and provider masks, and processing/audit metadata.
214
+
215
+ **Output Format(s):** Trajectory NPZ files with accompanying JSON records.
216
+ The frontend cache stores raw `depth.f32` and `mask.u8` arrays with JSON contract,
217
+ progress, and successful-completion records. It does not export dense point
218
+ clouds, meshes, or sparse patch geometry.
219
+
220
+ **Output Parameters:** `c2w` and inverse `w2c` have shape `[N,4,4]`;
221
+ `intrinsics` has shape `[N,4]`. The trajectory includes `frame_ids`,
222
+ `source_frame_ids`, `input_hw`, and stereo metadata. Poses refer to `cam0`, the
223
+ left camera for stereo. Cached camera-Z depth is FP32 `[N,H,W]`; the raw provider
224
+ mask is `uint8 [N,H,W]`. Consumers must also check finite depth and range;
225
+ the cached mask alone is not the final validity test.
226
+
227
+ KITTI local predictions are written under `output_root/local/inference/`;
228
+ other adapters use `output_root/local/inference/predictions/`. The separate
229
+ loop-correction command writes optional LC predictions under
230
+ `output_root/LC/inference/` and also retains `local_c2w` and the loop-edge count.
231
+ Depth caches are under
232
+ `output_root/frontend-cache/<dataset>/<case>/`.
233
+
234
+ Dense geometry is assembled by back-projecting camera-Z depth with intrinsics
235
+ and transforming it by `c2w`. The CLI outputs the depth and poses needed for
236
+ this operation but does not export dense reconstructions. Metric scale remains
237
+ an estimate. Learned correspondence weights should not be interpreted as
238
+ calibrated pose or depth uncertainty.
239
+
240
+ **Other Properties Related to Output:** Output length follows the processed
241
+ frame inventory. Trajectories use meters for translation and homogeneous
242
+ camera-to-world/world-to-camera matrices; cached depth uses meters along the
243
+ camera Z axis. Depth predictions are valid only where the provider mask is
244
+ valid, values are finite, and depth is in the inclusive range 0.2-500 m.
245
+ The pipeline raises an error for frames with no usable depth priors. Check
246
+ successful-completion records before consuming outputs; failed runs can retain
247
+ intermediate caches or older files. The model does not provide calibrated
248
+ pose/depth uncertainty or a guarantee of geometric correctness.
249
+
250
+ Our AI models are designed and/or optimized to run on NVIDIA GPU-accelerated
251
+ systems. By leveraging NVIDIA's hardware (e.g. GPU cores) and software frameworks
252
+ (e.g., CUDA libraries), the model achieves faster training and inference times
253
+ compared to CPU-only solutions. MetricTrail requires CUDA for the provided
254
+ pipeline; its reported benchmarks do not include a measured CPU comparison.
255
+
256
+ ## Software Integration:
257
+
258
+ **Runtime Engine(s):** PyTorch/CUDA. The documented environment is Python 3.10,
259
+ PyTorch 2.5.1 and CUDA 12.4, with xformers for MoGe-2 attention, yacs, OpenCV,
260
+ Pillow, and SciPy. Separately invoked loop correction uses NumPy/SciPy on CPU,
261
+ with no PyTorch/CUDA, PyPose, FAISS or SALAD runtime dependency. The package
262
+ metadata permits broader versions, but those combinations have not been validated.
263
+ No precompiled DPVO CUDA extensions are included. Before tracking, build
264
+ `cuda_corr`, `cuda_ba`, and `lietorch_backends`
265
+ from source in the inference environment, using a compatible C++ compiler,
266
+ the CUDA toolkit including `nvcc`, and Eigen 3.4.0 headers. See
267
+ [environment instructions](../README.md#environment)
268
+ and [package dependencies](../pyproject.toml).
269
+
270
+ **Supported Hardware Microarchitecture Compatibility:**
271
+
272
+ NVIDIA Ampere (A100)
273
+
274
+ A CUDA device is required. Compatibility with other GPUs and a minimum memory
275
+ requirement have not been established.
276
+
277
+ **Supported Operating System(s):** Linux x86_64 is the documented tracking
278
+ environment. DPVO CUDA extensions must be built from source before tracking.
279
+ Validation results for other environments are not documented.
280
+
281
+ Run with `PYTHONNOUSERSITE=1`. The primary command is
282
+ `python -m metrictrail.cli --config <config.json>`; the default device is
283
+ `cuda:0`. `--case`, `--resume`, `--preflight`, and
284
+ `--stop-after {calibration,local}` control selection and stage execution.
285
+ Preflight checks external files and relevant runtime imports; it does not
286
+ validate model quality. See [running instructions](../README.md#running).
287
+
288
+ The main pipeline ends at the local trajectory with `enable_lc: false`.
289
+ Run optional loop correction separately on CPU with
290
+ `python -m metrictrail.lc_cli --config <config.json> --case <case> --candidate-file <candidates.json> --candidate-sha256 <sha256>`.
291
+ MetricTrail consumes the supplied candidate pairs; it does not perform place
292
+ retrieval or launch an external retrieval tool.
293
+
294
+ Validate the implementation, camera model, data preprocessing, output
295
+ conventions, failure handling, and use-case performance before integrating
296
+ the system into a larger application. A measured benchmark memory footprint
297
+ does not by itself establish a supported hardware requirement.
298
+
299
+ The integration of foundation and fine-tuned models into AI systems requires
300
+ additional testing using use-case-specific data to ensure safe and effective
301
+ deployment. Following the V-model methodology, iterative testing and validation
302
+ at both unit and system levels are essential to mitigate risks, meet technical
303
+ and functional requirements, and ensure compliance with safety and ethical
304
+ standards before deployment.
305
+
306
+ ## Model Version(s):
307
+
308
+ **MetricTrail 1.0:** The registered research model release. Integrate this version
309
+ by preparing RGB frame inventories and a JSON configuration, obtaining the
310
+ separately distributed MetricTrail checkpoint and compatible upstream weights
311
+ under their respective terms, and invoking
312
+ `python -m metrictrail.cli --config <config.json>`. The caller consumes validated
313
+ trajectory NPZ files, JSON completion records, and optional depth/mask caches,
314
+ and evaluates them for its intended research use.
315
+
316
+ **Checkpoint:** The multi-dataset-adapted DINO-DPVO checkpoint will be released
317
+ separately on Hugging Face. Place it at `ckpt/dino_dpvo_multidataset15k.pth`
318
+ or set `paths.dino_dpvo_checkpoint` to its local path. It is not included in the
319
+ source repository. **Source revision:**
320
+ `7ead0eca3f8a6a1266a21974c8077cc53940ccf5`.
321
+ Checkpoint SHA256:
322
+ `d0aa57e165b159fc84bdb9d94918ad9b508c153acfb4c46f5058ab80421fb5f5`.
323
+ The checkpoint records format version 1 and training phase `joint`.
324
+ The Python package version `0.1.0` is a separate software version.
325
+
326
+ The frozen DINOv3 backbone is excluded from the DINO-DPVO checkpoint and must be
327
+ obtained separately as `dinov3_vits16_pretrain_lvd1689m-08c60483.pth`.
328
+ Its validated SHA256 is
329
+ `08c60483bc63c04f533611e34bf70b120eedb7240f469bc16e9e20bf344b941d`.
330
+ MoGe-2 and optional calibration and RoMa dependencies are also separate
331
+ downloads; see the [external-file layout](../README.md#layout-of-external-files).
332
+ Optional loop-retrieval tools are obtained and run independently to generate
333
+ the candidate files consumed by the loop-correction command.
334
+
335
+ The released configuration supports monocular/stereo tracking and optional
336
+ revisit focal refinement. Core configs disable loop closure. The separate
337
+ postprocessor uses externally supplied identity-edge candidates, with
338
+ VBR-specific residual scales and default scales for other datasets.
339
+ The new postprocessor has not been benchmark-validated.
340
+ Native DPVO loops and global BA are rejected by the configuration
341
+ schema. Focal refinement performs one coarse matching attempt, keeps the stage-A
342
+ focal if refused, and reruns tracking after an accepted correction. Other
343
+ global-BA/refinement variants evaluated below are not exposed by this CLI.
344
+
345
+ ## Training, Testing, and Evaluation Datasets:
346
+
347
+ ### Training Dataset:
348
+
349
+ #### Data Modality:
350
+
351
+ - Video
352
+ - Other: Camera-pose and induced patch-motion supervision
353
+
354
+ #### Training Data Size:
355
+
356
+ **Video Training Data Size:** Less than 10,000 hours of unique MetricTrail
357
+ fine-tuning video. This excludes repeated sampling
358
+ and the inherited pretraining of DPVO, DINOv3, MoGe-2, and optional components.
359
+
360
+ Training, including warmup, uses the following sampled clip exposures.
361
+ The table counts clip exposures; unique sequence and image counts and full
362
+ upstream dataset sizes are not shown. Each clip contains 15 frames.
363
+
364
+ | Dataset | Sampled clip exposures | Source content |
365
+ | --- | ---: | --- |
366
+ | TartanAir | 56,000 | Synthetic simulated environments |
367
+ | TartanGround | 46,000 | Synthetic ground-robot environments |
368
+ | CarlaOcc | 46,000 | Synthetic driving scenes |
369
+ | LightwheelOcc | 46,000 | Synthetic driving scenes |
370
+ | OmniWorld-Game | 46,000 | Game-scene video; only the Game subset |
371
+ | Total | 240,000 | Five project-specific training sources |
372
+
373
+ **Camera-Pose Supervision Data Size:** 240,000 clips with 15 camera poses per
374
+ clip, totaling 3,600,000 frame-level pose exposures.
375
+
376
+ **Induced Patch-Motion Supervision Data Size:** The same 240,000 clips, with
377
+ 80 sampled source patches per frame (1,200 per clip), totaling 288,000,000
378
+ sampled patch exposures. Motion targets are derived from camera poses, depths,
379
+ and intrinsics.
380
+
381
+ These are sampled training exposures, including warmup and joint fine-tuning,
382
+ not unique annotations. Patch exposures count sampled source patches; valid
383
+ patch-to-frame motion targets and recurrent reuse are not counted separately.
384
+
385
+ **Data Collection Method by dataset:** Synthetic. Existing datasets: simulation
386
+ for TartanAir, TartanGround, CarlaOcc, and LightwheelOcc; game capture for
387
+ OmniWorld-Game.
388
+
389
+ **Labeling Method by dataset:** Synthetic. The local estimator uses the original DPVO
390
+ pose and induced patch-motion supervision. Simulation/game-derived geometry
391
+ and camera metadata supply the supervision. The per-source annotation manifests
392
+ have not been verified.
393
+
394
+ Images are resized with preserved aspect ratio and center-cropped to
395
+ 480 x 640. No training clip exceeds 15 frames, and no evaluation sequence
396
+ or dedicated long-trajectory pose corpus is used. A fine-tuning validation
397
+ split, exact downloaded revisions, acquisition dates, unique example count,
398
+ and complete sample-level provenance are not documented.
399
+
400
+ The initialized DPVO checkpoint and frozen DINOv3 and MoGe-2 components
401
+ carry additional upstream pretraining history. DINOv3-S/16 was
402
+ pretrained on LVD-1689M. The five-source fine-tuning list does not describe
403
+ all data used to train these upstream components.
404
+
405
+ **Other Dataset Properties:** Fine-tuning uses synthetic simulation/game scenes,
406
+ RGB video, camera poses, and induced patch-motion supervision. Dataset content
407
+ and assets retain their providers' terms. The fine-tuning data contain no real
408
+ personal information and satisfy applicable privacy requirements and
409
+ dataset-review conditions. This applies to the five fine-tuning datasets;
410
+ the personal-data content of externally pretrained components is not specified.
411
+ A sample-level provenance inventory is not included.
412
+ Linguistic characteristics are Not Applicable to the geometric training task:
413
+ no text prompt, natural-language output, or language-specific evaluation is used.
414
+
415
+ ### Testing Dataset:
416
+
417
+ We evaluate MetricTrail on the following existing captured benchmarks. Testing
418
+ and quantitative evaluation refer to these benchmark protocols; a separate
419
+ project-specific held-out test partition is not specified.
420
+
421
+ | Benchmark | Reported coverage and input | Task |
422
+ | --- | --- | --- |
423
+ | KITTI Odometry | Sequences 00-10, all frames; monocular or calibrated stereo | Long-sequence trajectories |
424
+ | Oxford Spires | Ten sequences, 38,380 frames, stride 1 | Trajectories and dense reconstruction |
425
+ | VBR | All seven sequences, stride 1; 8,815-18,846 frames per sequence, routes up to 5.20 km | Long-sequence trajectories |
426
+ | 7Scenes | Dense-reconstruction protocol; additional trajectory evaluation on 18 official test sequences at stride 5 | Indoor geometry and trajectories |
427
+ | TUM-Dynamic | Captured sequences with dynamic content; complete sequence/frame counts are not specified in the main protocol | Dense reconstruction |
428
+ | KITTI video depth | 13 videos, 1,269 frames | Frame-level depth |
429
+ | TUM RGB-D | All nine Freiburg1 sequences, 8,694 associated frames, stride 1 | Trajectories |
430
+ | LaMAria | Five full sequences: R_01, R_04, R_06, R_07, R_08; monocular grayscale, no dataset-specific fine-tuning | Out-of-domain trajectories |
431
+ | Wild-SLAM MoCap | All ten dynamic sequences, 9,039 associated RGB frames, stride 1 | Trajectories with dynamic content |
432
+
433
+ **Data Collection Method by dataset:** Automatic/Sensors. Existing captured
434
+ camera/sensor datasets.
435
+
436
+ **Labeling Method by dataset:** Hybrid: Automatic/Sensors, Automated.
437
+ Benchmark-provided reference trajectories,
438
+ geometry/depth, and calibration are used for comparison as applicable.
439
+
440
+ **Other Dataset Properties:** These are captured RGB or grayscale camera
441
+ sequences, with benchmark-specific depth, calibration, and reference trajectories.
442
+ The coverage and available frame counts are listed above.
443
+ Indoor, outdoor, driving, handheld, and dynamic scenes may
444
+ include identifiable people, private interiors, readable text, or locations.
445
+ Benchmark footage retains its providers' terms. Linguistic characteristics are
446
+ Not Applicable to the evaluated geometric tasks; incidental text in frames is
447
+ not a language input or a language-performance benchmark.
448
+
449
+ Additional in-the-wild reconstructions are qualitative examples and do not
450
+ constitute a quantified, representative deployment test set.
451
+
452
+ ### Evaluation Dataset:
453
+
454
+ The results below use research evaluation workflows. The repository provides
455
+ prediction generation but does not include benchmark evaluation scripts.
456
+ Its shipped configuration does not expose the indoor global-BA/refinement
457
+ variants or dense export workflow used in these evaluations.
458
+
459
+ Trajectory accuracy is full-sequence absolute trajectory error (ATE), measured
460
+ as RMSE after a single proper Sim(3) alignment per sequence. Main long-sequence
461
+ results use meters; additional indoor/dynamic trajectory results use centimeters.
462
+ Dataset averages give sequence-level results equal weight in the reported
463
+ additional protocols. LC denotes the original SALAD/PyPose loop-closure workflow
464
+ used in our evaluations. These results do not establish numerical or benchmark
465
+ equivalence for the new external-candidate NumPy/SciPy postprocessor. See
466
+ [the loop-correction workflow](../docs/loop-closure.md).
467
+
468
+ | Benchmark / configuration | Average ATE |
469
+ | --- | ---: |
470
+ | KITTI Odometry, RGB-only calibration, without LC | 14.05 m |
471
+ | KITTI Odometry, RGB-only calibration, with LC | 9.78 m |
472
+ | KITTI Odometry, supplied intrinsics, with LC | 7.39 m |
473
+ | KITTI Odometry, calibrated stereo, with LC | 3.00 m |
474
+ | Oxford Spires, RGB-only calibration, without / with LC | 1.77 / 1.77 m |
475
+ | VBR, RGB-only calibration with revisit focal refinement, without / with LC | 16.36 / 10.88 m |
476
+ | 7Scenes, RGB-only calibration, local / with global BA | 6.7 / 6.3 cm |
477
+ | TUM RGB-D, RGB-only calibration, local / global BA / global BA plus refinement | 8.4 / 4.9 / 4.4 cm |
478
+ | TUM RGB-D, supplied intrinsics, local / global BA / global BA plus refinement | 7.5 / 4.1 / 3.7 cm |
479
+ | LaMAria, RGB-only calibration / supplied intrinsics | 8.73 / 8.58 m |
480
+ | Wild-SLAM MoCap, RGB-only calibration / supplied intrinsics | 2.70 / 1.65 cm |
481
+
482
+ VBR aggregate results include an optional **retrospective** revisit-based focal
483
+ refinement. Under matched settings, this improves base-calibration ATE from
484
+ 33.51 to 16.36 m without LC and from 27.95 to 10.88 m with LC. Refinement
485
+ averages 7.1 minutes per routed sequence, dominated by RGB correspondence
486
+ matching. These results should not be described as end-to-end online results
487
+ at the KITTI steady-state throughput.
488
+
489
+ Dense reconstruction uses RGB-estimated intrinsics without LC. Results are
490
+ evaluated after sequence-level Sim(3) alignment followed by point-to-point ICP.
491
+ CD is symmetric Chamfer distance; F1 is measured at the indicated distance
492
+ threshold.
493
+
494
+ | Benchmark | CD (m, lower is better) | F1 (%, higher is better) | Threshold |
495
+ | --- | ---: | ---: | --- |
496
+ | 7Scenes | 0.04 | 97.60 | 0.25 m |
497
+ | TUM-Dynamic | 0.13 | 89.58 | 0.25 m |
498
+ | Oxford Spires | 0.98 | 95.12 | 4 m |
499
+
500
+ KITTI video-depth evaluation fits one multiplicative scale per video without
501
+ a shift. Abs Rel is **0.057** and delta-1 accuracy
502
+ (depth-ratio error below 1.25) is **97.8%**. Dense depth comes from the frozen
503
+ frame-level provider; it is not a densely optimized output of local BA.
504
+
505
+ **Data Collection Method by dataset:** Automatic/Sensors. The captured benchmarks
506
+ described under
507
+ [Testing Dataset](#testing-dataset).
508
+
509
+ **Labeling Method by dataset:** Hybrid: Automatic/Sensors, Automated.
510
+ Reference-trajectory, geometry, and depth
511
+ comparison under the alignment protocols above. Sim(3), ICP, and depth-scale
512
+ alignment measure agreement after alignment; these scores do not establish
513
+ unaligned metric-scale accuracy, calibrated uncertainty, demographic parity,
514
+ or safe downstream control.
515
+
516
+ **Other Dataset Properties:** Quantitative evaluation uses the same benchmark
517
+ coverage, data counts, modalities, scene content, and sensor-derived references
518
+ listed under [Testing Dataset](#testing-dataset). The separate tasks are
519
+ trajectory estimation, dense reconstruction, and frame-level depth, under the
520
+ alignment protocols above. Exact TUM-Dynamic counts and the dense-reconstruction
521
+ 7Scenes frame inventory are not documented; the 18-sequence
522
+ 7Scenes count refers to the additional trajectory protocol. No separate
523
+ evaluation dataset with language inputs is used, so linguistic characteristics
524
+ are Not Applicable. Captured footage may contain personal or identifying scene
525
+ information and retains its providers' terms.
526
+
527
+ ### Inference:
528
+
529
+ **Acceleration Engine:** PyTorch/CUDA with DPVO CUDA extensions and xformers
530
+ attention for MoGe-2. The default configuration enables FP16 for MoGe-2 and a
531
+ depth-overlap queue of four. DINOv3 feature extraction uses BF16; the trained
532
+ checkpoint stores FP32 tensors. No TensorRT or Triton export is provided.
533
+
534
+ **Test Hardware:** NVIDIA Ampere A100. The inference GPU's memory capacity and a
535
+ minimum supported hardware configuration are not specified.
536
+
537
+ The following measurements use KITTI-02. Latency means
538
+ time to first output; throughput means steady-state processing; memory means
539
+ peak allocated GPU memory.
540
+
541
+ | Configuration | First-output latency | Steady-state throughput | Peak GPU memory |
542
+ | --- | ---: | ---: | ---: |
543
+ | Supplied intrinsics | Approximately 0.7 s | 12.70 FPS | 3.21 GB |
544
+ | RGB-only calibration | Approximately 175 s | 12.70 FPS | 6.81 GB |
545
+
546
+ RGB-only startup includes initial MoGe-2 camera prediction, geometric
547
+ calibration, and prefix replay. Memory subsequently drops to 3.21 GB.
548
+ These measurements are specific to the reported KITTI configuration and do
549
+ not include a general latency guarantee for optional retrospective refinement.
550
+
551
+ Known limitations include dependence on depth-provider accuracy, degraded
552
+ sparse correspondence under low parallax, rapid rotation, rolling shutter,
553
+ and motion blur, and sensitivity to the shared camera model. Dynamic-scene
554
+ reconstruction improvements are not uniform: the TUM-Dynamic scores trail
555
+ leading evaluated methods. MetricTrail uses no explicit
556
+ dynamic-object mask or dynamics-specific objective. Optional retrieved loop
557
+ edges assume near-duplicate views are approximately coincident without
558
+ pairwise geometric verification; incorrect matches can affect the trajectory.
559
+
560
+ ## Ethical Considerations:
561
+
562
+ NVIDIA believes Trustworthy AI is a shared responsibility and we have established
563
+ policies and practices to enable development for a wide array of AI applications.
564
+ Developers should work with their internal model team to ensure this model meets
565
+ requirements for the relevant industry and use case and addresses unforeseen
566
+ product misuse.
567
+
568
+ Please make sure you have proper rights and permissions for all input image and
569
+ video content; if image or video includes people, personal health information,
570
+ or intellectual property, the image or video generated will not blur or maintain
571
+ proportions of image subjects included.
572
+
573
+ Please report model quality, risk, security vulnerabilities or NVIDIA AI Concerns
574
+ [here](https://www.nvidia.com/en-us/support/submit-security-vulnerability/).
575
+