{"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/motionagformer-enhancing-3d-human-pose","title":"MotionAGFormer: Enhancing 3D Human Pose Estimation with a Transformer-GCNFormer Network","arxiv_id":"2310.16288","date":"2023-10-25","proceeding":null,"authors":["Soroush Mehraban","Vida Adeli","Babak Taati"],"abstract":"Recent transformer-based approaches have demonstrated excellent performance in 3D human pose estimation. However, they have a holistic view and by encoding global relationships between all the joints, they do not capture the local dependencies precisely. In this paper, we present a novel Attention-GCNFormer (AGFormer) block that divides the number of channels by using two parallel transformer and GCNFormer streams. Our proposed GCNFormer module exploits the local relationship between adjacent joints, outputting a new representation that is complementary to the transformer output. By fusing these two representation in an adaptive way, AGFormer exhibits the ability to better learn the underlying 3D structure. By stacking multiple AGFormer blocks, we propose MotionAGFormer in four different variants, which can be chosen based on the speed-accuracy trade-off. We evaluate our model on two popular benchmark datasets: Human3.6M and MPI-INF-3DHP. MotionAGFormer-B achieves state-of-the-art results, with P1 errors of 38.4mm and 16.2mm, respectively. Remarkably, it uses a quarter of the parameters and is three times more computationally efficient than the previous leading model on Human3.6M dataset. Code and models are available at https://github.com/TaatiTeam/MotionAGFormer.","url_abs":"https://arxiv.org/abs/2310.16288v1","url_pdf":"https://arxiv.org/pdf/2310.16288v1.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":"motionagformer-enhancing-3d-human-pose","repo_url":"https://github.com/taatiteam/motionagformer","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"3d-human-pose-estimation","task_name":"3D Human Pose Estimation"},{"task_slug":"classification-1","task_name":"Classification"},{"task_slug":"monocular-3d-human-pose-estimation","task_name":"Monocular 3D Human Pose Estimation"},{"task_slug":"pose-estimation","task_name":"Pose Estimation"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/3d-human-pose-estimation-on-mpi-inf-3dhp","task":"3D Human Pose Estimation","dataset":"MPI-INF-3DHP","model":"MotionAGFormer-L (T=81)","rank_in_archive_order":2,"of":108,"metrics":{"AUC":"85.3","MPJPE":"16.2","PCK":"98.2"},"uses_additional_data":false},{"leaderboard":"/sota/3d-human-pose-estimation-on-mpi-inf-3dhp","task":"3D Human Pose Estimation","dataset":"MPI-INF-3DHP","model":"MotionAGFormer-S (T=81)","rank_in_archive_order":4,"of":108,"metrics":{"AUC":"84.5","MPJPE":"17.1","PCK":"98.3"},"uses_additional_data":false},{"leaderboard":"/sota/3d-human-pose-estimation-on-mpi-inf-3dhp","task":"3D Human Pose Estimation","dataset":"MPI-INF-3DHP","model":"MotionAGFormer-B (T=81)","rank_in_archive_order":6,"of":108,"metrics":{"AUC":"84.2","MPJPE":"18.2","PCK":"98.3"},"uses_additional_data":false},{"leaderboard":"/sota/3d-human-pose-estimation-on-mpi-inf-3dhp","task":"3D Human Pose Estimation","dataset":"MPI-INF-3DHP","model":"MotionAGFormer-XS (T=27)","rank_in_archive_order":7,"of":108,"metrics":{"AUC":"83.5","MPJPE":"19.2","PCK":"98.2"},"uses_additional_data":false},{"leaderboard":"/sota/classification-on-full-body-parkinsons","task":"Classification","dataset":"Full-body Parkinson’s disease dataset","model":"MotionAGFormer","rank_in_archive_order":6,"of":7,"metrics":{"F1-score (weighted)":"0.42"},"uses_additional_data":false},{"leaderboard":"/sota/monocular-3d-human-pose-estimation-on-human3","task":"Monocular 3D Human Pose Estimation","dataset":"Human3.6M","model":"MotionAGFormer-L","rank_in_archive_order":2,"of":52,"metrics":{"2D detector":"SH","Average MPJPE (mm)":"38.4","Frames Needed":"243","Need Ground Truth 2D Pose":"No","Use Video Sequence":"Yes"},"uses_additional_data":false},{"leaderboard":"/sota/monocular-3d-human-pose-estimation-on-human3","task":"Monocular 3D Human Pose Estimation","dataset":"Human3.6M","model":"MotionAGFormer-B","rank_in_archive_order":3,"of":52,"metrics":{"2D detector":"SH","Average MPJPE (mm)":"38.4","Frames Needed":"243","Need Ground Truth 2D Pose":"No","Use Video Sequence":"Yes"},"uses_additional_data":false},{"leaderboard":"/sota/monocular-3d-human-pose-estimation-on-human3","task":"Monocular 3D Human Pose Estimation","dataset":"Human3.6M","model":"MotionAGFormer-S","rank_in_archive_order":13,"of":52,"metrics":{"2D detector":"SH","Average MPJPE (mm)":"42.5","Frames Needed":"81","Need Ground Truth 2D Pose":"No","Use Video Sequence":"Yes"},"uses_additional_data":false},{"leaderboard":"/sota/monocular-3d-human-pose-estimation-on-human3","task":"Monocular 3D Human Pose Estimation","dataset":"Human3.6M","model":"MotionAGFormer-XS","rank_in_archive_order":17,"of":52,"metrics":{"2D detector":"SH","Average MPJPE (mm)":"45.1","Frames Needed":"27","Need Ground Truth 2D Pose":"No","Use Video Sequence":"Yes"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2310.16288","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2310.16288"}},"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/taatiteam/motionagformer","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran":13,"ran_draft_wrong":1,"unverified":2},"by_repo_kind":{"official":{"samples":16,"ran":14,"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":0,"samples":[{"code_sha256_prefix":"adcee5fd9395fccd","entry":"acc_error","repo":"taatiteam/motionagformer","repo_kind":"official","path":"loss/pose3d.py","file_url":"https://github.com/taatiteam/motionagformer/blob/HEAD/loss/pose3d.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"adcee5fd9395fccd"}},{"code_sha256_prefix":"f3a0f7cf8690505f","entry":"coco_h36m","repo":"taatiteam/motionagformer","repo_kind":"official","path":"demo/lib/preprocess.py","file_url":"https://github.com/taatiteam/motionagformer/blob/HEAD/demo/lib/preprocess.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f3a0f7cf8690505f"}},{"code_sha256_prefix":"5f5ae82020ac7ec2","entry":"edge2mat","repo":"taatiteam/motionagformer","repo_kind":"official","path":"model/modules/ctrgc.py","file_url":"https://github.com/taatiteam/motionagformer/blob/HEAD/model/modules/ctrgc.py","link_basis":"plan_row","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"5f5ae82020ac7ec2"}},{"code_sha256_prefix":"7bf753e1974cd49d","entry":"get_spatial_graph","repo":"taatiteam/motionagformer","repo_kind":"official","path":"model/modules/ctrgc.py","file_url":"https://github.com/taatiteam/motionagformer/blob/HEAD/model/modules/ctrgc.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"7bf753e1974cd49d"}},{"code_sha256_prefix":"85be84dc21eb6ce3","entry":"h36m_coco_format","repo":"taatiteam/motionagformer","repo_kind":"official","path":"demo/lib/preprocess.py","file_url":"https://github.com/taatiteam/motionagformer/blob/HEAD/demo/lib/preprocess.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"85be84dc21eb6ce3"}},{"code_sha256_prefix":"ef4f2e439dde1bc0","entry":"jpe","repo":"taatiteam/motionagformer","repo_kind":"official","path":"loss/pose3d.py","file_url":"https://github.com/taatiteam/motionagformer/blob/HEAD/loss/pose3d.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"ef4f2e439dde1bc0"}},{"code_sha256_prefix":"08fdd93d7a20142f","entry":"mpjpe","repo":"taatiteam/motionagformer","repo_kind":"official","path":"loss/pose3d.py","file_url":"https://github.com/taatiteam/motionagformer/blob/HEAD/loss/pose3d.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"08fdd93d7a20142f"}},{"code_sha256_prefix":"abe9afd483b702d8","entry":"normalize_digraph","repo":"taatiteam/motionagformer","repo_kind":"official","path":"model/modules/ctrgc.py","file_url":"https://github.com/taatiteam/motionagformer/blob/HEAD/model/modules/ctrgc.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"abe9afd483b702d8"}},{"code_sha256_prefix":"1fddccf0fa7a9893","entry":"normalize_screen_coordinates","repo":"taatiteam/motionagformer","repo_kind":"official","path":"demo/lib/utils.py","file_url":"https://github.com/taatiteam/motionagformer/blob/HEAD/demo/lib/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"1fddccf0fa7a9893"}},{"code_sha256_prefix":"34067eef72357f72","entry":"qrot","repo":"taatiteam/motionagformer","repo_kind":"official","path":"demo/lib/utils.py","file_url":"https://github.com/taatiteam/motionagformer/blob/HEAD/demo/lib/utils.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"34067eef72357f72"}},{"code_sha256_prefix":"a7047a1db3eec59b","entry":"resample","repo":"taatiteam/motionagformer","repo_kind":"official","path":"demo/vis.py","file_url":"https://github.com/taatiteam/motionagformer/blob/HEAD/demo/vis.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a7047a1db3eec59b"}},{"code_sha256_prefix":"b9f70678ddc9add2","entry":"revise_kpts","repo":"taatiteam/motionagformer","repo_kind":"official","path":"demo/lib/preprocess.py","file_url":"https://github.com/taatiteam/motionagformer/blob/HEAD/demo/lib/preprocess.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b9f70678ddc9add2"}},{"code_sha256_prefix":"091700eabe2e929a","entry":"show2Dpose","repo":"taatiteam/motionagformer","repo_kind":"official","path":"demo/vis.py","file_url":"https://github.com/taatiteam/motionagformer/blob/HEAD/demo/vis.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"091700eabe2e929a"}},{"code_sha256_prefix":"c084a2b9ed79fa5a","entry":"turn_into_clips","repo":"taatiteam/motionagformer","repo_kind":"official","path":"demo/vis.py","file_url":"https://github.com/taatiteam/motionagformer/blob/HEAD/demo/vis.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"c084a2b9ed79fa5a"}},{"code_sha256_prefix":"4ea604a4a73fce53","entry":"input_augmentation","repo":"taatiteam/motionagformer","repo_kind":"official","path":"train_3dhp.py","file_url":"https://github.com/taatiteam/motionagformer/blob/HEAD/train_3dhp.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"4ea604a4a73fce53"}},{"code_sha256_prefix":"162a4d479c76b84e","entry":"wrap","repo":"taatiteam/motionagformer","repo_kind":"official","path":"demo/lib/utils.py","file_url":"https://github.com/taatiteam/motionagformer/blob/HEAD/demo/lib/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"162a4d479c76b84e"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}