{"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/a-comparative-study-of-graph-matching","title":"A Comparative Study of Graph Matching Algorithms in Computer Vision","arxiv_id":"2207.00291","date":"2022-07-01","proceeding":null,"authors":["Stefan Haller","Lorenz Feineis","Lisa Hutschenreiter","Florian Bernard","Carsten Rother","Dagmar Kainmüller","Paul Swoboda","Bogdan Savchynskyy"],"abstract":"The graph matching optimization problem is an essential component for many tasks in computer vision, such as bringing two deformable objects in correspondence. Naturally, a wide range of applicable algorithms have been proposed in the last decades. Since a common standard benchmark has not been developed, their performance claims are often hard to verify as evaluation on differing problem instances and criteria make the results incomparable. To address these shortcomings, we present a comparative study of graph matching algorithms. We create a uniform benchmark where we collect and categorize a large set of existing and publicly available computer vision graph matching problems in a common format. At the same time we collect and categorize the most popular open-source implementations of graph matching algorithms. Their performance is evaluated in a way that is in line with the best practices for comparing optimization algorithms. The study is designed to be reproducible and extensible to serve as a valuable resource in the future. Our study provides three notable insights: 1.) popular problem instances are exactly solvable in substantially less than 1 second and, therefore, are insufficient for future empirical evaluations; 2.) the most popular baseline methods are highly inferior to the best available methods; 3.) despite the NP-hardness of the problem, instances coming from vision applications are often solvable in a few seconds even for graphs with more than 500 vertices.","url_abs":"https://arxiv.org/abs/2207.00291v2","url_pdf":"https://arxiv.org/pdf/2207.00291v2.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":"a-comparative-study-of-graph-matching","repo_url":"https://github.com/vislearn/gmbench","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"none","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"a-comparative-study-of-graph-matching","repo_url":"https://github.com/vislearn/libmpopt","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":null}],"tasks":[{"task_slug":"graph-matching","task_name":"Graph Matching"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2207.00291","atlas_url":"https://app.syntology.ai/?focus=2207.00291","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2207.00291"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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/vislearn/gmbench","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/vislearn/libmpopt","reach":null}],"summary":{"ran":21,"ran_draft_wrong":1},"by_repo_kind":{"official":{"samples":22,"ran":22,"repositories":1}},"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":0,"samples":[{"code_sha256_prefix":"a699801fd94d79f9","entry":"adjust_groundtruth","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/import_datasets.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/import_datasets.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a699801fd94d79f9"}},{"code_sha256_prefix":"a2e05f3e195e35e1","entry":"cleanup_value","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/export.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/export.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a2e05f3e195e35e1"}},{"code_sha256_prefix":"f89988646272041a","entry":"compute_area","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/perf.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/perf.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f89988646272041a"}},{"code_sha256_prefix":"9e51883f9e53fa97","entry":"compute_area","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/plot_perf.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/plot_perf.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"9e51883f9e53fa97"}},{"code_sha256_prefix":"8afcb50b4993347c","entry":"compute_performance_plot_data","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/perf.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/perf.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8afcb50b4993347c"}},{"code_sha256_prefix":"f8ad7fbd8e8b0d80","entry":"convert_from_json","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/export.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/export.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f8ad7fbd8e8b0d80"}},{"code_sha256_prefix":"8d957e3e9c68e6a6","entry":"convert_to_bool","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/export.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/export.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8d957e3e9c68e6a6"}},{"code_sha256_prefix":"b4436e9c7a69bc88","entry":"fetch_hardware_id","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/import_benchmark.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/import_benchmark.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b4436e9c7a69bc88"}},{"code_sha256_prefix":"698c78a80ac5ab35","entry":"get_result","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/generate_table.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/generate_table.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"698c78a80ac5ab35"}},{"code_sha256_prefix":"422c465477a639b9","entry":"init_subparser","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/add_hardware.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/add_hardware.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"422c465477a639b9"}},{"code_sha256_prefix":"25a24527466b0037","entry":"init_subparser","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/generate_table.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/generate_table.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"25a24527466b0037"}},{"code_sha256_prefix":"dd55277f60012391","entry":"init_subparser","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/import_benchmark.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/import_benchmark.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"dd55277f60012391"}},{"code_sha256_prefix":"e4882065c0be13f4","entry":"init_subparser","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/import_datasets.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/import_datasets.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e4882065c0be13f4"}},{"code_sha256_prefix":"f1b899fcdb5fb448","entry":"init_subparser","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/init_database.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/init_database.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f1b899fcdb5fb448"}},{"code_sha256_prefix":"dd52eec8897ae8e1","entry":"init_subparser","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/plot_cactus.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/plot_cactus.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"dd52eec8897ae8e1"}},{"code_sha256_prefix":"c37bbbd3f9f1a1c2","entry":"init_subparser","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/plot_perf.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/plot_perf.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c37bbbd3f9f1a1c2"}},{"code_sha256_prefix":"726cad3d8f3c2da3","entry":"make_rectangular","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/plot_perf.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/plot_perf.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"726cad3d8f3c2da3"}},{"code_sha256_prefix":"848358a4327596b7","entry":"missing_instance_in_run","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/verification.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/verification.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"848358a4327596b7"}},{"code_sha256_prefix":"9c7771a3a2e3c00f","entry":"missing_method_in_run","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/verification.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/verification.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"9c7771a3a2e3c00f"}},{"code_sha256_prefix":"2842a1369540b274","entry":"missing_trial_in_run","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/verification.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/verification.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2842a1369540b274"}},{"code_sha256_prefix":"1677ad306233c7b7","entry":"natural_sort","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/import_datasets.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/import_datasets.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1677ad306233c7b7"}},{"code_sha256_prefix":"ea9cacb97f9a2f4b","entry":"parse_data_file","repo":"vislearn/gmbench","repo_kind":"official","path":"python/gmbench/analyzer/import_benchmark.py","file_url":"https://github.com/vislearn/gmbench/blob/HEAD/python/gmbench/analyzer/import_benchmark.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ea9cacb97f9a2f4b"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}