{"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/back-to-mlp-a-simple-baseline-for-human","title":"Back to MLP: A Simple Baseline for Human Motion Prediction","arxiv_id":"2207.01567","date":"2022-07-04","proceeding":null,"authors":["Wen Guo","Yuming Du","Xi Shen","Vincent Lepetit","Xavier Alameda-Pineda","Francesc Moreno-Noguer"],"abstract":"This paper tackles the problem of human motion prediction, consisting in forecasting future body poses from historically observed sequences. State-of-the-art approaches provide good results, however, they rely on deep learning architectures of arbitrary complexity, such as Recurrent Neural Networks(RNN), Transformers or Graph Convolutional Networks(GCN), typically requiring multiple training stages and more than 2 million parameters. In this paper, we show that, after combining with a series of standard practices, such as applying Discrete Cosine Transform(DCT), predicting residual displacement of joints and optimizing velocity as an auxiliary loss, a light-weight network based on multi-layer perceptrons(MLPs) with only 0.14 million parameters can surpass the state-of-the-art performance. An exhaustive evaluation on the Human3.6M, AMASS, and 3DPW datasets shows that our method, named siMLPe, consistently outperforms all other approaches. We hope that our simple method could serve as a strong baseline for the community and allow re-thinking of the human motion prediction problem. The code is publicly available at \\url{https://github.com/dulucas/siMLPe}.","url_abs":"https://arxiv.org/abs/2207.01567v3","url_pdf":"https://arxiv.org/pdf/2207.01567v3.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":"back-to-mlp-a-simple-baseline-for-human","repo_url":"https://github.com/dulucas/simlpe","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"human-pose-forecasting","task_name":"Human Pose Forecasting"},{"task_slug":"human-motion-prediction","task_name":"Human motion prediction"},{"task_slug":"multi-person-pose-forecasting","task_name":"Multi-Person Pose forecasting"},{"task_slug":"motion-prediction","task_name":"motion prediction"}],"methods":[{"method_slug":"discrete-cosine-transform","method_name":"Discrete Cosine Transform"}],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/human-pose-forecasting-on-3dpw","task":"Human Pose Forecasting","dataset":"3DPW","model":"siMLPe","rank_in_archive_order":4,"of":7,"metrics":{"Average MPJPE (mm) 1000 msec":"72.2"},"uses_additional_data":false},{"leaderboard":"/sota/human-pose-forecasting-on-amass","task":"Human Pose Forecasting","dataset":"AMASS","model":"siMLPe","rank_in_archive_order":4,"of":11,"metrics":{"Average MPJPE (mm) 1000 msec":"65.7"},"uses_additional_data":false},{"leaderboard":"/sota/human-pose-forecasting-on-expi-common-actions","task":"Human Pose Forecasting","dataset":"Expi - common actions split","model":"siMLPe","rank_in_archive_order":1,"of":1,"metrics":{"Average MPJPE (mm) @ 200 ms":"80"},"uses_additional_data":false},{"leaderboard":"/sota/human-pose-forecasting-on-harper","task":"Human Pose Forecasting","dataset":"HARPER","model":"SiMLPe","rank_in_archive_order":2,"of":3,"metrics":{"Average MPJPE (mm) @ 1000ms":"141","Average MPJPE (mm) @ 400ms":"60","Last Frame MPJPE (mm) @ 1000ms":"264","Last Frame MPJPE (mm) @ 400ms":"98"},"uses_additional_data":false},{"leaderboard":"/sota/human-pose-forecasting-on-human36m","task":"Human Pose Forecasting","dataset":"Human3.6M","model":"siMLPe","rank_in_archive_order":9,"of":33,"metrics":{"Average MPJPE (mm) @ 1000 ms":"109.4","Average MPJPE (mm) @ 400ms":"57.3"},"uses_additional_data":false},{"leaderboard":"/sota/multi-person-pose-forecasting-on-expi-common","task":"Multi-Person Pose forecasting","dataset":"Expi - common actions split","model":"siMLPe","rank_in_archive_order":5,"of":6,"metrics":{"Average MPJPE (mm) @ 1000 ms":"250","Average MPJPE (mm) @ 400 ms":"128","Average MPJPE (mm) @ 600 ms":"178"},"uses_additional_data":false},{"leaderboard":"/sota/multi-person-pose-forecasting-on-expi-unseen","task":"Multi-Person Pose forecasting","dataset":"Expi - unseen actions split","model":"siMLPe","rank_in_archive_order":3,"of":5,"metrics":{"Average MPJPE (mm) @ 400 ms":"131","Average MPJPE (mm) @ 600 ms":"183","Average MPJPE (mm) @ 800 ms":"225"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2207.01567","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2207.01567"}},"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/dulucas/simlpe","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":3,"unverified":4},"by_repo_kind":{"official":{"samples":7,"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":0,"samples":[{"code_sha256_prefix":"c0984e125450806e","entry":"ang2joint","repo":"dulucas/simlpe","repo_kind":"official","path":"lib/utils/angle_to_joint.py","file_url":"https://github.com/dulucas/simlpe/blob/HEAD/lib/utils/angle_to_joint.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c0984e125450806e"}},{"code_sha256_prefix":"d7032acefdc1b55a","entry":"rodrigues","repo":"dulucas/simlpe","repo_kind":"official","path":"lib/utils/angle_to_joint.py","file_url":"https://github.com/dulucas/simlpe/blob/HEAD/lib/utils/angle_to_joint.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"d7032acefdc1b55a"}},{"code_sha256_prefix":"6588622485d7bdc2","entry":"with_zeros","repo":"dulucas/simlpe","repo_kind":"official","path":"lib/utils/angle_to_joint.py","file_url":"https://github.com/dulucas/simlpe/blob/HEAD/lib/utils/angle_to_joint.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6588622485d7bdc2"}},{"code_sha256_prefix":"81e27319d084659d","entry":"extant_file","repo":"dulucas/simlpe","repo_kind":"official","path":"lib/utils/pyt_utils.py","file_url":"https://github.com/dulucas/simlpe/blob/HEAD/lib/utils/pyt_utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"81e27319d084659d"}},{"code_sha256_prefix":"1edbc792f56ab438","entry":"fkl_torch","repo":"dulucas/simlpe","repo_kind":"official","path":"lib/utils/misc.py","file_url":"https://github.com/dulucas/simlpe/blob/HEAD/lib/utils/misc.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1edbc792f56ab438"}},{"code_sha256_prefix":"13250dfe061caa67","entry":"rotmat2euler_torch","repo":"dulucas/simlpe","repo_kind":"official","path":"lib/utils/misc.py","file_url":"https://github.com/dulucas/simlpe/blob/HEAD/lib/utils/misc.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"13250dfe061caa67"}},{"code_sha256_prefix":"963cf42da1883209","entry":"rotmat2quat_torch","repo":"dulucas/simlpe","repo_kind":"official","path":"lib/utils/misc.py","file_url":"https://github.com/dulucas/simlpe/blob/HEAD/lib/utils/misc.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"963cf42da1883209"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}