{"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/skeletonnet-a-topology-preserving-solution","title":"SkeletonNet: A Topology-Preserving Solution for Learning Mesh Reconstruction of Object Surfaces from RGB Images","arxiv_id":"2008.05742","date":"2020-08-13","proceeding":null,"authors":["Jiapeng Tang","Xiaoguang Han","Mingkui Tan","Xin Tong","Kui Jia"],"abstract":"This paper focuses on the challenging task of learning 3D object surface reconstructions from RGB images. Existingmethods achieve varying degrees of success by using different surface representations. However, they all have their own drawbacks,and cannot properly reconstruct the surface shapes of complex topologies, arguably due to a lack of constraints on the topologicalstructures in their learning frameworks. To this end, we propose to learn and use the topology-preserved, skeletal shape representationto assist the downstream task of object surface reconstruction from RGB images. Technically, we propose the novelSkeletonNetdesign that learns a volumetric representation of a skeleton via a bridged learning of a skeletal point set, where we use paralleldecoders each responsible for the learning of points on 1D skeletal curves and 2D skeletal sheets, as well as an efficient module ofglobally guided subvolume synthesis for a refined, high-resolution skeletal volume; we present a differentiablePoint2Voxellayer tomake SkeletonNet end-to-end and trainable. With the learned skeletal volumes, we propose two models, the Skeleton-Based GraphConvolutional Neural Network (SkeGCNN) and the Skeleton-Regularized Deep Implicit Surface Network (SkeDISN), which respectivelybuild upon and improve over the existing frameworks of explicit mesh deformation and implicit field learning for the downstream surfacereconstruction task. We conduct thorough experiments that verify the efficacy of our proposed SkeletonNet. SkeGCNN and SkeDISNoutperform existing methods as well, and they have their own merits when measured by different metrics. Additional results ingeneralized task settings further demonstrate the usefulness of our proposed methods. We have made both our implementation codeand the ShapeNet-Skeleton dataset publicly available at ble at https://github.com/tangjiapeng/SkeletonNet.","url_abs":"https://arxiv.org/abs/2008.05742v3","url_pdf":"https://arxiv.org/pdf/2008.05742v3.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":"skeletonnet-a-topology-preserving-solution","repo_url":"https://github.com/tangjiapeng/SkeletonNet","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"surface-reconstruction","task_name":"Surface Reconstruction"}],"methods":[],"datasets_introduced":[{"slug":"shapenet-skeleton","name":"ShapeNet-Skeleton","full_name":null}],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2008.05742","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2008.05742"}},"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/tangjiapeng/SkeletonNet","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_fixture":1,"ran_honours":1,"unverified":21},"by_repo_kind":{"official":{"samples":23,"ran":2,"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":"bc3a2072a2a9cca3","entry":"dot","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeGCNN/deformation/layers.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeGCNN/deformation/layers.py","link_basis":"harvester_set","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"bc3a2072a2a9cca3"}},{"code_sha256_prefix":"b82968db452628fd","entry":"get_layer_uid","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeGCNN/deformation/layers.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeGCNN/deformation/layers.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b82968db452628fd"}},{"code_sha256_prefix":"263a4c266b7dd7be","entry":"compute_geodesic_distance_from_two_matrices","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeDISN/models/posenet_old.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeDISN/models/posenet_old.py","link_basis":"first_harvest_node","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":"263a4c266b7dd7be"}},{"code_sha256_prefix":"ff62c3bc33efc141","entry":"compute_rotation_matrix_from_ortho6d","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeDISN/models/posenet.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeDISN/models/posenet.py","link_basis":"first_harvest_node","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":"ff62c3bc33efc141"}},{"code_sha256_prefix":"db0c1bf18185d93f","entry":"decode_shapelayer","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"sharedata/voxel2layer.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/sharedata/voxel2layer.py","link_basis":"first_harvest_node","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":"db0c1bf18185d93f"}},{"code_sha256_prefix":"bef7ed3fa186b3c6","entry":"decode_shapelayer","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"sharedata/voxel2layer_torch.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/sharedata/voxel2layer_torch.py","link_basis":"first_harvest_node","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":"bef7ed3fa186b3c6"}},{"code_sha256_prefix":"e93bdf1174ceef8c","entry":"encode_shapelayer","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"sharedata/voxel2layer.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/sharedata/voxel2layer.py","link_basis":"first_harvest_node","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":"e93bdf1174ceef8c"}},{"code_sha256_prefix":"78eedf8cde9fb04e","entry":"encode_shapelayer","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"sharedata/voxel2layer_torch.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/sharedata/voxel2layer_torch.py","link_basis":"first_harvest_node","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":"78eedf8cde9fb04e"}},{"code_sha256_prefix":"0b816a02ad9db4d5","entry":"generate_indices","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"sharedata/voxel2layer.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/sharedata/voxel2layer.py","link_basis":"first_harvest_node","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":"0b816a02ad9db4d5"}},{"code_sha256_prefix":"c9b4e8f09bbdf20d","entry":"generate_indices","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"sharedata/voxel2layer_torch.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/sharedata/voxel2layer_torch.py","link_basis":"first_harvest_node","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":"c9b4e8f09bbdf20d"}},{"code_sha256_prefix":"6b1dc46a65c7b542","entry":"get_fixed","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeDISN/models/posenet.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeDISN/models/posenet.py","link_basis":"first_harvest_node","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":"6b1dc46a65c7b542"}},{"code_sha256_prefix":"6d9d55677e711ac7","entry":"get_img_points","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeDISN/cam_est/model_cam.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeDISN/cam_est/model_cam.py","link_basis":"first_harvest_node","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":"6d9d55677e711ac7"}},{"code_sha256_prefix":"7d9c627fe8e7dcca","entry":"laplace_coord","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeGCNN/deformation/losses.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeGCNN/deformation/losses.py","link_basis":"first_harvest_node","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":"7d9c627fe8e7dcca"}},{"code_sha256_prefix":"8d5159a268b4c09f","entry":"laplace_loss","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeGCNN/deformation/losses.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeGCNN/deformation/losses.py","link_basis":"first_harvest_node","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":"8d5159a268b4c09f"}},{"code_sha256_prefix":"7d038625a3f89ebf","entry":"normalize_vector","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeDISN/models/posenet.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeDISN/models/posenet.py","link_basis":"first_harvest_node","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":"7d038625a3f89ebf"}},{"code_sha256_prefix":"c71ac9a6926c461a","entry":"placeholder_features","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeDISN/models/model_add_skevox.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeDISN/models/model_add_skevox.py","link_basis":"first_harvest_node","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":"c71ac9a6926c461a"}},{"code_sha256_prefix":"9a91699ee2fe9841","entry":"placeholder_inputs","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeDISN/cam_est/model_cam.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeDISN/cam_est/model_cam.py","link_basis":"first_harvest_node","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":"9a91699ee2fe9841"}},{"code_sha256_prefix":"7cacff7bd55a7cc6","entry":"placeholder_inputs","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeDISN/models/model_add_skevox.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeDISN/models/model_add_skevox.py","link_basis":"first_harvest_node","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":"7cacff7bd55a7cc6"}},{"code_sha256_prefix":"e8a74ed2dd506d62","entry":"placeholder_inputs","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeDISN/models/model_add_skevox_multiview.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeDISN/models/model_add_skevox_multiview.py","link_basis":"first_harvest_node","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":"e8a74ed2dd506d62"}},{"code_sha256_prefix":"bac3c27707f4b8e1","entry":"placeholder_inputs","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeDISN/models/model_normalization.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeDISN/models/model_normalization.py","link_basis":"first_harvest_node","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":"bac3c27707f4b8e1"}},{"code_sha256_prefix":"5d1958e4bc7feb1c","entry":"repeat_tensor","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeDISN/models/model_add_skevox.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeDISN/models/model_add_skevox.py","link_basis":"first_harvest_node","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":"5d1958e4bc7feb1c"}},{"code_sha256_prefix":"81be8a5f4732fe52","entry":"sparse_dropout","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeGCNN/deformation/layers.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeGCNN/deformation/layers.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":"81be8a5f4732fe52"}},{"code_sha256_prefix":"ecfd96810a9fa29d","entry":"unit","repo":"tangjiapeng/SkeletonNet","repo_kind":"official","path":"SkeGCNN/deformation/losses.py","file_url":"https://github.com/tangjiapeng/SkeletonNet/blob/HEAD/SkeGCNN/deformation/losses.py","link_basis":"first_harvest_node","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":"ecfd96810a9fa29d"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}