{"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/hamba-single-view-3d-hand-reconstruction-with","title":"Hamba: Single-view 3D Hand Reconstruction with Graph-guided Bi-Scanning Mamba","arxiv_id":"2407.09646","date":"2024-07-12","proceeding":null,"authors":["Haoye Dong","Aviral Chharia","Wenbo Gou","Francisco Vicente Carrasco","Fernando de la Torre"],"abstract":"3D Hand reconstruction from a single RGB image is challenging due to the articulated motion, self-occlusion, and interaction with objects. Existing SOTA methods employ attention-based transformers to learn the 3D hand pose and shape, yet they do not fully achieve robust and accurate performance, primarily due to inefficiently modeling spatial relations between joints. To address this problem, we propose a novel graph-guided Mamba framework, named Hamba, which bridges graph learning and state space modeling. Our core idea is to reformulate Mamba's scanning into graph-guided bidirectional scanning for 3D reconstruction using a few effective tokens. This enables us to efficiently learn the spatial relationships between joints for improving reconstruction performance. Specifically, we design a Graph-guided State Space (GSS) block that learns the graph-structured relations and spatial sequences of joints and uses 88.5% fewer tokens than attention-based methods. Additionally, we integrate the state space features and the global features using a fusion module. By utilizing the GSS block and the fusion module, Hamba effectively leverages the graph-guided state space features and jointly considers global and local features to improve performance. Experiments on several benchmarks and in-the-wild tests demonstrate that Hamba significantly outperforms existing SOTAs, achieving the PA-MPVPE of 5.3mm and F@15mm of 0.992 on FreiHAND. At the time of this paper's acceptance, Hamba holds the top position, Rank 1 in two Competition Leaderboards on 3D hand reconstruction. Project Website: https://humansensinglab.github.io/Hamba/","url_abs":"https://arxiv.org/abs/2407.09646v2","url_pdf":"https://arxiv.org/pdf/2407.09646v2.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":"hamba-single-view-3d-hand-reconstruction-with","repo_url":"https://github.com/humansensinglab/Hamba","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"3d-hand-pose-estimation","task_name":"3D Hand Pose Estimation"},{"task_slug":"mamba","task_name":"Mamba"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/3d-hand-pose-estimation-on-freihand","task":"3D Hand Pose Estimation","dataset":"FreiHAND","model":"Hamba","rank_in_archive_order":5,"of":33,"metrics":{"PA-F@15mm":"0.992","PA-F@5mm":"0.806","PA-MPJPE":"5.7","PA-MPVPE":"5.3"},"uses_additional_data":false},{"leaderboard":"/sota/3d-hand-pose-estimation-on-hint-hand","task":"3D Hand Pose Estimation","dataset":"HInt: Hand Interactions in the wild","model":"Hamba","rank_in_archive_order":3,"of":10,"metrics":{"PCK@0.05 (New Days) All":"48.7","PCK@0.05 (NewDays) Occ":"28.2","PCK@0.05 (NewDays) Visible":"61.2","PCK@0.05 (VISOR) All":"47.2","PCK@0.05 (VISOR) Occ":"29.9","PCK@0.05 (VISOR) Visible":"61.4"},"uses_additional_data":false},{"leaderboard":"/sota/3d-hand-pose-estimation-on-ho-3d","task":"3D Hand Pose Estimation","dataset":"HO-3D v2","model":"Hamba","rank_in_archive_order":2,"of":24,"metrics":{"AUC_J":"0.850","AUC_V":"0.846","F@15mm":"0.982","F@5mm":"0.648","PA-MPJPE (mm)":"7.5","PA-MPVPE":"7.7"},"uses_additional_data":false},{"leaderboard":"/sota/3d-hand-pose-estimation-on-ho-3d-v3","task":"3D Hand Pose Estimation","dataset":"HO-3D v3","model":"Hamba","rank_in_archive_order":1,"of":8,"metrics":{"AUC_J":"0.861","AUC_V":"0.864","F@15mm":"0.982","F@5mm":"0.681","PA-MPJPE":"6.9","PA-MPVPE":"6.8"},"uses_additional_data":false}],"syntology":{"syntology_url":"https://syntology.ai/paper/2407.09646","atlas_url":"https://app.syntology.ai/?focus=2407.09646","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2407.09646"}},"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/humansensinglab/Hamba","reach":null}],"summary":{"ran":2,"ran_honours":2,"ran_draft_wrong":2,"ran_fixture":1,"unverified":4},"by_repo_kind":{"official":{"samples":11,"ran":7,"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":11,"samples":[{"code_sha256_prefix":"337932b7fd64e115","entry":"Discriminator","repo":"humansensinglab/Hamba","repo_kind":"official","path":"hamba/models/hamba.py","file_url":"https://github.com/humansensinglab/Hamba/blob/HEAD/hamba/models/hamba.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":"337932b7fd64e115"}},{"code_sha256_prefix":"4ab23a8b84bc730f","entry":"GridSampleFeature","repo":"humansensinglab/Hamba","repo_kind":"official","path":"hamba/models/hamba.py","file_url":"https://github.com/humansensinglab/Hamba/blob/HEAD/hamba/models/hamba.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":"4ab23a8b84bc730f"}},{"code_sha256_prefix":"554ba28f99249e6a","entry":"aa_to_rotmat","repo":"humansensinglab/Hamba","repo_kind":"official","path":"hamba/models/hamba.py","file_url":"https://github.com/humansensinglab/Hamba/blob/HEAD/hamba/models/hamba.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"554ba28f99249e6a"}},{"code_sha256_prefix":"aebb727eed75bd10","entry":"get_pylogger","repo":"humansensinglab/Hamba","repo_kind":"official","path":"hamba/models/hamba.py","file_url":"https://github.com/humansensinglab/Hamba/blob/HEAD/hamba/models/hamba.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"aebb727eed75bd10"}},{"code_sha256_prefix":"5e826097a94f6d97","entry":"load_pred_json","repo":"humansensinglab/Hamba","repo_kind":"official","path":"eval/freihand/eval_freihand_official.py","file_url":"https://github.com/humansensinglab/Hamba/blob/HEAD/eval/freihand/eval_freihand_official.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OPAQUE_PARAMS","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"5e826097a94f6d97"}},{"code_sha256_prefix":"7821cfe9fbd23004","entry":"perspective_projection","repo":"humansensinglab/Hamba","repo_kind":"official","path":"hamba/models/hamba.py","file_url":"https://github.com/humansensinglab/Hamba/blob/HEAD/hamba/models/hamba.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"7821cfe9fbd23004"}},{"code_sha256_prefix":"dcf1f2ee89252c02","entry":"quat_to_rotmat","repo":"humansensinglab/Hamba","repo_kind":"official","path":"hamba/models/hamba.py","file_url":"https://github.com/humansensinglab/Hamba/blob/HEAD/hamba/models/hamba.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"dcf1f2ee89252c02"}},{"code_sha256_prefix":"ba1473b03e5c5603","entry":"HAMBA","repo":"humansensinglab/Hamba","repo_kind":"official","path":"hamba/models/hamba.py","file_url":"https://github.com/humansensinglab/Hamba/blob/HEAD/hamba/models/hamba.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":"ba1473b03e5c5603"}},{"code_sha256_prefix":"a5d914926ce4fb86","entry":"calculate_fscore","repo":"humansensinglab/Hamba","repo_kind":"official","path":"eval/freihand/eval_freihand_official.py","file_url":"https://github.com/humansensinglab/Hamba/blob/HEAD/eval/freihand/eval_freihand_official.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":"a5d914926ce4fb86"}},{"code_sha256_prefix":"a5abb3180cb1201b","entry":"create_backbone","repo":"humansensinglab/Hamba","repo_kind":"official","path":"hamba/models/hamba.py","file_url":"https://github.com/humansensinglab/Hamba/blob/HEAD/hamba/models/hamba.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":"a5abb3180cb1201b"}},{"code_sha256_prefix":"13f7fc2776c7ce31","entry":"verts2pcd","repo":"humansensinglab/Hamba","repo_kind":"official","path":"eval/freihand/eval_freihand_official.py","file_url":"https://github.com/humansensinglab/Hamba/blob/HEAD/eval/freihand/eval_freihand_official.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":"13f7fc2776c7ce31"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}