Runtime Error: Landmark already exists

Producing a 3D model of the underside structure of a bridge - roughly 470 images. Here’s share link from GoogleDrive for those with interest in running it.

https://drive.google.com/drive/folders/1sZqZ9eiFRuhQfvkTldebite8PI-YcJTx?usp=sharing

Fails with the following error merging multiple reconstructions:

[WARNING] Multiple reconstructions detected (6), this might be an indicator that some areas did not have sufficient overlap
[INFO] Attempting merge
[INFO] Merging reconstruction 0
[INFO] Merging reconstruction 1
Traceback (most recent call last):
File “/code/run.py”, line 59, in
retcode = app.execute()
File “/code/stages/odm_app.py”, line 130, in execute
raise e
File “/code/stages/odm_app.py”, line 94, in execute
self.first_stage.run()
File “/code/opendm/types.py”, line 346, in run
self.next_stage.run(outputs)
File “/code/opendm/types.py”, line 346, in run
self.next_stage.run(outputs)
File “/code/opendm/types.py”, line 346, in run
self.next_stage.run(outputs)
File “/code/opendm/types.py”, line 327, in run
self.process(self.args, outputs)
File “/code/stages/run_opensfm.py”, line 37, in process
octx.reconstruct(self.rerun())
File “/code/opendm/osfm.py”, line 55, in reconstruct
self.check_merge_partial_reconstructions()
File “/code/opendm/osfm.py”, line 92, in check_merge_partial_reconstructions
new_point = merged.create_point(point.id, point.coordinates)
File “/code/SuperBuild/install/bin/opensfm/opensfm/types.py”, line 299, in create_point
return self.map.create_landmark(point_id, coord)
RuntimeError: Landmark 27898 already exists.

I can resume processing and it finishes quickly (2 min) with an incomplete model. Here’s the view of the PC.

1 Like

Hmm…

Can you please provide your processing parameters as well? Full console log would help so we know what version you’re using as well and any other messages earlier on that may be helpful.

The key issue is that there’s insufficient overlap, so multiple partial reconstructions were created (and ODM failed to merge them, which looks like a bug, it will get fixed at the next release), but even if ODM can merge them, you will probably end up with a not-so-good model.

1 Like
camera-lens: brown, matcher-type: bruteforce, pc-quality: ultra, texturing-keep-unseen-faces: true, use-3dmesh: true

I’ve gotten the same results running a ‘default’ config and several other variants. I was able to break the model up into 3 parts and run each one successfully.

1 Like

Makes sense. I’m running the GPU container if it matters.

There are other packages that were run on it including DroneDeploy and SiteScan.

Also, I was curious if the camera setup might have contributed. This is a forward mounted gimbel on the Skydio S2 that captures the underneath photos by pointing upwards. In general, photos could have been captured at many angles.

1 Like

I’m wondering if you might not reduce the number of partial reconstructions by maybe disabling prematching with --matcher-neighbors 0 and increasing --feature-quality ultra and -min-num-features 32000

1 Like

Thanks for the suggestion! It’s still processing but quite a ways down the road now. Feature quality seems like a relatively blunt instrument. I’ll let everyone know the results.

1 Like

Also, since Piero moves Lightning fast, there’s already a PR merged which should help with multiple reconstructions, as well as your Landmark issue. Not sure what ODM tag that will go out in, but I think a re-run when that is published might do you good :slight_smile:

2 Likes

Update to this in the event its important to the resolution. I ran the same dataset on non-GPU hardware, both in single node and autoscale mode, both completed without error. Here are the settings.

auto-boundary: true, mesh-octree-depth: 12, use-3dmesh: true, pc-geometric: true, pc-quality: high, mesh-size: 300000
2 Likes

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.