{"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/mvc-vpr-mutual-learning-of-viewpoint","title":"MVC-VPR: Mutual Learning of Viewpoint Classification and Visual Place Recognition","arxiv_id":"2412.09199","date":"2024-12-12","proceeding":null,"authors":["Qiwen Gu","Xufei Wang","Fenglin Zhang","Junqiao Zhao","Siyue Tao","Chen Ye","Tiantian Feng","Changjun Jiang"],"abstract":"Visual Place Recognition (VPR) aims to robustly identify locations by leveraging image retrieval based on descriptors encoded from environmental images. However, drastic appearance changes of images captured from different viewpoints at the same location pose incoherent supervision signals for descriptor learning, which severely hinder the performance of VPR. Previous work proposes classifying images based on manually defined rules or ground truth labels for viewpoints, followed by descriptor training based on the classification results. However, not all datasets have ground truth labels of viewpoints and manually defined rules may be suboptimal, leading to degraded descriptor performance.To address these challenges, we introduce the mutual learning of viewpoint self-classification and VPR. Starting from coarse classification based on geographical coordinates, we progress to finer classification of viewpoints using simple clustering techniques. The dataset is partitioned in an unsupervised manner while simultaneously training a descriptor extractor for place recognition. Experimental results show that this approach almost perfectly partitions the dataset based on viewpoints, thus achieving mutually reinforcing effects. Our method even excels state-of-the-art (SOTA) methods that partition datasets using ground truth labels.","url_abs":"https://arxiv.org/abs/2412.09199v2","url_pdf":"https://arxiv.org/pdf/2412.09199v2.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":[],"tasks":[{"task_slug":"classification-1","task_name":"Classification"},{"task_slug":"image-retrieval","task_name":"Image Retrieval"},{"task_slug":"visual-place-recognition","task_name":"Visual Place Recognition"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2412.09199","atlas_url":"https://app.syntology.ai/?focus=2412.09199","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2412.09199"}},"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":"deterministic:regex_extraction","url":"https://github.com/Gucci233/MutualVPR","reach":{"status":"ok"}}],"summary":{"ran_draft_wrong":2,"unverified":13},"by_repo_kind":{"found_in_text":{"samples":15,"ran":2,"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":15,"samples":[{"code_sha256_prefix":"79f68aea8273d062","entry":"gem","repo":"Gucci233/MutualVPR","repo_kind":"found_in_text","path":"cosplace_model/layers.py","file_url":"https://github.com/Gucci233/MutualVPR/blob/HEAD/cosplace_model/layers.py","link_basis":"plan_row","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"79f68aea8273d062"}},{"code_sha256_prefix":"e7fcb6d9ac9deaf4","entry":"named_apply","repo":"Gucci233/MutualVPR","repo_kind":"found_in_text","path":"backbone/vision_transformer.py","file_url":"https://github.com/Gucci233/MutualVPR/blob/HEAD/backbone/vision_transformer.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":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"e7fcb6d9ac9deaf4"}},{"code_sha256_prefix":"4033a01764a10bf0","entry":"cluster_acc","repo":"Gucci233/MutualVPR","repo_kind":"found_in_text","path":"util.py","file_url":"https://github.com/Gucci233/MutualVPR/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":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"4033a01764a10bf0"}},{"code_sha256_prefix":"d7ebec9a9c0c9b14","entry":"cosine_sim","repo":"Gucci233/MutualVPR","repo_kind":"found_in_text","path":"cosface_loss.py","file_url":"https://github.com/Gucci233/MutualVPR/blob/HEAD/cosface_loss.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":"d7ebec9a9c0c9b14"}},{"code_sha256_prefix":"7eaa679765840da6","entry":"eva","repo":"Gucci233/MutualVPR","repo_kind":"found_in_text","path":"util.py","file_url":"https://github.com/Gucci233/MutualVPR/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":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"7eaa679765840da6"}},{"code_sha256_prefix":"98e6824b3bb0eef9","entry":"get_backbone","repo":"Gucci233/MutualVPR","repo_kind":"found_in_text","path":"cosplace_model/cosplace_network.py","file_url":"https://github.com/Gucci233/MutualVPR/blob/HEAD/cosplace_model/cosplace_network.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":"98e6824b3bb0eef9"}},{"code_sha256_prefix":"f220669505374432","entry":"get_crop_image","repo":"Gucci233/MutualVPR","repo_kind":"found_in_text","path":"datasets/dataset_utils.py","file_url":"https://github.com/Gucci233/MutualVPR/blob/HEAD/datasets/dataset_utils.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":"f220669505374432"}},{"code_sha256_prefix":"4102a46eb0cc1ac7","entry":"get_pretrained_torchvision_model","repo":"Gucci233/MutualVPR","repo_kind":"found_in_text","path":"cosplace_model/cosplace_network.py","file_url":"https://github.com/Gucci233/MutualVPR/blob/HEAD/cosplace_model/cosplace_network.py","link_basis":"plan_row","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":"4102a46eb0cc1ac7"}},{"code_sha256_prefix":"a344fab75c51fe9a","entry":"get_training_query_set","repo":"Gucci233/MutualVPR","repo_kind":"found_in_text","path":"datasets/pittsburgh.py","file_url":"https://github.com/Gucci233/MutualVPR/blob/HEAD/datasets/pittsburgh.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":"a344fab75c51fe9a"}},{"code_sha256_prefix":"ccc715a4170f75e9","entry":"get_whole_training_set","repo":"Gucci233/MutualVPR","repo_kind":"found_in_text","path":"datasets/pittsburgh.py","file_url":"https://github.com/Gucci233/MutualVPR/blob/HEAD/datasets/pittsburgh.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":"ccc715a4170f75e9"}},{"code_sha256_prefix":"e7fce521294dd6b0","entry":"input_transform","repo":"Gucci233/MutualVPR","repo_kind":"found_in_text","path":"datasets/tokyo247.py","file_url":"https://github.com/Gucci233/MutualVPR/blob/HEAD/datasets/tokyo247.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":"e7fce521294dd6b0"}},{"code_sha256_prefix":"dd6baf8e06f292e1","entry":"parse_arguments","repo":"Gucci233/MutualVPR","repo_kind":"found_in_text","path":"myparser.py","file_url":"https://github.com/Gucci233/MutualVPR/blob/HEAD/myparser.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":"dd6baf8e06f292e1"}},{"code_sha256_prefix":"b621be8f9984138e","entry":"parse_dbStruct","repo":"Gucci233/MutualVPR","repo_kind":"found_in_text","path":"datasets/pittsburgh.py","file_url":"https://github.com/Gucci233/MutualVPR/blob/HEAD/datasets/pittsburgh.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":"b621be8f9984138e"}},{"code_sha256_prefix":"6e1ab6206b79c01f","entry":"read_images_paths","repo":"Gucci233/MutualVPR","repo_kind":"found_in_text","path":"datasets/dataset_utils.py","file_url":"https://github.com/Gucci233/MutualVPR/blob/HEAD/datasets/dataset_utils.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":"6e1ab6206b79c01f"}},{"code_sha256_prefix":"16e7f712c3144990","entry":"read_pano_images_paths","repo":"Gucci233/MutualVPR","repo_kind":"found_in_text","path":"datasets/dataset_utils.py","file_url":"https://github.com/Gucci233/MutualVPR/blob/HEAD/datasets/dataset_utils.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":"16e7f712c3144990"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}