{"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/condor-self-supervised-canonicalization-of-3d","title":"ConDor: Self-Supervised Canonicalization of 3D Pose for Partial Shapes","arxiv_id":"2201.07788","date":"2022-01-19","proceeding":"CVPR 2022 1","authors":["Rahul Sajnani","Adrien Poulenard","Jivitesh Jain","Radhika Dua","Leonidas J. Guibas","Srinath Sridhar"],"abstract":"Progress in 3D object understanding has relied on manually canonicalized shape datasets that contain instances with consistent position and orientation (3D pose). This has made it hard to generalize these methods to in-the-wild shapes, eg., from internet model collections or depth sensors. ConDor is a self-supervised method that learns to Canonicalize the 3D orientation and position for full and partial 3D point clouds. We build on top of Tensor Field Networks (TFNs), a class of permutation- and rotation-equivariant, and translation-invariant 3D networks. During inference, our method takes an unseen full or partial 3D point cloud at an arbitrary pose and outputs an equivariant canonical pose. During training, this network uses self-supervision losses to learn the canonical pose from an un-canonicalized collection of full and partial 3D point clouds. ConDor can also learn to consistently co-segment object parts without any supervision. Extensive quantitative results on four new metrics show that our approach outperforms existing methods while enabling new applications such as operation on depth images and annotation transfer.","url_abs":"https://arxiv.org/abs/2201.07788v2","url_pdf":"https://arxiv.org/pdf/2201.07788v2.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":"condor-self-supervised-canonicalization-of-3d","repo_url":"https://github.com/brown-ivl/ConDor","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"tf","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"3d-canonicalization","task_name":"3D Canonicalization"},{"task_slug":"3d-geometry-perception","task_name":"3D Geometry Perception"},{"task_slug":"3d-part-segmentation","task_name":"3D Part Segmentation"},{"task_slug":"3d-pose-estimation","task_name":"3D Pose Estimation"},{"task_slug":null,"task_name":"Position"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2201.07788","atlas_url":"https://app.syntology.ai/?focus=2201.07788","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2201.07788"}},"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/brown-ivl/ConDor","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":18,"unverified":1},"by_repo_kind":{"official":{"samples":19,"ran":18,"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":"a43929f6265ac2c2","entry":"apply_mlp","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/auto_encoder/tfn_atlasnet.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/auto_encoder/tfn_atlasnet.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":"a43929f6265ac2c2"}},{"code_sha256_prefix":"95ec15b1571be826","entry":"eqvar_heads_fuzion","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/network_utils/convolution.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/network_utils/convolution.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":"95ec15b1571be826"}},{"code_sha256_prefix":"183d074ff7b98277","entry":"grid_sampler","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/network_utils/pooling.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/network_utils/pooling.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":"183d074ff7b98277"}},{"code_sha256_prefix":"87f376a5a795f16c","entry":"grid_sampler_","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/network_utils/pooling.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/network_utils/pooling.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":"87f376a5a795f16c"}},{"code_sha256_prefix":"8b561ee6fdb8f3fd","entry":"mask","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/network_utils/convolution.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/network_utils/convolution.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":"8b561ee6fdb8f3fd"}},{"code_sha256_prefix":"83c97d74407b4755","entry":"norml2","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/network_utils/activations.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/network_utils/activations.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":"83c97d74407b4755"}},{"code_sha256_prefix":"c01f0222f247ed28","entry":"patches_radius","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/network_utils/group_points.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/network_utils/group_points.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":"c01f0222f247ed28"}},{"code_sha256_prefix":"f1475b36486b7bbe","entry":"set_mlp","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/auto_encoder/tfn_atlasnet.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/auto_encoder/tfn_atlasnet.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":"f1475b36486b7bbe"}},{"code_sha256_prefix":"34d3cd3a8304196e","entry":"set_sphere_weights","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/auto_encoder/tfn_atlasnet.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/auto_encoder/tfn_atlasnet.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":"34d3cd3a8304196e"}},{"code_sha256_prefix":"bc0a1952c0374318","entry":"sq_dist_mat","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/evaluators/train_pointnet_cls2.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/evaluators/train_pointnet_cls2.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":"bc0a1952c0374318"}},{"code_sha256_prefix":"6ee731af0229a9ba","entry":"squash","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/network_utils/activations.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/network_utils/activations.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":"6ee731af0229a9ba"}},{"code_sha256_prefix":"95a1e02c41de556a","entry":"std","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/evaluators/train_pointnet_cls2.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/evaluators/train_pointnet_cls2.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":"95a1e02c41de556a"}},{"code_sha256_prefix":"492443ff0f1a5a31","entry":"tf_heaviside","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/network_utils/sh_conv.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/network_utils/sh_conv.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":"492443ff0f1a5a31"}},{"code_sha256_prefix":"b7f5b304241048ea","entry":"tf_segment_indicator_","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/network_utils/sh_conv.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/network_utils/sh_conv.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":"b7f5b304241048ea"}},{"code_sha256_prefix":"645fc9c3ed7714e6","entry":"tf_segment_indictor","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/network_utils/sh_conv.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/network_utils/sh_conv.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":"645fc9c3ed7714e6"}},{"code_sha256_prefix":"cb175242ae058123","entry":"tf_unique_with_inverse","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/network_utils/group_points.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/network_utils/group_points.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":"cb175242ae058123"}},{"code_sha256_prefix":"30fc09c6037ff867","entry":"tf_unique_with_inverse","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/network_utils/pooling.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/network_utils/pooling.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":"30fc09c6037ff867"}},{"code_sha256_prefix":"9fb46aab78071109","entry":"var","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/evaluators/train_pointnet_cls2.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/evaluators/train_pointnet_cls2.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":"9fb46aab78071109"}},{"code_sha256_prefix":"83e06b900f5f086d","entry":"compute_patches_grid","repo":"brown-ivl/ConDor","repo_kind":"official","path":"ConDor/network_utils/group_points.py","file_url":"https://github.com/brown-ivl/ConDor/blob/HEAD/ConDor/network_utils/group_points.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":"83e06b900f5f086d"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}