{"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/solving-the-blind-perspective-n-point-problem","title":"Solving the Blind Perspective-n-Point Problem End-To-End With Robust Differentiable Geometric Optimization","arxiv_id":"2007.14628","date":"2020-07-29","proceeding":"ECCV 2020 8","authors":["Dylan Campbell","Liu Liu","Stephen Gould"],"abstract":"Blind Perspective-n-Point (PnP) is the problem of estimating the position and orientation of a camera relative to a scene, given 2D image points and 3D scene points, without prior knowledge of the 2D-3D correspondences. Solving for pose and correspondences simultaneously is extremely challenging since the search space is very large. Fortunately it is a coupled problem: the pose can be found easily given the correspondences and vice versa. Existing approaches assume that noisy correspondences are provided, that a good pose prior is available, or that the problem size is small. We instead propose the first fully end-to-end trainable network for solving the blind PnP problem efficiently and globally, that is, without the need for pose priors. We make use of recent results in differentiating optimization problems to incorporate geometric model fitting into an end-to-end learning framework, including Sinkhorn, RANSAC and PnP algorithms. Our proposed approach significantly outperforms other methods on synthetic and real data.","url_abs":"https://arxiv.org/abs/2007.14628v2","url_pdf":"https://arxiv.org/pdf/2007.14628v2.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":"solving-the-blind-perspective-n-point-problem","repo_url":"https://github.com/dylan-campbell/bpnpnet","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"solving-the-blind-perspective-n-point-problem","repo_url":"https://github.com/Liumouliu/Deep_blind_PnP","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2007.14628","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2007.14628"}},"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/dylan-campbell/bpnpnet","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/Liumouliu/Deep_blind_PnP","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_fixture":2,"ran_draft_wrong":1,"ran":3,"ran_violates":1,"unverified":12},"by_repo_kind":{"official":{"samples":1,"ran":1,"repositories":1},"listed":{"samples":18,"ran":6,"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":"50906fc42db82ac9","entry":"Dy","repo":"dylan-campbell/bpnpnet","repo_kind":"official","path":"lib/nonlinear_weighted_blind_pnp.py","file_url":"https://github.com/dylan-campbell/bpnpnet/blob/HEAD/lib/nonlinear_weighted_blind_pnp.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"50906fc42db82ac9"}},{"code_sha256_prefix":"6d80592fd6d47b2d","entry":"add_argument_group","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"config.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/config.py","link_basis":"plan_row","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6d80592fd6d47b2d"}},{"code_sha256_prefix":"262f74c5ade997a1","entry":"get_file_list","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"lib/file.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/lib/file.py","link_basis":"plan_row","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":"262f74c5ade997a1"}},{"code_sha256_prefix":"cdd0141594039dcb","entry":"knn","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"model/ops.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/model/ops.py","link_basis":"harvester_set","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"cdd0141594039dcb"}},{"code_sha256_prefix":"6f1f2152e78c5e6f","entry":"read_txt","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"lib/file.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/lib/file.py","link_basis":"plan_row","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":"6f1f2152e78c5e6f"}},{"code_sha256_prefix":"03faf5df924907dd","entry":"sorted_alphanum","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"lib/file.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/lib/file.py","link_basis":"plan_row","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":"03faf5df924907dd"}},{"code_sha256_prefix":"248284f69adfeaad","entry":"str2bool","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"config.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/config.py","link_basis":"plan_row","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"248284f69adfeaad"}},{"code_sha256_prefix":"5a0fa80f8d2294d9","entry":"bn_act","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"model/ops.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/model/ops.py","link_basis":"first_harvest_node","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":"5a0fa80f8d2294d9"}},{"code_sha256_prefix":"c53032885d220555","entry":"correspondenceLoss","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"lib/loss.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/lib/loss.py","link_basis":"first_harvest_node","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":"c53032885d220555"}},{"code_sha256_prefix":"15fcc76407a58c98","entry":"correspondenceProbabilityBCE","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"lib/loss.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/lib/loss.py","link_basis":"first_harvest_node","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":"15fcc76407a58c98"}},{"code_sha256_prefix":"3753d4559e502380","entry":"correspondenceProbabilityDistances","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"lib/loss.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/lib/loss.py","link_basis":"first_harvest_node","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":"3753d4559e502380"}},{"code_sha256_prefix":"f5dcd38523dc6217","entry":"get_graph_feature","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"model/ops.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/model/ops.py","link_basis":"first_harvest_node","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":"f5dcd38523dc6217"}},{"code_sha256_prefix":"bd6343637c69e84b","entry":"load_data_3d2d_pairs","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"lib/data_loaders.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/lib/data_loaders.py","link_basis":"first_harvest_node","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":"bd6343637c69e84b"}},{"code_sha256_prefix":"cf0cddae7aa96a4b","entry":"load_model","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"lib/utils.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/lib/utils.py","link_basis":"first_harvest_node","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":"cf0cddae7aa96a4b"}},{"code_sha256_prefix":"ad9e933f883a8298","entry":"make_data_loader","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"lib/data_loaders.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/lib/data_loaders.py","link_basis":"first_harvest_node","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":"ad9e933f883a8298"}},{"code_sha256_prefix":"c2f2bf68ef50b018","entry":"pairwiseL2Dist","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"model/model.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/model/model.py","link_basis":"first_harvest_node","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":"c2f2bf68ef50b018"}},{"code_sha256_prefix":"f7f6bfdeee237f86","entry":"reflection_matrix","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"lib/transformations.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/lib/transformations.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":"f7f6bfdeee237f86"}},{"code_sha256_prefix":"77cb383b0cd2a54e","entry":"translation_from_matrix","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"lib/transformations.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/lib/transformations.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":"77cb383b0cd2a54e"}},{"code_sha256_prefix":"edeb1406911ce025","entry":"translation_matrix","repo":"Liumouliu/Deep_blind_PnP","repo_kind":"listed","path":"lib/transformations.py","file_url":"https://github.com/Liumouliu/Deep_blind_PnP/blob/HEAD/lib/transformations.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":"edeb1406911ce025"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}