{"id":27366414,"url":"https://github.com/hxwork/omnet_pytorch","last_synced_at":"2025-10-07T04:11:29.449Z","repository":{"id":49759465,"uuid":"392888832","full_name":"hxwork/OMNet_Pytorch","owner":"hxwork","description":"[ICCV 2021] OMNet: Learning Overlapping Mask for Partial-to-Partial Point Cloud Registration, Pytorch implementation.","archived":false,"fork":false,"pushed_at":"2023-06-08T14:54:46.000Z","size":8206,"stargazers_count":39,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-03T15:50:57.970Z","etag":null,"topics":["3d-point-cloud-registration","deep-learning","pytorch"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hxwork.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,"zenodo":null}},"created_at":"2021-08-05T03:17:49.000Z","updated_at":"2024-12-11T03:18:55.000Z","dependencies_parsed_at":"2025-04-13T05:57:01.307Z","dependency_job_id":"9a4694d0-e674-4c97-a70f-15facb82a3fb","html_url":"https://github.com/hxwork/OMNet_Pytorch","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hxwork/OMNet_Pytorch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hxwork%2FOMNet_Pytorch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hxwork%2FOMNet_Pytorch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hxwork%2FOMNet_Pytorch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hxwork%2FOMNet_Pytorch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hxwork","download_url":"https://codeload.github.com/hxwork/OMNet_Pytorch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hxwork%2FOMNet_Pytorch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278717599,"owners_count":26033564,"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","status":"online","status_checked_at":"2025-10-07T02:00:06.786Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["3d-point-cloud-registration","deep-learning","pytorch"],"created_at":"2025-04-13T05:56:58.870Z","updated_at":"2025-10-07T04:11:29.418Z","avatar_url":"https://github.com/hxwork.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [ICCV 2021] OMNet: Learning Overlapping Mask for Partial-to-Partial Point Cloud Registration\n\nThis is the Pytorch implementation of our ICCV2021 paper [OMNet](https://openaccess.thecvf.com/content/ICCV2021/papers/Xu_OMNet_Learning_Overlapping_Mask_for_Partial-to-Partial_Point_Cloud_Registration_ICCV_2021_paper.pdf). For our MegEngine implementation, please refer to [this repo](https://github.com/megvii-research/OMNet).\n\nOur presentation video: [[Youtube](https://www.youtube.com/watch?v=u2lTKsom8oU)][[Bilibili](https://www.bilibili.com/video/BV1Ef4y1J7XP/)].\n\n## Our Poster\n\n![image](./images/OMNet_poster.png)\n\n## Dependencies\n\n* Pytorch\u003e=1.5.0\n* Other requirements please refer to`requirements.txt`.\n\n## Data Preparation\n\n### OS data\n\nWe refer the original data from PointNet as OS data, where point clouds are only sampled once from corresponding CAD models. We offer two ways to use OS data, (1) you can download this data from its original link [original_OS_data.zip](http://modelnet.cs.princeton.edu/). (2) you can also download the data that has been preprocessed by us from link [our_OS_data.zip](https://drive.google.com/file/d/1rXnbXwD72tkeu8x6wboMP0X7iL9LiBPq/view?usp=sharing).\n\n### TS data\n\nSince OS data incurs over-fitting issue, we propose our TS data, where point clouds are randomly sampled twice from CAD models. You need to download our preprocessed ModelNet40 dataset first, where 8 axisymmetrical categories are removed and all CAD models have 40 randomly sampled point clouds. The download link is [TS_data.zip](https://drive.google.com/file/d/1DPBBI3Ulvp2Mx7SAZaBEyvADJzBvErFF/view?usp=sharing). All 40 point clouds of a CAD model are stacked to form a (40, 2048, 3) numpy array, you can easily obtain this data by using following code:\n\n```\nimport numpy as np\npoints = np.load(\"path_of_npy_file\")\nprint(points.shape, type(points))  # (40, 2048, 3), \u003cclass 'numpy.ndarray'\u003e\n```\n\nThen, you need to put the data into `./dataset/data`, and the contents of directories are as follows:\n\n```\n./dataset/data/\n├── modelnet40_half1_rm_rotate.txt\n├── modelnet40_half2_rm_rotate.txt\n├── modelnet_os\n│   ├── modelnet_os_test.pickle\n│   ├── modelnet_os_train.pickle\n│   ├── modelnet_os_val.pickle\n│   ├── test [1146 entries exceeds filelimit, not opening dir]\n│   ├── train [4194 entries exceeds filelimit, not opening dir]\n│   └── val [1002 entries exceeds filelimit, not opening dir]\n└── modelnet_ts\n    ├── modelnet_ts_test.pickle\n    ├── modelnet_ts_train.pickle\n    ├── modelnet_ts_val.pickle\n    ├── shape_names.txt\n    ├── test [1146 entries exceeds filelimit, not opening dir]\n    ├── train [4196 entries exceeds filelimit, not opening dir]\n    └── val [1002 entries exceeds filelimit, not opening dir]\n```\n\n## Training and Evaluation\n\n### Begin training\n\nFor ModelNet40 dataset, you can just run:\n\n```\npython3 train.py --model_dir=./experiments/experiment_omnet/\n```\n\nFor other dataset, you need to add your own dataset code in `./dataset/data_loader.py`. Training with a lower batch size, such as 16, may obtain worse performance than training with a larger batch size, e.g., 64.\n\n### Begin testing\n\nYou need to download the pretrained checkpoint and run:\n\n```\npython3 evaluate.py --model_dir=./experiments/experiment_omnet --restore_file=./experiments/experiment_omnet/val_model_best.pth\n```\n\nThe following table shows our performance on ModelNet40, where `val` and `test` indicate  `Unseen Shapes` and `Unseen Categories` respectively. `PRNet` and `RPMNet` indicate the partial manners used in [PRNet](https://arxiv.org/pdf/1910.12240.pdf) and [RPMNet](https://openaccess.thecvf.com/content_CVPR_2020/papers/Yew_RPM-Net_Robust_Point_Matching_Using_Learned_Features_CVPR_2020_paper.pdf) respectively.\n\n|     dataset     |     | RMSE(R) | MAE(R) | RMSE(t) | MAE(t) | Error(R) | Error(t) |                                           checkpoint                                           |\n| :-------------: | :--: | :-----: | :----: | :-----: | :----: | :------: | :------: | :---------------------------------------------------------------------------------------------: |\n| OS_PRNet_clean | val |  0.912  | 0.339 | 0.0078 | 0.0049 |  0.639  |  0.0099  | [Google Drive](https://drive.google.com/file/d/1i6nsSPFriGYxD1rDGTpbtTBYmdQcT8St/view?usp=sharing) |\n|                 | test |  2.247  | 0.652 | 0.0177 | 0.0077 |  1.241  |  0.0154  | [Google Drive](https://drive.google.com/file/d/1LTR4rCT4eQ6JXXOekeUjhXQpwhlh9NEY/view?usp=sharing) |\n| TS_PRNet_clean | val |  1.032  | 0.506 | 0.0085 | 0.0057 |  0.984  |  0.0113  | [Google Drive](https://drive.google.com/file/d/1AdutxYe7FS88uoLMf7V6Mo9Tlb9hSDlF/view?usp=sharing) |\n|                 | test |  2.372  | 0.974 | 0.0146 | 0.0077 |  1.892  |  0.0152  | [Google Drive](https://drive.google.com/file/d/1A-6xTPGPAbmnwbnt81NjhN6Mw9VMHmwN/view?usp=sharing) |\n| OS_PRNet_noise | val |  1.029  | 0.573 | 0.0089 | 0.0061 |  1.077  |  0.0123  | [Google Drive](https://drive.google.com/file/d/1JbBlBW08PQrucbdpp-G-VlWdjlik6tO7/view?usp=sharing) |\n|                 | test |  2.318  | 0.957 | 0.0155 | 0.0078 |  1.809  |  0.0156  | [Google Drive](https://drive.google.com/file/d/154xYpstuQJ0eDk3rqbDShg5P5b17xlry/view?usp=sharing) |\n| TS_PRNet_noise | val |  1.314  | 0.771 | 0.0102 | 0.0074 |  1.490  |  0.0148  | [Google Drive](https://drive.google.com/file/d/1ZzetsjHC4POh8Irr1RfSl8boPJvCQFMx/view?usp=sharing) |\n|                 | test |  2.443  | 1.189 | 0.0181 | 0.0097 |  2.311  |  0.0193  | [Google Drive](https://drive.google.com/file/d/1eHi9pzAmL3jrYGmv6X9xy-8U7hAw9OdI/view?usp=sharing) |\n| OS_RPMNet_clean | val |  0.771  | 0.277 | 0.0154 | 0.0056 |  0.561  |  0.0122  | [Google Drive](https://drive.google.com/file/d/1_wGJTxaezFvb4xqABmFfrIR03Wq2c80U/view?usp=sharing) |\n|                 | test |  3.719  | 1.314 | 0.0392 | 0.0151 |  2.659  |  0.0321  | [Google Drive](https://drive.google.com/file/d/1IQ0DZ_OmaZPErPqm4DJ4NBWfnt1d1YG5/view?usp=sharing) |\n| TS_RPMNet_clean | val |  1.401  | 0.544 | 0.0241 | 0.0095 |  1.128  |  0.0202  | [Google Drive](https://drive.google.com/file/d/1IlUSzGoAXHzon5ZrwLPNBsTuICphhrAO/view?usp=sharing) |\n|                 | test |  4.016  | 1.622 | 0.0419 | 0.0184 |  3.205  |  0.0394  | [Google Drive](https://drive.google.com/file/d/1NJZcfHoXlCFTMVz01ZACiiTMNUEW1QQC/view?usp=sharing) |\n| OS_RPMNet_noise | val |  0.998  | 0.555 | 0.0172 | 0.0078 |  1.079  |  0.0167  | [Google Drive](https://drive.google.com/file/d/1LvhPwrtUs-A2AZWO1YgrvhgcxdZXTen-/view?usp=sharing) |\n|                 | test |  3.572  | 1.570 | 0.0391 | 0.0172 |  3.073  |  0.0359  | [Google Drive](https://drive.google.com/file/d/1xnHcKikXs8D9UuGchwo3YK21vG86zRtp/view?usp=sharing) |\n| TS_RPMNet_noise | val |  1.522  | 0.817 | 0.0189 | 0.0098 |  1.622  |  0.0208  |                                                -                                                |\n|                 | test |  4.356  | 1.924 | 0.0486 | 0.0223 |  3.834  |  0.0476  |                                                -                                                |\n\n## Citation\n\n```\n@InProceedings{Xu_2021_ICCV,\n    author={Xu, Hao and Liu, Shuaicheng and Wang, Guangfu and Liu, Guanghui and Zeng, Bing},\n    title={OMNet: Learning Overlapping Mask for Partial-to-Partial Point Cloud Registration},\n    booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV)},\n    month={October},\n    year={2021},\n    pages={3132-3141}\n}\n```\n\n## Acknowledgments\n\nIn this project we use (parts of) the official implementations of the following works:\n\n* [RPMNet](https://github.com/yewzijian/RPMNet) (ModelNet40 preprocessing and evaluation)\n* [PRNet](https://github.com/WangYueFt/prnet) (ModelNet40 preprocessing)\n\nWe thank the respective authors for open sourcing their methods.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhxwork%2Fomnet_pytorch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhxwork%2Fomnet_pytorch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhxwork%2Fomnet_pytorch/lists"}