{"id":23437275,"url":"https://github.com/pvnieo/surfmnet-pytorch","last_synced_at":"2025-04-13T04:51:55.768Z","repository":{"id":255012349,"uuid":"261711724","full_name":"pvnieo/SURFMNet-pytorch","owner":"pvnieo","description":"A pytorch implementation of: \"Unsupervised Deep Learning for Structured Shape Matching\"","archived":false,"fork":false,"pushed_at":"2021-06-09T09:03:31.000Z","size":18925,"stargazers_count":16,"open_issues_count":1,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-13T04:51:48.141Z","etag":null,"topics":["functional-maps","python3","pytorch","shape-correspondence","shape-descriptor","shape-matching","surfmnet-pytorch","unsupervised-deep-learning"],"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/pvnieo.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":"2020-05-06T09:28:21.000Z","updated_at":"2025-01-30T19:17:01.000Z","dependencies_parsed_at":"2024-08-27T14:26:59.781Z","dependency_job_id":null,"html_url":"https://github.com/pvnieo/SURFMNet-pytorch","commit_stats":null,"previous_names":["pvnieo/surfmnet-pytorch"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pvnieo%2FSURFMNet-pytorch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pvnieo%2FSURFMNet-pytorch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pvnieo%2FSURFMNet-pytorch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pvnieo%2FSURFMNet-pytorch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pvnieo","download_url":"https://codeload.github.com/pvnieo/SURFMNet-pytorch/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248665767,"owners_count":21142123,"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":["functional-maps","python3","pytorch","shape-correspondence","shape-descriptor","shape-matching","surfmnet-pytorch","unsupervised-deep-learning"],"created_at":"2024-12-23T13:44:38.503Z","updated_at":"2025-04-13T04:51:55.749Z","avatar_url":"https://github.com/pvnieo.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SURFMNet-pytorch\nA pytorch implementation of: \"Unsupervised Deep Learning for Structured Shape Matching\" [[link](http://openaccess.thecvf.com/content_ICCV_2019/papers/Roufosse_Unsupervised_Deep_Learning_for_Structured_Shape_Matching_ICCV_2019_paper.pdf)]\n\n## Installation\nThis implementation runs on python \u003e= 3.7, use pip to install dependencies:\n```bash\npip3 install -r requirements.txt\n```\n\n## Download data \u0026 preprocessing\nDownload the desired dataset and put it in the `data` folder. Multiple datasets are available [here](https://github.com/pvnieo/datasets-zoo).\n\n\u003cins\u003eAn example with the faust-remeshed dataset is provided\u003c/ins\u003e.\n\nBuild shot calculator:\n```bash\ncd fmnet/utils/shot\ncmake .\nmake\n```\nIf you got any errors in compiling shot, please see [here](https://github.com/pvnieo/3d-utils/tree/master/shot).\n\nUse `fmnet/preprocess.py` to calculate the Laplace decomposition, geodesic distance using the Dijkstra algorithm and the shot descriptors of input shapes, data are saved in .mat format:\n```bash\nusage: preprocess.py [-h] [-d DATAROOT] [-sd SAVE_DIR] [-ne NUM_EIGEN] [-nj NJOBS] [--nn NN] [--geo]\n\nPreprocess data for FMNet training. Compute Laplacian eigen decomposition, shot features, and geodesic distance for each shape.\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -d DATAROOT, --dataroot DATAROOT\n                        root directory of the dataset\n  -sd SAVE_DIR, --save-dir SAVE_DIR\n                        root directory to save the processed dataset\n  -ne NUM_EIGEN, --num-eigen NUM_EIGEN\n                        number of eigenvectors kept.\n  -nj NJOBS, --njobs NJOBS\n                        Number of parallel processes to use.\n  --nn NN               Number of Neighbor to consider when computing geodesic matrix.\n  --geo                 Compute geodesic distances.\n```\n**NB**: if the shapes have many vertices, the computation of geodesic distance will consume a lot of memory and take a lot of time.\n\n## Usage\nUse the `train.py` script to train the SURFMNET network.\n```bash\nusage: train.py [-h] [--lr LR] [--b1 B1] [--b2 B2] [-bs BATCH_SIZE] [--n-epochs N_EPOCHS] [--dim-basis DIM_BASIS] [-nv N_VERTICES] [-nb NUM_BLOCKS] [--wb WB] [--wo WO] [--wl WL] [--wd WD]\n                [--sub-wd SUB_WD] [-d DATAROOT] [--save-dir SAVE_DIR] [--n-cpu N_CPU] [--no-cuda] [--checkpoint-interval CHECKPOINT_INTERVAL] [--log-interval LOG_INTERVAL]\n\nLaunch the training of SURFMNet model.\n\noptional arguments:\n  -h, --help            show this help message and exit\n  --lr LR               adam: learning rate\n  --b1 B1               adam: decay of first order momentum of gradient\n  --b2 B2               adam: decay of first order momentum of gradient\n  -bs BATCH_SIZE, --batch-size BATCH_SIZE\n                        size of the batches\n  --n-epochs N_EPOCHS   number of epochs of training\n  --dim-basis DIM_BASIS\n                        number of eigenvectors used for representation.\n  -nv N_VERTICES, --n-vertices N_VERTICES\n                        Number of vertices used per shape\n  -nb NUM_BLOCKS, --num-blocks NUM_BLOCKS\n                        number of resnet blocks\n  --wb WB               Bijectivity penalty weight\n  --wo WO               Orthogonality penalty weight\n  --wl WL               Laplacian commutativity penalty weight\n  --wd WD               Descriptor preservation via commutativity penalty weight\n  --sub-wd SUB_WD       Percentage of subsampled vertices used to compute descriptor preservation commutativity penalty\n  -d DATAROOT, --dataroot DATAROOT\n                        root directory of the dataset\n  --save-dir SAVE_DIR   root directory of the dataset\n  --n-cpu N_CPU         number of cpu threads to use during batch generation\n  --no-cuda             Disable GPU computation\n  --checkpoint-interval CHECKPOINT_INTERVAL\n                        interval between model checkpoints\n  --log-interval LOG_INTERVAL\n                        interval between logging train information\n```\n\n### Example\n```bash\npython3 train.py -bs 4 --n-epochs 20\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpvnieo%2Fsurfmnet-pytorch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpvnieo%2Fsurfmnet-pytorch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpvnieo%2Fsurfmnet-pytorch/lists"}