{"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/arxiv-2606-11880","title":"SG2Loc: Sequential Visual Localization on 3D Scene Graphs","arxiv_id":"2606.11880","date":"2026-06-10","proceeding":"ICML","authors":["Nicole Damblon","Olga Vysotska","Federico Tombari","Marc Pollefeys","Daniel Barath"],"abstract":"Visual localization in complex indoor environments remains a critical challenge for robotics and AR applications. Sequential localization, where pose estimates are refined over time, is important for autonomous agents. However, traditional methods often require storing extensive image databases or point clouds, leading to significant overhead. This paper introduces a novel, lightweight approach to sequential visual localization using 3D scene graphs. Our method represents the environment with a compact scene graph, where nodes represent objects (with coarse meshes) and edges encode spatial relationships. For each image in the localization phase, we extract per-patch semantic features, predicting object identities. Localization is performed within a particle filter framework. Each particle, representing a camera pose, projects the coarse object meshes from the scene graph into the image, assigning object identities to patches based on visibility. The similarity of the per-patch features, in the input image, and object features from the scene graph determines the weight of a particle. Subsequent images are incorporated sequentially, refining the pose estimate. By leveraging a compact scene graph and efficient semantic matching, our method significantly reduces storage while maintaining performance on real-world datasets. The code will be available at https://github.com/DmblnNicole/sg2loc.","url_abs":"https://arxiv.org/abs/2606.11880","url_pdf":"https://arxiv.org/pdf/2606.11880","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2606.11880","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2606.11880"}},"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":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/DmblnNicole/sg2loc","reach":null}],"summary":{"ran":8},"by_repo_kind":{"found_in_text":{"samples":8,"ran":8,"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":"eb536fd3421b6015","entry":"compute","repo":"DmblnNicole/sg2loc","repo_kind":"found_in_text","path":"sg2loc/evaluation/pose_metrics.py","file_url":"https://github.com/DmblnNicole/sg2loc/blob/HEAD/sg2loc/evaluation/pose_metrics.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"eb536fd3421b6015"}},{"code_sha256_prefix":"520687308880689a","entry":"frame_data_summary","repo":"DmblnNicole/sg2loc","repo_kind":"found_in_text","path":"sg2loc/evaluation/pose_metrics.py","file_url":"https://github.com/DmblnNicole/sg2loc/blob/HEAD/sg2loc/evaluation/pose_metrics.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"520687308880689a"}},{"code_sha256_prefix":"6938504dd0aa9028","entry":"isPoseValid","repo":"DmblnNicole/sg2loc","repo_kind":"found_in_text","path":"sg2loc/scannet/utils.py","file_url":"https://github.com/DmblnNicole/sg2loc/blob/HEAD/sg2loc/scannet/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"6938504dd0aa9028"}},{"code_sha256_prefix":"8b931b8ac8ed752f","entry":"load_db_to_query_transforms","repo":"DmblnNicole/sg2loc","repo_kind":"found_in_text","path":"sg2loc/scannet/utils.py","file_url":"https://github.com/DmblnNicole/sg2loc/blob/HEAD/sg2loc/scannet/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"8b931b8ac8ed752f"}},{"code_sha256_prefix":"831f100587d7e919","entry":"load_frame_idxs","repo":"DmblnNicole/sg2loc","repo_kind":"found_in_text","path":"sg2loc/scannet/utils.py","file_url":"https://github.com/DmblnNicole/sg2loc/blob/HEAD/sg2loc/scannet/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"831f100587d7e919"}},{"code_sha256_prefix":"5e989eb68a14d83e","entry":"machine_paths","repo":"DmblnNicole/sg2loc","repo_kind":"found_in_text","path":"sg2loc/configs/loader.py","file_url":"https://github.com/DmblnNicole/sg2loc/blob/HEAD/sg2loc/configs/loader.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"5e989eb68a14d83e"}},{"code_sha256_prefix":"5dd1cfcfd10c6689","entry":"read_sequence_errors","repo":"DmblnNicole/sg2loc","repo_kind":"found_in_text","path":"sg2loc/evaluation/pose_metrics.py","file_url":"https://github.com/DmblnNicole/sg2loc/blob/HEAD/sg2loc/evaluation/pose_metrics.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"5dd1cfcfd10c6689"}},{"code_sha256_prefix":"d463843a136a9811","entry":"require_path","repo":"DmblnNicole/sg2loc","repo_kind":"found_in_text","path":"sg2loc/configs/loader.py","file_url":"https://github.com/DmblnNicole/sg2loc/blob/HEAD/sg2loc/configs/loader.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d463843a136a9811"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.CV","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}