{"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/neural-guided-ransac-learning-where-to-sample","title":"Neural-Guided RANSAC: Learning Where to Sample Model Hypotheses","arxiv_id":"1905.04132","date":"2019-05-10","proceeding":"ICCV 2019 10","authors":["Eric Brachmann","Carsten Rother"],"abstract":"We present Neural-Guided RANSAC (NG-RANSAC), an extension to the classic RANSAC algorithm from robust optimization. NG-RANSAC uses prior information to improve model hypothesis search, increasing the chance of finding outlier-free minimal sets. Previous works use heuristic side-information like hand-crafted descriptor distance to guide hypothesis search. In contrast, we learn hypothesis search in a principled fashion that lets us optimize an arbitrary task loss during training, leading to large improvements on classic computer vision tasks. We present two further extensions to NG-RANSAC. Firstly, using the inlier count itself as training signal allows us to train neural guidance in a self-supervised fashion. Secondly, we combine neural guidance with differentiable RANSAC to build neural networks which focus on certain parts of the input data and make the output predictions as good as possible. We evaluate NG-RANSAC on a wide array of computer vision tasks, namely estimation of epipolar geometry, horizon line estimation and camera re-localization. We achieve superior or competitive results compared to state-of-the-art robust estimators, including very recent, learned ones.","url_abs":"https://arxiv.org/abs/1905.04132v2","url_pdf":"https://arxiv.org/pdf/1905.04132v2.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":"neural-guided-ransac-learning-where-to-sample","repo_url":"https://github.com/vislearn/ngransac","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"BSD-3-Clause"}},{"paper_slug":"neural-guided-ransac-learning-where-to-sample","repo_url":"https://github.com/vislearn/ngdsac_camreloc","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"BSD-3-Clause"}},{"paper_slug":"neural-guided-ransac-learning-where-to-sample","repo_url":"https://github.com/vislearn/ngdsac_horizon","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"BSD-3-Clause"}}],"tasks":[{"task_slug":"camera-localization","task_name":"Camera Localization"},{"task_slug":"horizon-line-estimation","task_name":"Horizon Line Estimation"},{"task_slug":"visual-localization","task_name":"Visual Localization"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/horizon-line-estimation-on-horizon-lines-in","task":"Horizon Line Estimation","dataset":"Horizon Lines in the Wild","model":"NG-DSAC","rank_in_archive_order":1,"of":5,"metrics":{"AUC (horizon error)":"75.2"},"uses_additional_data":false}],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=1905.04132","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1905.04132"}},"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/vislearn/ngdsac_camreloc","reach":{"status":"ok","spdx":"BSD-3-Clause"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/vislearn/ngdsac_horizon","reach":{"status":"ok","spdx":"BSD-3-Clause"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/vislearn/ngransac","reach":{"status":"ok","spdx":"BSD-3-Clause"}}],"summary":{"unverified":4},"by_repo_kind":{"official":{"samples":3,"ran":0,"repositories":1},"listed":{"samples":1,"ran":0,"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":"10949af64f399854","entry":"AUC","repo":"vislearn/ngransac","repo_kind":"official","path":"util.py","file_url":"https://github.com/vislearn/ngransac/blob/HEAD/util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"10949af64f399854"}},{"code_sha256_prefix":"01e1d299d23bcc14","entry":"f_error","repo":"vislearn/ngransac","repo_kind":"official","path":"util.py","file_url":"https://github.com/vislearn/ngransac/blob/HEAD/util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"01e1d299d23bcc14"}},{"code_sha256_prefix":"0f4ac85c047f049b","entry":"pose_error","repo":"vislearn/ngransac","repo_kind":"official","path":"util.py","file_url":"https://github.com/vislearn/ngransac/blob/HEAD/util.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"0f4ac85c047f049b"}},{"code_sha256_prefix":"4bccd3ca4e7be4e8","entry":"random_shift","repo":"vislearn/ngdsac_camreloc","repo_kind":"listed","path":"util.py","file_url":"https://github.com/vislearn/ngdsac_camreloc/blob/HEAD/util.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"4bccd3ca4e7be4e8"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}