Skip to content

Reconstruct.py & Demo.ipynb are in conflict with each other and broken // Built the project but couldn't verify results #30

@PoyrazTahan

Description

@PoyrazTahan

Hey Authors, First of all I would like to start by, I loved your approach in terms of using Colmap and combination of newer depth tecqniques to first get a very close camera position and then putting the depths and finalize with regularizing the on normals. Brilliant approach. Especially I am very impressed with your first gif in READ.md.

But after 76 hours of tinkering I am giving up, because I was only able to recreate the demo.ipynb. Which seems to be working for 6 images fairly well but rest of the benchmark and anything my custom dataset fails and I am not sure if I am doing something fundamentally wrong or the pipeline is broken.

First (Input):

  • Beside from [images and intrinsics] of the camera, did you use anything to be able to produce the example outputs?
    Like masks or special techniques to adjust camera.

Second (Visualisation):

  • There is no consistent way to visualize, your results.
    Jupyter visualization is fine but breaks very easily with more images so we would need to save the output of the final reconstruction. Which I used rec.write(sfm_output_dir) but this only saves the colmap binaries for cameras and does not include the point cloud. !! Dire in need of Rerun.io or at least .gltf so that we can export the result and evaluate independently
  • Benchmark results
    I was able to run smerf dataset. But it only saves colmap output and there is nothing else. when python scripts/benchmark.py -d smerf -m minimal is there any of your code applied or is it just for colmap reference?
  • Also
python scripts/benchmark.py \
  -d eth3d \ # (default) benchmark dataset
  -m minimal \ # overlap level [/leq5/leq10/leq30/all]
  -s facade \ # scene [/courtyard/electro/...]
  --testset_id 0 \ # id of an ovelrap level (in this case minimal)

is broken and does not work for scene meaning you have to download 20 Gb worth of data be able to do anything. Also Smerf checks if the data is downloaded and skips but ETH dataset download check fails and always redownloads.

If you get 
FileNotFoundError: [Errno 2] No such file or directory: '7z' ->
Don't forget to 
sudo apt install p7zip-full

Summary for visualisation part: I couldn't see any output beside what is actually on the demo.ipynb Normally I would just write my own output and visualiser but there are a lot of functions and classes and benchmark related class that I couldn't navigate to code to actually extract where the point clouds are actually. The code base is brittle and woven together for outside contribution.

Third (Instruction)

Sorry for my bluntness and I don't want to sound rude but your instructions are broken.
First Bug is if you don't use default parameters and pass in parameters like you suggested

# Use default ⚙️
python reconstruct.py \
    --conf sp-lg_m3dv2 \ # see config dir "configs" for other curated options
    --data_dir local/example \ # hosts sfm inputs and outputs when other options aren't specified 
    --intrinsics_path local/example/intrinsics.yaml \ # path to the intrinsics file 
    --images_dir local/example/images \ # images directory
    --cache_dir local/example/cache_dir \ # extraction outputs: depths, normals, matches, etc.
    --extract \ # use ["sky", "features", "matches", "depth", "normals"] to force re-extract
    --verbose 0 

This failles as it assumes to be Path class from pathlib import PATH

Which can be handled by adding

images_dir = Path(images_dir)
cache_dir = Path(cache_dir)

to mpsfm/test/simple.py at line 26 under data_dir conversion
But be ware this will break the demo.ipynb

So you are forces to use python reconstruct.py even though I made the fix that I told you about and was able to run with different configuration it takes the all of the images which is not what I want because I would like to be replicate your result on the first gif under SMERF/Berlin

But you haven't provided the intrinsics you used in that datasets, is that because you extract it from COLMAP? if yes does that mean you guys run first Colmap and determine the actual camera positions then run the depth algorithm on top of that?
Which is still good approach but I just couldn't understand what is going on.

Conclusion

I think the approach is amazing, in fact I was trying to built a similar thing myself which I failed and you seem like succeeded so brillant. And I would really like this approach to work as I think this is the approach we should be taking.

Also the reason I tried so hard I was quite impressed with Mr. Sarlin's previous papers on superglue and lightglue and when I saw the legends like Mr Schoenberger and Mr. Pollefeys I was sure this was bound to be good. But I just couldn't get it working

@Zador-Pataki I think you are the main maintainer as I saw your name in most of the replies, if you would like to consider I would be actually willing to contribute to the project and allocate some time weekly consistently if necessary. But I would need some guidance on where to start.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions