{"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/test3r-learning-to-reconstruct-3d-at-test","title":"Test3R: Learning to Reconstruct 3D at Test Time","arxiv_id":"2506.13750","date":"2025-06-16","proceeding":null,"authors":["Yuheng Yuan","Qiuhong Shen","Shizun Wang","Xingyi Yang","Xinchao Wang"],"abstract":"Dense matching methods like DUSt3R regress pairwise pointmaps for 3D reconstruction. However, the reliance on pairwise prediction and the limited generalization capability inherently restrict the global geometric consistency. In this work, we introduce Test3R, a surprisingly simple test-time learning technique that significantly boosts geometric accuracy. Using image triplets ($I_1,I_2,I_3$), Test3R generates reconstructions from pairs ($I_1,I_2$) and ($I_1,I_3$). The core idea is to optimize the network at test time via a self-supervised objective: maximizing the geometric consistency between these two reconstructions relative to the common image $I_1$. This ensures the model produces cross-pair consistent outputs, regardless of the inputs. Extensive experiments demonstrate that our technique significantly outperforms previous state-of-the-art methods on the 3D reconstruction and multi-view depth estimation tasks. Moreover, it is universally applicable and nearly cost-free, making it easily applied to other models and implemented with minimal test-time training overhead and parameter footprint. Code is available at https://github.com/nopQAQ/Test3R.","url_abs":"https://arxiv.org/abs/2506.13750v1","url_pdf":"https://arxiv.org/pdf/2506.13750v1.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":"test3r-learning-to-reconstruct-3d-at-test","repo_url":"https://github.com/nopqaq/test3r","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"NOASSERTION"}}],"tasks":[{"task_slug":"3d-reconstruction","task_name":"3D Reconstruction"},{"task_slug":"depth-estimation","task_name":"Depth Estimation"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2506.13750","atlas_url":"https://app.syntology.ai/?focus=2506.13750","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2506.13750"}},"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":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/nopqaq/test3r","reach":{"status":"ok","spdx":"NOASSERTION"}}],"summary":{"ran_fixture":2,"ran_violates":1,"unverified":9},"by_repo_kind":{"official":{"samples":12,"ran":3,"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":12,"samples":[{"code_sha256_prefix":"f9a1900525331e0f","entry":"drop_path","repo":"nopqaq/test3r","repo_kind":"official","path":"croco/models/blocks.py","file_url":"https://github.com/nopqaq/test3r/blob/HEAD/croco/models/blocks.py","link_basis":"plan_row","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":"f9a1900525331e0f"}},{"code_sha256_prefix":"4bdd36eab04c3f62","entry":"get_1d_sincos_pos_embed_from_grid","repo":"nopqaq/test3r","repo_kind":"official","path":"croco/models/pos_embed.py","file_url":"https://github.com/nopqaq/test3r/blob/HEAD/croco/models/pos_embed.py","link_basis":"harvester_set","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":"4bdd36eab04c3f62"}},{"code_sha256_prefix":"6ba8cee9f5daea41","entry":"pair","repo":"nopqaq/test3r","repo_kind":"official","path":"croco/models/dpt_block.py","file_url":"https://github.com/nopqaq/test3r/blob/HEAD/croco/models/dpt_block.py","link_basis":"harvester_set","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"well_formed","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"6ba8cee9f5daea41"}},{"code_sha256_prefix":"e5b33c5eb8aed38c","entry":"croco_args_from_ckpt","repo":"nopqaq/test3r","repo_kind":"official","path":"croco/models/croco_downstream.py","file_url":"https://github.com/nopqaq/test3r/blob/HEAD/croco/models/croco_downstream.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"e5b33c5eb8aed38c"}},{"code_sha256_prefix":"1ffc5791052dedc3","entry":"get_2d_sincos_pos_embed","repo":"nopqaq/test3r","repo_kind":"official","path":"croco/models/pos_embed.py","file_url":"https://github.com/nopqaq/test3r/blob/HEAD/croco/models/pos_embed.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"1ffc5791052dedc3"}},{"code_sha256_prefix":"4fd80de79832745d","entry":"get_2d_sincos_pos_embed_from_grid","repo":"nopqaq/test3r","repo_kind":"official","path":"croco/models/pos_embed.py","file_url":"https://github.com/nopqaq/test3r/blob/HEAD/croco/models/pos_embed.py","link_basis":"harvester_set","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":"4fd80de79832745d"}},{"code_sha256_prefix":"13dde5d55f6cfae8","entry":"get_frame_number","repo":"nopqaq/test3r","repo_kind":"official","path":"datasets_preprocess/preprocess_scannetpp.py","file_url":"https://github.com/nopqaq/test3r/blob/HEAD/datasets_preprocess/preprocess_scannetpp.py","link_basis":"harvester_set","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":"13dde5d55f6cfae8"}},{"code_sha256_prefix":"1e3f140b86bb9a08","entry":"load_model","repo":"nopqaq/test3r","repo_kind":"official","path":"dust3r/model.py","file_url":"https://github.com/nopqaq/test3r/blob/HEAD/dust3r/model.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"1e3f140b86bb9a08"}},{"code_sha256_prefix":"f99cd4b374e7e664","entry":"load_sfm","repo":"nopqaq/test3r","repo_kind":"official","path":"datasets_preprocess/preprocess_scannetpp.py","file_url":"https://github.com/nopqaq/test3r/blob/HEAD/datasets_preprocess/preprocess_scannetpp.py","link_basis":"harvester_set","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":"f99cd4b374e7e664"}},{"code_sha256_prefix":"bd02fbc95de3472f","entry":"make_fusion_block","repo":"nopqaq/test3r","repo_kind":"official","path":"croco/models/dpt_block.py","file_url":"https://github.com/nopqaq/test3r/blob/HEAD/croco/models/dpt_block.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"bd02fbc95de3472f"}},{"code_sha256_prefix":"45c2e73b37565105","entry":"make_scratch","repo":"nopqaq/test3r","repo_kind":"official","path":"croco/models/dpt_block.py","file_url":"https://github.com/nopqaq/test3r/blob/HEAD/croco/models/dpt_block.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"45c2e73b37565105"}},{"code_sha256_prefix":"51a7bb739612fff2","entry":"pose_from_qwxyz_txyz","repo":"nopqaq/test3r","repo_kind":"official","path":"datasets_preprocess/preprocess_scannetpp.py","file_url":"https://github.com/nopqaq/test3r/blob/HEAD/datasets_preprocess/preprocess_scannetpp.py","link_basis":"harvester_set","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":"51a7bb739612fff2"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}