{"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/part2word-learning-joint-embedding-of-point","title":"Parts2Words: Learning Joint Embedding of Point Clouds and Texts by Bidirectional Matching between Parts and Words","arxiv_id":"2107.01872","date":"2021-07-05","proceeding":"CVPR 2023 1","authors":["Chuan Tang","Xi Yang","Bojian Wu","Zhizhong Han","Yi Chang"],"abstract":"Shape-Text matching is an important task of high-level shape understanding. Current methods mainly represent a 3D shape as multiple 2D rendered views, which obviously can not be understood well due to the structural ambiguity caused by self-occlusion in the limited number of views. To resolve this issue, we directly represent 3D shapes as point clouds, and propose to learn joint embedding of point clouds and texts by bidirectional matching between parts from shapes and words from texts. Specifically, we first segment the point clouds into parts, and then leverage optimal transport method to match parts and words in an optimized feature space, where each part is represented by aggregating features of all points within it and each word is abstracted by its contextual information. We optimize the feature space in order to enlarge the similarities between the paired training samples, while simultaneously maximizing the margin between the unpaired ones. Experiments demonstrate that our method achieves a significant improvement in accuracy over the SOTAs on multi-modal retrieval tasks under the Text2Shape dataset. Codes are available at https://github.com/JLUtangchuan/Parts2Words.","url_abs":"https://arxiv.org/abs/2107.01872v2","url_pdf":"https://arxiv.org/pdf/2107.01872v2.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":"part2word-learning-joint-embedding-of-point","repo_url":"https://github.com/jlutangchuan/parts2words","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"retrieval","task_name":"Retrieval"},{"task_slug":"text-matching","task_name":"Text Matching"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2107.01872","atlas_url":"https://app.syntology.ai/?focus=2107.01872","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2107.01872"}},"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/jlutangchuan/parts2words","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":10},"by_repo_kind":{"official":{"samples":10,"ran":0,"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":"cb3d4f8e9e9bd628","entry":"collate_fn","repo":"jlutangchuan/parts2words","repo_kind":"official","path":"parts2words/dataloaders/data.py","file_url":"https://github.com/jlutangchuan/parts2words/blob/HEAD/parts2words/dataloaders/data.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":"cb3d4f8e9e9bd628"}},{"code_sha256_prefix":"2e059b3e849cc9d3","entry":"emd_inference_opencv","repo":"jlutangchuan/parts2words","repo_kind":"official","path":"parts2words/models/model_utils/emd_util.py","file_url":"https://github.com/jlutangchuan/parts2words/blob/HEAD/parts2words/models/model_utils/emd_util.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":"2e059b3e849cc9d3"}},{"code_sha256_prefix":"667b2d862e57062f","entry":"emd_inference_opencv_test","repo":"jlutangchuan/parts2words","repo_kind":"official","path":"parts2words/models/model_utils/emd_util.py","file_url":"https://github.com/jlutangchuan/parts2words/blob/HEAD/parts2words/models/model_utils/emd_util.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":"667b2d862e57062f"}},{"code_sha256_prefix":"779b6aa2f5e28418","entry":"get_parser","repo":"jlutangchuan/parts2words","repo_kind":"official","path":"utils/config.py","file_url":"https://github.com/jlutangchuan/parts2words/blob/HEAD/utils/config.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":"779b6aa2f5e28418"}},{"code_sha256_prefix":"a7c37b3d1620a9b8","entry":"get_precomp_loader","repo":"jlutangchuan/parts2words","repo_kind":"official","path":"parts2words/dataloaders/data.py","file_url":"https://github.com/jlutangchuan/parts2words/blob/HEAD/parts2words/dataloaders/data.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":"a7c37b3d1620a9b8"}},{"code_sha256_prefix":"756af0f529e8efd8","entry":"lambda_softmax_func","repo":"jlutangchuan/parts2words","repo_kind":"official","path":"parts2words/models/model.py","file_url":"https://github.com/jlutangchuan/parts2words/blob/HEAD/parts2words/models/model.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":"756af0f529e8efd8"}},{"code_sha256_prefix":"85a4f29b6c4a2a26","entry":"lambda_softmax_func_i2t","repo":"jlutangchuan/parts2words","repo_kind":"official","path":"parts2words/models/model.py","file_url":"https://github.com/jlutangchuan/parts2words/blob/HEAD/parts2words/models/model.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":"85a4f29b6c4a2a26"}},{"code_sha256_prefix":"a3311d58663005ac","entry":"multi_index_list","repo":"jlutangchuan/parts2words","repo_kind":"official","path":"utils/common_tools.py","file_url":"https://github.com/jlutangchuan/parts2words/blob/HEAD/utils/common_tools.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":"a3311d58663005ac"}},{"code_sha256_prefix":"4bd367b04bee9a29","entry":"rotate_point","repo":"jlutangchuan/parts2words","repo_kind":"official","path":"parts2words/dataloaders/data.py","file_url":"https://github.com/jlutangchuan/parts2words/blob/HEAD/parts2words/dataloaders/data.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":"4bd367b04bee9a29"}},{"code_sha256_prefix":"b522db937a918b5a","entry":"timer","repo":"jlutangchuan/parts2words","repo_kind":"official","path":"utils/common_tools.py","file_url":"https://github.com/jlutangchuan/parts2words/blob/HEAD/utils/common_tools.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":"b522db937a918b5a"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}