{"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/deep-reinforcement-learning-of-graph-matching","title":"Revocable Deep Reinforcement Learning with Affinity Regularization for Outlier-Robust Graph Matching","arxiv_id":"2012.08950","date":"2020-12-16","proceeding":null,"authors":["Chang Liu","Zetian Jiang","Runzhong Wang","Junchi Yan","Lingxiao Huang","Pinyan Lu"],"abstract":"Graph matching (GM) has been a building block in various areas including computer vision and pattern recognition. Despite recent impressive progress, existing deep GM methods often have obvious difficulty in handling outliers, which are ubiquitous in practice. We propose a deep reinforcement learning based approach RGM, whose sequential node matching scheme naturally fits the strategy for selective inlier matching against outliers. A revocable action framework is devised to improve the agent's flexibility against the complex constrained GM. Moreover, we propose a quadratic approximation technique to regularize the affinity score, in the presence of outliers. As such, the agent can finish inlier matching timely when the affinity score stops growing, for which otherwise an additional parameter i.e. the number of inliers is needed to avoid matching outliers. In this paper, we focus on learning the back-end solver under the most general form of GM: the Lawler's QAP, whose input is the affinity matrix. Especially, our approach can also boost existing GM methods that use such input. Experiments on multiple real-world datasets demonstrate its performance regarding both accuracy and robustness.","url_abs":"https://arxiv.org/abs/2012.08950v5","url_pdf":"https://arxiv.org/pdf/2012.08950v5.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":"deep-reinforcement-learning-of-graph-matching","repo_url":"https://github.com/thinklab-sjtu/rgm","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":null},{"paper_slug":"deep-reinforcement-learning-of-graph-matching","repo_url":"https://github.com/Thinklab-SJTU/awesome-ml4co","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"unanswered"}}],"tasks":[{"task_slug":"combinatorial-optimization","task_name":"Combinatorial Optimization"},{"task_slug":"decision-making","task_name":"Decision Making"},{"task_slug":"deep-reinforcement-learning","task_name":"Deep Reinforcement Learning"},{"task_slug":"graph-matching","task_name":"Graph Matching"},{"task_slug":"reinforcement-learning-1","task_name":"Reinforcement Learning (RL)"},{"task_slug":"reinforcement-learning-2","task_name":"reinforcement-learning"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2012.08950","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2012.08950"}},"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/Thinklab-SJTU/awesome-ml4co","reach":{"status":"unanswered"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/thinklab-sjtu/rgm","reach":null}],"summary":{"ran_fixture":5,"ran_draft_wrong":1,"ran_honours":1,"unverified":1},"by_repo_kind":{"official":{"samples":8,"ran":7,"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":8,"samples":[{"code_sha256_prefix":"e9fa3a13b7a2637f","entry":"error","repo":"thinklab-sjtu/rgm","repo_kind":"official","path":"dqn_model_r.py","file_url":"https://github.com/thinklab-sjtu/rgm/blob/HEAD/dqn_model_r.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"e9fa3a13b7a2637f"}},{"code_sha256_prefix":"c6f677b13c0cb70f","entry":"func","repo":"thinklab-sjtu/rgm","repo_kind":"official","path":"dqn_model_r.py","file_url":"https://github.com/thinklab-sjtu/rgm/blob/HEAD/dqn_model_r.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c6f677b13c0cb70f"}},{"code_sha256_prefix":"a31457124c32ea4b","entry":"get_aff_score","repo":"thinklab-sjtu/rgm","repo_kind":"official","path":"dqn_model_r.py","file_url":"https://github.com/thinklab-sjtu/rgm/blob/HEAD/dqn_model_r.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"a31457124c32ea4b"}},{"code_sha256_prefix":"86e9271dadbdbd1c","entry":"get_coef","repo":"thinklab-sjtu/rgm","repo_kind":"official","path":"dqn_model_r.py","file_url":"https://github.com/thinklab-sjtu/rgm/blob/HEAD/dqn_model_r.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"well_formed","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"86e9271dadbdbd1c"}},{"code_sha256_prefix":"bf8fa6b1debd29f6","entry":"get_norm_affinity","repo":"thinklab-sjtu/rgm","repo_kind":"official","path":"dqn_model_r.py","file_url":"https://github.com/thinklab-sjtu/rgm/blob/HEAD/dqn_model_r.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"bf8fa6b1debd29f6"}},{"code_sha256_prefix":"873c5991448da8e7","entry":"get_reg","repo":"thinklab-sjtu/rgm","repo_kind":"official","path":"dqn_model_r.py","file_url":"https://github.com/thinklab-sjtu/rgm/blob/HEAD/dqn_model_r.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"873c5991448da8e7"}},{"code_sha256_prefix":"98214bbb0299f53e","entry":"slovePara","repo":"thinklab-sjtu/rgm","repo_kind":"official","path":"dqn_model_r.py","file_url":"https://github.com/thinklab-sjtu/rgm/blob/HEAD/dqn_model_r.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"98214bbb0299f53e"}},{"code_sha256_prefix":"29cec35c08a131ba","entry":"DQN","repo":"thinklab-sjtu/rgm","repo_kind":"official","path":"dqn_model_r.py","file_url":"https://github.com/thinklab-sjtu/rgm/blob/HEAD/dqn_model_r.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":"29cec35c08a131ba"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}