GLOMAP on ETH3D terrains multi-camera rig: significantly worse ground-truth rotation accuracy than COLMAP despite similar sparse reconstruction quality
Summary
I am comparing COLMAP and GLOMAP sparse reconstruction quality on the ETH3D low-res many-view
terrains dataset with a synchronized 4-camera rig setup.
GLOMAP reconstructs the subset successfully and is fast. The sparse reconstruction size and reprojection error are reasonably close to COLMAP. However, the aligned ground-truth rotation error is much worse for GLOMAP, while the position error is relatively close.
I would like to understand whether this is expected for GLOMAP on calibrated multi-camera rig datasets, or whether I may be missing a setting / conversion step related to rig calibration, sensor_from_rig, relative poses, rotation averaging, global positioning, or bundle adjustment.
Dataset
- Dataset: ETH3D low-res many-view training, sequence
terrains - Images: undistorted PINHOLE
- Rig: 4 synchronized cameras
- Full dataset: 165 frames / 660 images
- Subset used here: 50 evenly sampled synchronized frames / 200 images
- Masks: none
- Rig setup: generated via
rig_configurator - GT evaluation: aligned pose metrics against the ETH3D calibration / ground-truth reference
Builds used
- COLMAP Ceres reference: local Ceres baseline build
- COLMAP Caspar: local Caspar f32 build, generated/fixed-rig setup
- GLOMAP: local branch
glomap-eth3d-relpose-import-fix-20260504-141430, commit0edb1b8435e0f9a594318908b81a31f078a51bf7 - GLOMAP notes: this local build includes ETH3D relative-pose import fixes and final external Caspar BA support
Subset results
| Candidate | Total | Mapper | Final BA | Points | Obs | Track | Reproj | GT pos med | GT rot med |
|---|---|---|---|---|---|---|---|---|---|
| COLMAP Ceres fixed rig | 83.74s | 44.28s | n/a | 25,430 | 302,870 | 11.910 | 0.465167 px | 0.004239 m | 0.441720° |
| COLMAP Caspar generated/fixed | 72.17s | 32.71s | n/a | 25,421 | 302,839 | 11.913 | 0.464941 px | 0.004724 m | 0.846938° |
| GLOMAP 8192 + final Caspar BA | 71.52s | 31.34s | 0.87s | 24,436 | 296,054 | 12.115 | 0.491219 px | 0.004774 m | 1.776283° |
| GLOMAP 12288 + final Caspar BA | 71.42s | 28.36s | 0.85s | 24,462 | 296,084 | 12.104 | 0.491435 px | 0.004899 m | 1.890256° |
| GLOMAP 16384 + final Caspar BA | 73.31s | 31.55s | 0.85s | 24,437 | 295,932 | 12.110 | 0.490946 px | 0.004886 m | 1.725876° |
Main observation
The GLOMAP reconstructions look reasonable by internal sparse metrics:
- points and observations are only moderately lower than COLMAP,
- mean track length is similar or slightly higher,
- reprojection error is worse than COLMAP but not dramatically worse,
- runtime is good.
However, the ground-truth rotation error is much larger:
- COLMAP Ceres fixed rig:
0.441720°median rotation error - COLMAP Caspar generated/fixed:
0.846938°median rotation error - Best GLOMAP hybrid:
1.725876°median rotation error
The median position error is much closer:
- COLMAP Ceres fixed rig:
0.004239 m - COLMAP Caspar generated/fixed:
0.004724 m - GLOMAP hybrids: about
0.00477–0.00490 m
So the gap appears to be mainly rotation accuracy, not a large translation or scale failure.
GLOMAP configuration
max_num_tracks = 1500000- Loop detection: off
- Feature counts tested: 8192, 12288, 16384
- Final external BA was run after GLOMAP
- Intrinsics were fixed during final BA
sensor_from_rig/ rig calibration was intended to remain fixed during final BA
One important observation: final BA slightly improved reprojection, but did not necessarily improve ground-truth rotation. This suggests that reprojection error alone is not sufficient to identify the best pose accuracy on this dataset.
Questions
-
Is this kind of ground-truth rotation gap expected for GLOMAP on calibrated multi-camera rig datasets such as ETH3D
terrains? -
Does GLOMAP fully exploit fixed multi-camera rig calibration / fixed
sensor_from_rigconstraints during relative pose handling, rotation averaging, global positioning, and bundle adjustment? - Are there known differences between COLMAP and GLOMAP in how calibrated multi-camera rigs are represented or optimized that could explain this rotation gap?
- Which part would you recommend debugging first: rig import/conversion, relative pose graph construction, rotation averaging, global positioning, BA gauge handling, or final BA constraints?
- Are there recommended GLOMAP settings for ETH3D-style calibrated multi-camera rigs to improve ground-truth rotation accuracy?
Older full-sequence ETH3D terrains reference results
I also have older full-sequence ETH3D terrains reference results. These are not exactly the same as the subset matrix above, but they show a similar trend.
| Variant | Registered | Points | Observations | Track | Reproj | GT pos med | GT rot med | Runtime |
|---|---|---|---|---|---|---|---|---|
| COLMAP Ceres fixed rig | 165 / 660 | 45,890 | 1,146,712 | 24.988 | 0.557219 px | 0.004265 m | 0.223947° | 275.84s |
| COLMAP Caspar generated-isolation | 165 / 660 | 45,912 | 1,146,585 | 24.974 | 0.557470 px | 0.004325 m | 0.306337° | 154.15s |
| GLOMAP + final Caspar BA | 165 / 660 | 41,224 | 1,070,707 | 25.973 | 0.580288 px | 0.004460 m | 0.362145° | 136.80s |
Expected outcome
I would like to understand whether the observed GLOMAP rotation gap is expected, caused by my configuration, or something that could be improved/debugged in GLOMAP.
Any pointers to relevant settings, diagnostics, or code areas would be very helpful.
Disclosure
This issue text was drafted with the help of ChatGPT based on my local test logs, reports, and measurements. The experiments, paths, and numerical results come from my local runs.
Source: colmap/colmap