{"id":18792494,"url":"https://github.com/prbonn/make_it_dense","last_synced_at":"2025-06-25T14:33:23.483Z","repository":{"id":41571847,"uuid":"510283022","full_name":"PRBonn/make_it_dense","owner":"PRBonn","description":"Make it Dense: Self-Supervised Geometric Scan Completion of Sparse 3D LiDAR Scans in Large Outdoor Environments","archived":false,"fork":false,"pushed_at":"2023-12-07T08:25:14.000Z","size":10082,"stargazers_count":134,"open_issues_count":2,"forks_count":12,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-04-13T14:47:12.690Z","etag":null,"topics":["lidar-mapping","robotics","scan-completion","self-supervised-learning","tsdf"],"latest_commit_sha":null,"homepage":"https://www.ipb.uni-bonn.de/wp-content/papercite-data/pdf/vizzo2022ral-iros.pdf","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PRBonn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-07-04T08:55:27.000Z","updated_at":"2025-01-06T19:52:34.000Z","dependencies_parsed_at":"2023-12-07T09:38:58.815Z","dependency_job_id":null,"html_url":"https://github.com/PRBonn/make_it_dense","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/PRBonn/make_it_dense","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PRBonn%2Fmake_it_dense","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PRBonn%2Fmake_it_dense/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PRBonn%2Fmake_it_dense/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PRBonn%2Fmake_it_dense/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PRBonn","download_url":"https://codeload.github.com/PRBonn/make_it_dense/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PRBonn%2Fmake_it_dense/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261892009,"owners_count":23225840,"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":["lidar-mapping","robotics","scan-completion","self-supervised-learning","tsdf"],"created_at":"2024-11-07T21:20:07.343Z","updated_at":"2025-06-25T14:33:23.459Z","avatar_url":"https://github.com/PRBonn.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Make it Dense: Self-Supervised Geometric Scan Completion of Sparse 3D LiDAR Scans in Large Outdoor Environments\n\n\nThis repository contains the implementation of the following publication:\n\n```bibtex\n@article{vizzo2022ral,\n  author  = {I. Vizzo and B. Mersch and R. Marcuzzi and L. Wiesmann and J. Behley and C. Stachniss},\n  title   = {{Make it Dense: Self-Supervised Geometric Scan Completion of Sparse 3D LiDAR Scans in Large Outdoor Environments}},\n  journal = {IEEE Robotics and Automation Letters (RA-L)},\n  year    = 2022\n}\n```\n\n## Overview\n\n![motivation](docs/motivation.png)\n\n_A TSDF-based surface model from a single 16-beam LiDAR scan (left) turned into\na denser, completed TSDF-based surface model (right) by the learning-based\napproach proposed in this paper._\n\n![refusion](docs/refusion.png)\n\n_Overview of our approach. We first generate a TSDF volume of a single scan. We\nthen apply our geometric scan completion network in a strided fashion, such that\nmissing values are added to the single-scan TSDF, giving a more complete TSDF\nvolume. The predicted TSDF values are then used to update the global TSDF\nrepresentation using a weighting term `η` to avoid integrating the same\nobservation twice into the map._\n\n## Table of Contents\n\n- [Installation](#installation)\n  - [Instal `OpenVDB`](#instal-openvdb)\n  - [Install `vdb_to_numpy`](#install-vdb_to_numpy)\n  - [Install `vdbfusion`](#install-vdbfusion)\n  - [Install `make_it_dense`](#install-make_it_dense)\n  - [Install `torch`](#install-torch)\n- [Data](#data)\n- [Training](#training)\n  - [Precache](#precache)\n  - [Inspecting cached models](#inspecting-cached-models)\n  - [Train](#train)\n- [Testing](#testing)\n  - [Single Scan Test](#single-scan-test)\n  - [Test Refusion Pipeline](#test-refusion-pipeline)\n\n## Installation\n\n### Instal `OpenVDB`\n\nYou will need to install the library from [source](https://www.openvdb.org/documentation/doxygen/build.html), I would also reccomend to use my own [fork](https://github.com/nachovizzo/openvdb) until I found a solution for [#1096](https://github.com/AcademySoftwareFoundation/openvdb/issues/1096), if you have all dependencies installed just:\n\n```sh\ngit clone https://github.com/nachovizzo/openvdb.git -b nacho/fix_background_inactive \\\n  \u0026\u0026 cd openvdb \\\n  \u0026\u0026 mkdir build \u0026\u0026 cd build \\\n  \u0026\u0026 cmake -DOPENVDB_BUILD_PYTHON_MODULE=ON -DUSE_NUMPY=ON .. \\\n  \u0026\u0026 sudo make -j$(nproc) all install \n```\n\n### Install `vdb_to_numpy`\n\nWe need this small library to convert our VDB volumes to numpy arrays, and use the data for training.\n\n\n```sh\ngit clone https://github.com/PRBonn/vdb_to_numpy \\\n    \u0026\u0026 cd vdb_to_numpy \\\n    \u0026\u0026 pip install .\n```\n\n### Install `vdbfusion`\n\nWe need to install this library from the source, not from the pip package. All the details are in the [INSTALL.md](https://github.com/PRBonn/vdbfusion/blob/main/INSTALL.md), but basically:\n\n```sh\ngit clone https://github.com/PRBonn/vdbfusion.git \\\n    \u0026\u0026 cd vdbfusion \\\n    \u0026\u0026 pip install .\n```\n\n### Install `make_it_dense`\nOn the root of this repository do `pip install .`\n\n### Install `torch`\n\nI do not enforce any particular version of PyTorch, make sure it is not extremely old and that it has CUDA support\n\n## Data\n\nWe use the KITTI Odometry dataset, download it and place it in the `data/` folder. If you don't want to do so, you can also change the path in the [config/kitti.yaml](config/kitti.yaml) file.\n\n## Training\n\nTo reproduce the results of the paper, you can use sequence `07` from KITTI to train the network\n\n### Precache\n\nTo speed up training it is recommended to first cache all the vdb-grids, for there is a handy script that will do it for you:\n\n```sh\n./apps/precache.py -s 07\n```\n\nThis will take some time but will save a lot in the future\n\n### Inspecting cached models\n\nTo make sure everything is OK I would advise you to also inspect the VDB models you generate for training:\n\n\n```sh\n./apps/dump_training_data.py -s 07\n```\n\nThis will output all the vdbs that will be used for training following this structure:\n```sh\n├── gt\n│   ├── gt_tsdf_10\n│   ├── gt_tsdf_20\n│   └── gt_tsdf_40\n└── tsdf\n```\n\nTo visually inspect the models, go to one directory and run `vdb_view *.vdb`, using the arrows you can navigate the OpenVDB visualizer and see all the models.\n\n### Train\n\nTraining should now be straight-forward:\n```sh\n./apps/train.py --config config/kitti.yaml\n```\n\n## Testing\n\nTo test the network you can use your trained model or use the default one in [models](./models/). There are 2 entry points to test the network:\n\n### Single Scan Test\n\nTo test how the network behaves with just 1 scan (use any point-cloud you wish):\n```sh\n./apps/test_scan.py --cuda  $DATASETS/kitti-odometry/dataset/sequences/00/velodyne/000000.bin \n```\n\n### Test Refusion Pipeline\n\nTo test the full pipeline when using a 16-beam LiDAR you can use the following command:\n```sh\n./apps/refusion_pipeline.py --sequence 00 -n 30 --visualize\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprbonn%2Fmake_it_dense","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprbonn%2Fmake_it_dense","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprbonn%2Fmake_it_dense/lists"}