{"id":18439458,"url":"https://github.com/idiap/eslam","last_synced_at":"2025-04-13T10:44:47.478Z","repository":{"id":144961988,"uuid":"568861416","full_name":"idiap/ESLAM","owner":"idiap","description":null,"archived":false,"fork":false,"pushed_at":"2023-09-29T10:45:14.000Z","size":59,"stargazers_count":214,"open_issues_count":1,"forks_count":21,"subscribers_count":15,"default_branch":"main","last_synced_at":"2025-03-27T02:10:01.652Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/idiap.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-21T15:09:45.000Z","updated_at":"2025-03-21T16:28:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"3cb0aef4-bc34-4e62-804e-b6c455a9d7d7","html_url":"https://github.com/idiap/ESLAM","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idiap%2FESLAM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idiap%2FESLAM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idiap%2FESLAM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idiap%2FESLAM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/idiap","download_url":"https://codeload.github.com/idiap/ESLAM/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248702196,"owners_count":21148114,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T06:24:50.936Z","updated_at":"2025-04-13T10:44:47.457Z","avatar_url":"https://github.com/idiap.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n[CVPR 2023 Highlight]\n\nESLAM: Efficient Dense SLAM System Based on Hybrid Representation of Signed Distance Fields\n\n[Project Page](https://www.idiap.ch/paper/eslam/) | [Paper](https://arxiv.org/abs/2211.11704)\n\u003c/h1\u003e\n\n\u003cbr\u003e\n\n## Installation\n\nFirst you have to make sure that you have all dependencies in place.\nThe simplest way to do so, is to use [anaconda](https://www.anaconda.com/). \n\nYou can create an anaconda environment called `eslam`. For linux, you need to install **libopenexr-dev** before creating the environment.\n```bash\nsudo apt-get install libopenexr-dev\n    \nconda env create -f environment.yaml\nconda activate eslam\n```\nIf desired, the Open3D package can be installed in the [headless rendering](http://www.open3d.org/docs/latest/tutorial/Advanced/headless_rendering.html) mode. This is useful for running ESLAM on a server without a display. We recommend to install from [this commit](https://github.com/isl-org/Open3D/tree/v0.15.1) as we observed bugs in other releases of Open3D.\n\n## Run\n\n### Replica\nDownload the data as below and the data is saved into the `./Datasets/Replica` folder.\n```bash\nbash scripts/download_replica.sh\n```\nand you can run ESLAM:\n```bash\npython -W ignore run.py configs/Replica/room0.yaml\n```\nThe mesh for evaluation is saved as `$OUTPUT_FOLDER/mesh/final_mesh_eval_rec_culled.ply`, where the unseen and occluded regions are culled using all frames.\n\n\n### ScanNet\nPlease follow the data downloading procedure on [ScanNet](http://www.scan-net.org/) website, and extract color/depth frames from the `.sens` file using this [code](https://github.com/ScanNet/ScanNet/blob/master/SensReader/python/reader.py).\n\n\u003cdetails\u003e\n  \u003csummary\u003e[Directory structure of ScanNet (click to expand)]\u003c/summary\u003e\n  \n  DATAROOT is `./Datasets` by default. If a sequence (`sceneXXXX_XX`) is stored in other places, please change the `input_folder` path in the config file or in the command line.\n\n```\n  DATAROOT\n  └── scannet\n      └── scans\n          └── scene0000_00\n              └── frames\n                  ├── color\n                  │   ├── 0.jpg\n                  │   ├── 1.jpg\n                  │   ├── ...\n                  │   └── ...\n                  ├── depth\n                  │   ├── 0.png\n                  │   ├── 1.png\n                  │   ├── ...\n                  │   └── ...\n                  ├── intrinsic\n                  └── pose\n                      ├── 0.txt\n                      ├── 1.txt\n                      ├── ...\n                      └── ...\n\n```\n\u003c/details\u003e\n\nOnce the data is downloaded and set up properly, you can run ESLAM:\n```bash\npython -W ignore run.py configs/ScanNet/scene0000.yaml\n```\nThe final mesh is saved as `$OUTPUT_FOLDER/mesh/final_mesh_culled.ply`.\n\n### TUM RGB-D\nDownload the data as below and the data is saved into the `./Datasets/TUM` folder.\n```bash\nbash scripts/download_tum.sh\n```\nand you can run ESLAM:\n```bash\npython -W ignore run.py configs/TUM_RGBD/freiburg1_desk.yaml\n```\nThe final mesh is saved as `$OUTPUT_FOLDER/mesh/final_mesh_culled.ply`.\n\n## Evaluation\n\n### Average Trajectory Error\nTo evaluate the average trajectory error. Run the command below with the corresponding config file:\n```bash\n# An example for room0 of Replica\npython src/tools/eval_ate.py configs/Replica/room0.yaml\n```\n\n### Reconstruction Error\nTo evaluate the reconstruction error, first download the ground truth Replica meshes and the files that determine the unseen regions.\n```bash\nbash scripts/download_replica_mesh.sh\n```\nThen run the `cull_mesh.py` with the following commands to exclude the unseen and occluded regions from evaluation.\n```bash\n# An example for room0 of Replica\n# this code should create a culled mesh named 'room0_culled.ply'\nGT_MESH=cull_replica_mesh/room0.ply\npython src/tools/cull_mesh.py configs/Replica/room0.yaml --input_mesh $GT_MESH\n```\n\nThen run the command below. The 2D metric requires rendering of 1000 depth images, which will take some time. Use `-2d` to enable 2D metric. Use `-3d` to enable 3D metric.\n```bash\n# An example for room0 of Replica\nOUTPUT_FOLDER=output/Replica/room0\nGT_MESH=cull_replica_mesh/room0_culled.ply\npython src/tools/eval_recon.py --rec_mesh $OUTPUT_FOLDER/mesh/final_mesh_eval_rec_culled.ply --gt_mesh $GT_MESH -2d -3d\n```\n\n## Visualizing ESLAM Results\nFor visualizing the results, we recommend to set `mesh_freq: 40` in [configs/ESLAM.yaml](configs/ESLAM.yaml) and run ESLAM from scratch.\n\nAfter ESLAM is trained, run the following command for visualization.\n\n```bash\npython visualizer.py configs/Replica/room0.yaml --output output/Replica/room0 --top_view --save_rendering\n```\nThe result of the visualization will be saved at `output/Replica/room0/vis.mp4`. The green trajectory indicates the ground truth trajectory, and the red one is the trajectory of ESLAM.\n\nNote: `mesh_freq: 40` means extracting a mesh every 40 input frames. Since extracting a mesh with a high resolution takes some time, for faster running of ESLAM for visualization set `meshing resolution` in [configs/Replica/replica.yaml](configs/Replica/replica.yaml) to a higher value before running ESLAM (*e.g.*, 5 cm).\n\n### Visualizer Command line arguments\n- `--output $OUTPUT_FOLDER` output folder (overwrite the output folder in the config file)\n- `--top_view` set the camera to top view. Otherwise, the camera is set to the first frame of the sequence\n- `--save_rendering` save rendering video to `vis.mp4` in the output folder\n- `--no_gt_traj` do not show ground truth trajectory\n\n## Related Repositories\nWe would like to extend our gratitude to the authors of [NICE-SLAM](https://github.com/cvg/nice-slam) for their \nexceptional work. Their code served as a valuable foundation for our own project, and we are appreciative of the \neffort they put into their work.\n\n## Contact\nYou can contact the author through email: mohammad.johari At idiap.ch.\n\n## Citing\nIf you find our work useful, please consider citing:\n```BibTeX\n@inproceedings{johari-et-al-2023,\n  author = {Johari, M. M. and Carta, C. and Fleuret, F.},\n  title = {{ESLAM}: Efficient Dense SLAM System Based on Hybrid Representation of Signed Distance Fields},\n  booktitle = {Proceedings of the IEEE international conference on Computer Vision and Pattern Recognition (CVPR)},\n  year = {2023},\n  type = {Highlight}\n}\n```\n\n### Acknowledgement\nThis work was supported by ams OSRAM.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fidiap%2Feslam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fidiap%2Feslam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fidiap%2Feslam/lists"}