{"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/anisotropic-separable-set-abstraction-for","title":"ASSANet: An Anisotropic Separable Set Abstraction for Efficient Point Cloud Representation Learning","arxiv_id":"2110.10538","date":"2021-10-20","proceeding":"NeurIPS 2021 12","authors":["Guocheng Qian","Hasan Abed Al Kader Hammoud","Guohao Li","Ali Thabet","Bernard Ghanem"],"abstract":"Access to 3D point cloud representations has been widely facilitated by LiDAR sensors embedded in various mobile devices. This has led to an emerging need for fast and accurate point cloud processing techniques. In this paper, we revisit and dive deeper into PointNet++, one of the most influential yet under-explored networks, and develop faster and more accurate variants of the model. We first present a novel Separable Set Abstraction (SA) module that disentangles the vanilla SA module used in PointNet++ into two separate learning stages: (1) learning channel correlation and (2) learning spatial correlation. The Separable SA module is significantly faster than the vanilla version, yet it achieves comparable performance. We then introduce a new Anisotropic Reduction function into our Separable SA module and propose an Anisotropic Separable SA (ASSA) module that substantially increases the network's accuracy. We later replace the vanilla SA modules in PointNet++ with the proposed ASSA module, and denote the modified network as ASSANet. Extensive experiments on point cloud classification, semantic segmentation, and part segmentation show that ASSANet outperforms PointNet++ and other methods, achieving much higher accuracy and faster speeds. In particular, ASSANet outperforms PointNet++ by $7.4$ mIoU on S3DIS Area 5, while maintaining $1.6 \\times $ faster inference speed on a single NVIDIA 2080Ti GPU. Our scaled ASSANet variant achieves $66.8$ mIoU and outperforms KPConv, while being more than $54 \\times$ faster.","url_abs":"https://arxiv.org/abs/2110.10538v2","url_pdf":"https://arxiv.org/pdf/2110.10538v2.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":"anisotropic-separable-set-abstraction-for","repo_url":"https://github.com/guochengqian/assanet","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"3d-part-segmentation","task_name":"3D Part Segmentation"},{"task_slug":"3d-point-cloud-classification","task_name":"3D Point Cloud Classification"},{"task_slug":null,"task_name":"GPU"},{"task_slug":"point-cloud-classification","task_name":"Point Cloud Classification"},{"task_slug":"representation-learning","task_name":"Representation Learning"},{"task_slug":"semantic-segmentation","task_name":"Semantic Segmentation"}],"methods":[{"method_slug":"speed","method_name":"SPEED"}],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/3d-part-segmentation-on-shapenet-part","task":"3D Part Segmentation","dataset":"ShapeNet-Part","model":"ASSANet","rank_in_archive_order":36,"of":67,"metrics":{"Instance Average IoU":"86.1"},"uses_additional_data":false},{"leaderboard":"/sota/3d-point-cloud-classification-on-modelnet40","task":"3D Point Cloud Classification","dataset":"ModelNet40","model":"ASSANet","rank_in_archive_order":81,"of":111,"metrics":{"Overall Accuracy":"92.9"},"uses_additional_data":false},{"leaderboard":"/sota/semantic-segmentation-on-s3dis-area5","task":"Semantic Segmentation","dataset":"S3DIS Area5","model":"ASSANet","rank_in_archive_order":43,"of":61,"metrics":{"Number of params":"N/A","mIoU":"66.8"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2110.10538","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2110.10538"}},"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/guochengqian/assanet","reach":null}],"summary":{"ran":1,"ran_draft_wrong":1,"unverified":10},"by_repo_kind":{"official":{"samples":12,"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":"e91868506eb61fe9","entry":"Registry","repo":"guochengqian/assanet","repo_kind":"official","path":"models/encoder/assanet_encoder.py","file_url":"https://github.com/guochengqian/assanet/blob/HEAD/models/encoder/assanet_encoder.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e91868506eb61fe9"}},{"code_sha256_prefix":"1e49f35d5e2aef71","entry":"activation_str2dict_mapping","repo":"guochengqian/assanet","repo_kind":"official","path":"models/encoder/assanet_encoder.py","file_url":"https://github.com/guochengqian/assanet/blob/HEAD/models/encoder/assanet_encoder.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1e49f35d5e2aef71"}},{"code_sha256_prefix":"ac7a3988e833c2c5","entry":"ASSANetEncoder","repo":"guochengqian/assanet","repo_kind":"official","path":"models/encoder/assanet_encoder.py","file_url":"https://github.com/guochengqian/assanet/blob/HEAD/models/encoder/assanet_encoder.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":"ac7a3988e833c2c5"}},{"code_sha256_prefix":"47fbaa4efa6f701b","entry":"ConvPool","repo":"guochengqian/assanet","repo_kind":"official","path":"models/encoder/assanet_encoder.py","file_url":"https://github.com/guochengqian/assanet/blob/HEAD/models/encoder/assanet_encoder.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":"47fbaa4efa6f701b"}},{"code_sha256_prefix":"ca7e43ff863d820c","entry":"LocalAggregation","repo":"guochengqian/assanet","repo_kind":"official","path":"models/encoder/assanet_encoder.py","file_url":"https://github.com/guochengqian/assanet/blob/HEAD/models/encoder/assanet_encoder.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":"ca7e43ff863d820c"}},{"code_sha256_prefix":"dff8b526ff3def5f","entry":"PointnetSAModuleMSG","repo":"guochengqian/assanet","repo_kind":"official","path":"models/encoder/assanet_encoder.py","file_url":"https://github.com/guochengqian/assanet/blob/HEAD/models/encoder/assanet_encoder.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":"dff8b526ff3def5f"}},{"code_sha256_prefix":"4b5f8b6a19d8f02b","entry":"PreConv","repo":"guochengqian/assanet","repo_kind":"official","path":"models/encoder/assanet_encoder.py","file_url":"https://github.com/guochengqian/assanet/blob/HEAD/models/encoder/assanet_encoder.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":"4b5f8b6a19d8f02b"}},{"code_sha256_prefix":"898690285ec2068d","entry":"_PointnetSAModuleBase","repo":"guochengqian/assanet","repo_kind":"official","path":"models/encoder/assanet_encoder.py","file_url":"https://github.com/guochengqian/assanet/blob/HEAD/models/encoder/assanet_encoder.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":"898690285ec2068d"}},{"code_sha256_prefix":"0f7fe30e6ef07130","entry":"build_activation_layer","repo":"guochengqian/assanet","repo_kind":"official","path":"models/encoder/assanet_encoder.py","file_url":"https://github.com/guochengqian/assanet/blob/HEAD/models/encoder/assanet_encoder.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":"0f7fe30e6ef07130"}},{"code_sha256_prefix":"aa2b4144b6138f9f","entry":"build_conv","repo":"guochengqian/assanet","repo_kind":"official","path":"models/encoder/assanet_encoder.py","file_url":"https://github.com/guochengqian/assanet/blob/HEAD/models/encoder/assanet_encoder.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":"aa2b4144b6138f9f"}},{"code_sha256_prefix":"17095c6950af969e","entry":"build_from_cfg","repo":"guochengqian/assanet","repo_kind":"official","path":"models/encoder/assanet_encoder.py","file_url":"https://github.com/guochengqian/assanet/blob/HEAD/models/encoder/assanet_encoder.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":"17095c6950af969e"}},{"code_sha256_prefix":"bccf5fbdfee61fcf","entry":"build_grouper","repo":"guochengqian/assanet","repo_kind":"official","path":"models/encoder/assanet_encoder.py","file_url":"https://github.com/guochengqian/assanet/blob/HEAD/models/encoder/assanet_encoder.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":"bccf5fbdfee61fcf"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}