{"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/dust3r-geometric-3d-vision-made-easy","title":"DUSt3R: Geometric 3D Vision Made Easy","arxiv_id":"2312.14132","date":"2023-12-21","proceeding":"CVPR 2024 1","authors":["Shuzhe Wang","Vincent Leroy","Yohann Cabon","Boris Chidlovskii","Jerome Revaud"],"abstract":"Multi-view stereo reconstruction (MVS) in the wild requires to first estimate the camera parameters e.g. intrinsic and extrinsic parameters. These are usually tedious and cumbersome to obtain, yet they are mandatory to triangulate corresponding pixels in 3D space, which is the core of all best performing MVS algorithms. In this work, we take an opposite stance and introduce DUSt3R, a radically novel paradigm for Dense and Unconstrained Stereo 3D Reconstruction of arbitrary image collections, i.e. operating without prior information about camera calibration nor viewpoint poses. We cast the pairwise reconstruction problem as a regression of pointmaps, relaxing the hard constraints of usual projective camera models. We show that this formulation smoothly unifies the monocular and binocular reconstruction cases. In the case where more than two images are provided, we further propose a simple yet effective global alignment strategy that expresses all pairwise pointmaps in a common reference frame. We base our network architecture on standard Transformer encoders and decoders, allowing us to leverage powerful pretrained models. Our formulation directly provides a 3D model of the scene as well as depth information, but interestingly, we can seamlessly recover from it, pixel matches, relative and absolute camera. Exhaustive experiments on all these tasks showcase that the proposed DUSt3R can unify various 3D vision tasks and set new SoTAs on monocular/multi-view depth estimation as well as relative pose estimation. In summary, DUSt3R makes many geometric 3D vision tasks easy.","url_abs":"https://arxiv.org/abs/2312.14132v3","url_pdf":"https://arxiv.org/pdf/2312.14132v3.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":"dust3r-geometric-3d-vision-made-easy","repo_url":"https://github.com/naver/dust3r","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"NOASSERTION"}},{"paper_slug":"dust3r-geometric-3d-vision-made-easy","repo_url":"https://github.com/naver/mast3r","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"NOASSERTION"}}],"tasks":[{"task_slug":"3d-reconstruction","task_name":"3D Reconstruction"},{"task_slug":"camera-calibration","task_name":"Camera Calibration"},{"task_slug":"depth-estimation","task_name":"Depth Estimation"},{"task_slug":"pose-estimation","task_name":"Pose Estimation"}],"methods":[{"method_slug":"absolute-position-encodings","method_name":"Absolute Position Encodings"},{"method_slug":"adam","method_name":"Adam"},{"method_slug":"attention","method_name":"Attention"},{"method_slug":"base","method_name":"BASE"},{"method_slug":"bpe","method_name":"BPE"},{"method_slug":"dense-connections","method_name":"Dense Connections"},{"method_slug":"dropout","method_name":"Dropout"},{"method_slug":"label-smoothing","method_name":"Label Smoothing"},{"method_slug":"layer-normalization","method_name":"Layer Normalization"},{"method_slug":"linear-layer","method_name":"Linear Layer"},{"method_slug":"multi-head-attention","method_name":"Multi-Head Attention"},{"method_slug":"position-wise-feed-forward-layer","method_name":"Position-Wise Feed-Forward Layer"},{"method_slug":"residual-connection","method_name":"Residual Connection"},{"method_slug":"set","method_name":"SET"},{"method_slug":"softmax","method_name":"Softmax"},{"method_slug":"transformer","method_name":"Transformer"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2312.14132","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2312.14132"}},"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/naver/mast3r","reach":{"status":"ok","spdx":"NOASSERTION"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/naver/dust3r","reach":{"status":"ok","spdx":"NOASSERTION"}}],"summary":{"ran":6,"unverified":4},"by_repo_kind":{"official":{"samples":10,"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":10,"samples":[{"code_sha256_prefix":"8c68bba70fdc4bd4","entry":"aggregate_stats","repo":"naver/dust3r","repo_kind":"official","path":"dust3r_visloc/evaluation.py","file_url":"https://github.com/naver/dust3r/blob/HEAD/dust3r_visloc/evaluation.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"8c68bba70fdc4bd4"}},{"code_sha256_prefix":"56eb37124b861a82","entry":"cat_meshes","repo":"naver/dust3r","repo_kind":"official","path":"dust3r/viz.py","file_url":"https://github.com/naver/dust3r/blob/HEAD/dust3r/viz.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"56eb37124b861a82"}},{"code_sha256_prefix":"c2afc815ad9ff3e1","entry":"make_batch_symmetric","repo":"naver/dust3r","repo_kind":"official","path":"dust3r/inference.py","file_url":"https://github.com/naver/dust3r/blob/HEAD/dust3r/inference.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"c2afc815ad9ff3e1"}},{"code_sha256_prefix":"ebd721f99138e9a3","entry":"make_pairs","repo":"naver/dust3r","repo_kind":"official","path":"dust3r/image_pairs.py","file_url":"https://github.com/naver/dust3r/blob/HEAD/dust3r/image_pairs.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"ebd721f99138e9a3"}},{"code_sha256_prefix":"0e0b8a75082d1fb9","entry":"pts3d_to_trimesh","repo":"naver/dust3r","repo_kind":"official","path":"dust3r/viz.py","file_url":"https://github.com/naver/dust3r/blob/HEAD/dust3r/viz.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"0e0b8a75082d1fb9"}},{"code_sha256_prefix":"a2c256044b1ba139","entry":"sel","repo":"naver/dust3r","repo_kind":"official","path":"dust3r/image_pairs.py","file_url":"https://github.com/naver/dust3r/blob/HEAD/dust3r/image_pairs.py","link_basis":"harvester_set","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":"a2c256044b1ba139"}},{"code_sha256_prefix":"d07895a2f6ed02f8","entry":"filter_pairs_seq","repo":"naver/dust3r","repo_kind":"official","path":"dust3r/image_pairs.py","file_url":"https://github.com/naver/dust3r/blob/HEAD/dust3r/image_pairs.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":"d07895a2f6ed02f8"}},{"code_sha256_prefix":"ec0ca8e8a87cd029","entry":"get_patch_embed","repo":"naver/dust3r","repo_kind":"official","path":"dust3r/patch_embed.py","file_url":"https://github.com/naver/dust3r/blob/HEAD/dust3r/patch_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":"ec0ca8e8a87cd029"}},{"code_sha256_prefix":"1e3f140b86bb9a08","entry":"load_model","repo":"naver/dust3r","repo_kind":"official","path":"dust3r/model.py","file_url":"https://github.com/naver/dust3r/blob/HEAD/dust3r/model.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":"1e3f140b86bb9a08"}},{"code_sha256_prefix":"577be232ad532e15","entry":"loss_of_one_batch","repo":"naver/dust3r","repo_kind":"official","path":"dust3r/inference.py","file_url":"https://github.com/naver/dust3r/blob/HEAD/dust3r/inference.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":"577be232ad532e15"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}