{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/unsupervised-deep-learning-for-structured","title":"Unsupervised Deep Learning for Structured Shape Matching","arxiv_id":"1812.03794","date":"2018-12-10","proceeding":"ICCV 2019 10","authors":["Jean-Michel Roufosse","Abhishek Sharma","Maks Ovsjanikov"],"abstract":"We present a novel method for computing correspondences across 3D shapes using unsupervised learning. Our method computes a non-linear transformation of given descriptor functions, while optimizing for global structural properties of the resulting maps, such as their bijectivity or approximate isometry. To this end, we use the functional maps framework, and build upon the recent FMNet architecture for descriptor learning. Unlike that approach, however, we show that learning can be done in a purely \\emph{unsupervised setting}, without having access to any ground truth correspondences. This results in a very general shape matching method that we call SURFMNet for Spectral Unsupervised FMNet, and which can be used to establish correspondences within 3D shape collections without any prior information. We demonstrate on a wide range of challenging benchmarks, that our approach leads to state-of-the-art results compared to the existing unsupervised methods and achieves results that are comparable even to the supervised learning techniques. Moreover, our framework is an order of magnitude faster, and does not rely on geodesic distance computation or expensive post-processing.","url_abs":"https://arxiv.org/abs/1812.03794v3","url_pdf":"https://arxiv.org/pdf/1812.03794v3.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"unsupervised-deep-learning-for-structured","repo_url":"https://github.com/LIX-shape-analysis/SURFMNet","is_official":0,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"tf","reach":null},{"paper_slug":"unsupervised-deep-learning-for-structured","repo_url":"https://github.com/JM-data/Unsupervised_DeepFunctionalMaps","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"tf","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"unsupervised-deep-learning-for-structured","repo_url":"https://github.com/JM-data/Unsupervised_FMnet","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"tf","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"unsupervised-deep-learning-for-structured","repo_url":"https://github.com/pvnieo/SURFMNet-pytorch","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"deep-learning","task_name":"Deep Learning"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=1812.03794","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1812.03794"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/pvnieo/SURFMNet-pytorch","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/JM-data/Unsupervised_DeepFunctionalMaps","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/LIX-shape-analysis/SURFMNet","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/JM-data/Unsupervised_FMnet","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":15},"by_repo_kind":{"named_in_paper":{"samples":1,"ran":0,"repositories":1},"listed":{"samples":14,"ran":0,"repositories":2}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":1,"samples":[{"code_sha256_prefix":"51ad4af0cf54d9e8","entry":"cotLaplacian","repo":"JM-data/Unsupervised_DeepFunctionalMaps","repo_kind":"listed","path":"Calculate_LB/laplace_beltrami.py","file_url":"https://github.com/JM-data/Unsupervised_DeepFunctionalMaps/blob/HEAD/Calculate_LB/laplace_beltrami.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"51ad4af0cf54d9e8"}},{"code_sha256_prefix":"e10efc113abf3b87","entry":"cotangent","repo":"JM-data/Unsupervised_DeepFunctionalMaps","repo_kind":"listed","path":"Calculate_LB/laplace_beltrami.py","file_url":"https://github.com/JM-data/Unsupervised_DeepFunctionalMaps/blob/HEAD/Calculate_LB/laplace_beltrami.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e10efc113abf3b87"}},{"code_sha256_prefix":"ed74e081622fecee","entry":"cotangent_laplacian","repo":"pvnieo/SURFMNet-pytorch","repo_kind":"listed","path":"surfmnet/utils/laplace_decomposition.py","file_url":"https://github.com/pvnieo/SURFMNet-pytorch/blob/HEAD/surfmnet/utils/laplace_decomposition.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ed74e081622fecee"}},{"code_sha256_prefix":"340df3d87662b40c","entry":"eigs_WA","repo":"JM-data/Unsupervised_DeepFunctionalMaps","repo_kind":"listed","path":"Calculate_LB/laplace_beltrami.py","file_url":"https://github.com/JM-data/Unsupervised_DeepFunctionalMaps/blob/HEAD/Calculate_LB/laplace_beltrami.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"340df3d87662b40c"}},{"code_sha256_prefix":"338b9892d0ce403d","entry":"get_pair_from_ram","repo":"LIX-shape-analysis/SURFMNet","repo_kind":"named_in_paper","path":"train_DFMnet.py","file_url":"https://github.com/LIX-shape-analysis/SURFMNet/blob/HEAD/train_DFMnet.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"338b9892d0ce403d"}},{"code_sha256_prefix":"dc6041ee340ec8bc","entry":"laplace_decomposition","repo":"pvnieo/SURFMNet-pytorch","repo_kind":"listed","path":"surfmnet/utils/laplace_decomposition.py","file_url":"https://github.com/pvnieo/SURFMNet-pytorch/blob/HEAD/surfmnet/utils/laplace_decomposition.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"dc6041ee340ec8bc"}},{"code_sha256_prefix":"5a8ff1aa0da06581","entry":"penalty_bijectivity","repo":"JM-data/Unsupervised_DeepFunctionalMaps","repo_kind":"listed","path":"loss_DFMnet.py","file_url":"https://github.com/JM-data/Unsupervised_DeepFunctionalMaps/blob/HEAD/loss_DFMnet.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5a8ff1aa0da06581"}},{"code_sha256_prefix":"7adb92d793ad88cf","entry":"penalty_laplacian_commutativity","repo":"JM-data/Unsupervised_DeepFunctionalMaps","repo_kind":"listed","path":"loss_DFMnet.py","file_url":"https://github.com/JM-data/Unsupervised_DeepFunctionalMaps/blob/HEAD/loss_DFMnet.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7adb92d793ad88cf"}},{"code_sha256_prefix":"a563b9f31e1e30aa","entry":"penalty_ortho","repo":"JM-data/Unsupervised_DeepFunctionalMaps","repo_kind":"listed","path":"loss_DFMnet.py","file_url":"https://github.com/JM-data/Unsupervised_DeepFunctionalMaps/blob/HEAD/loss_DFMnet.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a563b9f31e1e30aa"}},{"code_sha256_prefix":"6757de5550e950dc","entry":"readOFF","repo":"JM-data/Unsupervised_DeepFunctionalMaps","repo_kind":"listed","path":"Calculate_LB/readOFF.py","file_url":"https://github.com/JM-data/Unsupervised_DeepFunctionalMaps/blob/HEAD/Calculate_LB/readOFF.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6757de5550e950dc"}},{"code_sha256_prefix":"8447cdc2929b54cc","entry":"read_off","repo":"pvnieo/SURFMNet-pytorch","repo_kind":"listed","path":"surfmnet/utils/io.py","file_url":"https://github.com/pvnieo/SURFMNet-pytorch/blob/HEAD/surfmnet/utils/io.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8447cdc2929b54cc"}},{"code_sha256_prefix":"5afbd385bcee8a31","entry":"read_ply","repo":"pvnieo/SURFMNet-pytorch","repo_kind":"listed","path":"surfmnet/utils/io.py","file_url":"https://github.com/pvnieo/SURFMNet-pytorch/blob/HEAD/surfmnet/utils/io.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5afbd385bcee8a31"}},{"code_sha256_prefix":"46dafa7e789c8ed9","entry":"read_txt","repo":"pvnieo/SURFMNet-pytorch","repo_kind":"listed","path":"surfmnet/utils/io.py","file_url":"https://github.com/pvnieo/SURFMNet-pytorch/blob/HEAD/surfmnet/utils/io.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"46dafa7e789c8ed9"}},{"code_sha256_prefix":"e4f12f487c53f8f5","entry":"res_layer","repo":"JM-data/Unsupervised_DeepFunctionalMaps","repo_kind":"listed","path":"DFMnet.py","file_url":"https://github.com/JM-data/Unsupervised_DeepFunctionalMaps/blob/HEAD/DFMnet.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e4f12f487c53f8f5"}},{"code_sha256_prefix":"a4b744832121dbb8","entry":"solve_ls","repo":"JM-data/Unsupervised_DeepFunctionalMaps","repo_kind":"listed","path":"DFMnet.py","file_url":"https://github.com/JM-data/Unsupervised_DeepFunctionalMaps/blob/HEAD/DFMnet.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a4b744832121dbb8"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}