{"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/srnet-improving-generalization-in-3d-human","title":"SRNet: Improving Generalization in 3D Human Pose Estimation with a Split-and-Recombine Approach","arxiv_id":"2007.09389","date":"2020-07-18","proceeding":"ECCV 2020 8","authors":["Ailing Zeng","Xiao Sun","Fuyang Huang","Minhao Liu","Qiang Xu","Stephen Lin"],"abstract":"Human poses that are rare or unseen in a training set are challenging for a network to predict. Similar to the long-tailed distribution problem in visual recognition, the small number of examples for such poses limits the ability of networks to model them. Interestingly, local pose distributions suffer less from the long-tail problem, i.e., local joint configurations within a rare pose may appear within other poses in the training set, making them less rare. We propose to take advantage of this fact for better generalization to rare and unseen poses. To be specific, our method splits the body into local regions and processes them in separate network branches, utilizing the property that a joint position depends mainly on the joints within its local body region. Global coherence is maintained by recombining the global context from the rest of the body into each branch as a low-dimensional vector. With the reduced dimensionality of less relevant body areas, the training set distribution within network branches more closely reflects the statistics of local poses instead of global body poses, without sacrificing information important for joint inference. The proposed split-and-recombine approach, called SRNet, can be easily adapted to both single-image and temporal models, and it leads to appreciable improvements in the prediction of rare and unseen poses.","url_abs":"https://arxiv.org/abs/2007.09389v1","url_pdf":"https://arxiv.org/pdf/2007.09389v1.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":"srnet-improving-generalization-in-3d-human","repo_url":"https://github.com/ailingzengzzz/Split-and-Recombine-Net","is_official":1,"mentioned_in_paper":0,"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":"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-human36m","task":"3D Human Pose Estimation","dataset":"Human3.6M","model":"SRNet (T=243)","rank_in_archive_order":40,"of":88,"metrics":{"Average MPJPE (mm)":"44.8","Multi-View or Monocular":"Monocular","Using 2D ground-truth joints":"No"},"uses_additional_data":false},{"leaderboard":"/sota/3d-human-pose-estimation-on-human36m","task":"3D Human Pose Estimation","dataset":"Human3.6M","model":"SRNet (T=1)","rank_in_archive_order":63,"of":88,"metrics":{"Average MPJPE (mm)":"49.9","Multi-View or Monocular":"Monocular","Using 2D ground-truth joints":"No"},"uses_additional_data":false},{"leaderboard":"/sota/3d-human-pose-estimation-on-mpi-inf-3dhp","task":"3D Human Pose Estimation","dataset":"MPI-INF-3DHP","model":"SRNET","rank_in_archive_order":94,"of":108,"metrics":{"AUC":"43.8","PCK":"77.6"},"uses_additional_data":false},{"leaderboard":"/sota/monocular-3d-human-pose-estimation-on-human3","task":"Monocular 3D Human Pose Estimation","dataset":"Human3.6M","model":"SRNET","rank_in_archive_order":22,"of":52,"metrics":{"Average MPJPE (mm)":"49.9","Frames Needed":"1","Need Ground Truth 2D Pose":"No","Use Video Sequence":"No"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2007.09389","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2007.09389"}},"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/ailingzengzzz/Split-and-Recombine-Net","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran":1,"unverified":8},"by_repo_kind":{"official":{"samples":9,"ran":1,"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":"3afb541a8147d123","entry":"mpjpe","repo":"ailingzengzzz/Split-and-Recombine-Net","repo_kind":"official","path":"common/common_pytorch/loss/loss_family.py","file_url":"https://github.com/ailingzengzzz/Split-and-Recombine-Net/blob/HEAD/common/common_pytorch/loss/loss_family.py","link_basis":"plan_row","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":"3afb541a8147d123"}},{"code_sha256_prefix":"be5ee7aae00d0f33","entry":"axis_rotation","repo":"ailingzengzzz/Split-and-Recombine-Net","repo_kind":"official","path":"common/transformation/aug_rotate.py","file_url":"https://github.com/ailingzengzzz/Split-and-Recombine-Net/blob/HEAD/common/transformation/aug_rotate.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":"be5ee7aae00d0f33"}},{"code_sha256_prefix":"2c8338c89fe8975c","entry":"image_coordinates","repo":"ailingzengzzz/Split-and-Recombine-Net","repo_kind":"official","path":"common/transformation/cam_utils.py","file_url":"https://github.com/ailingzengzzz/Split-and-Recombine-Net/blob/HEAD/common/transformation/cam_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":"2c8338c89fe8975c"}},{"code_sha256_prefix":"74396e4069c4e8d6","entry":"mpjae","repo":"ailingzengzzz/Split-and-Recombine-Net","repo_kind":"official","path":"common/common_pytorch/loss/loss_family.py","file_url":"https://github.com/ailingzengzzz/Split-and-Recombine-Net/blob/HEAD/common/common_pytorch/loss/loss_family.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":"74396e4069c4e8d6"}},{"code_sha256_prefix":"b72379b0ad4e784a","entry":"mpjpe_smooth","repo":"ailingzengzzz/Split-and-Recombine-Net","repo_kind":"official","path":"common/common_pytorch/loss/loss_family.py","file_url":"https://github.com/ailingzengzzz/Split-and-Recombine-Net/blob/HEAD/common/common_pytorch/loss/loss_family.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":"b72379b0ad4e784a"}},{"code_sha256_prefix":"e53a897a491c4627","entry":"normalize_screen_coordinates","repo":"ailingzengzzz/Split-and-Recombine-Net","repo_kind":"official","path":"common/transformation/cam_utils.py","file_url":"https://github.com/ailingzengzzz/Split-and-Recombine-Net/blob/HEAD/common/transformation/cam_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":"e53a897a491c4627"}},{"code_sha256_prefix":"44aeda9bcbffef2a","entry":"process_3d","repo":"ailingzengzzz/Split-and-Recombine-Net","repo_kind":"official","path":"common/transformation/aug_rotate.py","file_url":"https://github.com/ailingzengzzz/Split-and-Recombine-Net/blob/HEAD/common/transformation/aug_rotate.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":"44aeda9bcbffef2a"}},{"code_sha256_prefix":"fb05d05fdb09695a","entry":"rotate","repo":"ailingzengzzz/Split-and-Recombine-Net","repo_kind":"official","path":"common/transformation/aug_rotate.py","file_url":"https://github.com/ailingzengzzz/Split-and-Recombine-Net/blob/HEAD/common/transformation/aug_rotate.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":"fb05d05fdb09695a"}},{"code_sha256_prefix":"5323ac47f72a7095","entry":"wrap","repo":"ailingzengzzz/Split-and-Recombine-Net","repo_kind":"official","path":"common/common_pytorch/utils.py","file_url":"https://github.com/ailingzengzzz/Split-and-Recombine-Net/blob/HEAD/common/common_pytorch/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":"5323ac47f72a7095"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}