{"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/if-defense-3d-adversarial-point-cloud-defense-1","title":"IF-Defense: 3D Adversarial Point Cloud Defense via Implicit Function based Restoration","arxiv_id":"2010.05272","date":"2020-10-11","proceeding":null,"authors":["Ziyi Wu","Yueqi Duan","He Wang","Qingnan Fan","Leonidas J. Guibas"],"abstract":"Point cloud is an important 3D data representation widely used in many essential applications. Leveraging deep neural networks, recent works have shown great success in processing 3D point clouds. However, those deep neural networks are vulnerable to various 3D adversarial attacks, which can be summarized as two primary types: point perturbation that affects local point distribution, and surface distortion that causes dramatic changes in geometry. In this paper, we simultaneously address both the aforementioned attacks by learning to restore the clean point clouds from the attacked ones. More specifically, we propose an IF-Defense framework to directly optimize the coordinates of input points with geometry-aware and distribution-aware constraints. The former aims to recover the surface of point cloud through implicit function, while the latter encourages evenly-distributed points. Our experimental results show that IF-Defense achieves the state-of-the-art defense performance against existing 3D adversarial attacks on PointNet, PointNet++, DGCNN, PointConv and RS-CNN. For example, compared with previous methods, IF-Defense presents 20.02% improvement in classification accuracy against salient point dropping attack and 16.29% against LG-GAN attack on PointNet. Our code is available at https://github.com/Wuziyi616/IF-Defense.","url_abs":"https://arxiv.org/abs/2010.05272v3","url_pdf":"https://arxiv.org/pdf/2010.05272v3.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":"if-defense-3d-adversarial-point-cloud-defense-1","repo_url":"https://github.com/Wuziyi616/IF-Defense","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"if-defense-3d-adversarial-point-cloud-defense-1","repo_url":"https://github.com/KaidongLi/pytorch-LatticePointClassifier","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[],"methods":[{"method_slug":"dgcnn","method_name":"DGCNN"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=2010.05272","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2010.05272"}},"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/KaidongLi/pytorch-LatticePointClassifier","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/Wuziyi616/IF-Defense","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_fixture":1,"ran_draft_wrong":1,"ran_honours":1,"ran_violates":1,"unverified":16},"by_repo_kind":{"official":{"samples":6,"ran":2,"repositories":1},"listed":{"samples":14,"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":"449a0265144f6530","entry":"index_points","repo":"Wuziyi616/IF-Defense","repo_kind":"official","path":"ConvONet/defense/pn_utils.py","file_url":"https://github.com/Wuziyi616/IF-Defense/blob/HEAD/ConvONet/defense/pn_utils.py","link_basis":"harvester_set","language":"python","status":"ran_fixture","verification_level":2,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"449a0265144f6530"}},{"code_sha256_prefix":"1a65698a4ceb9300","entry":"logits_info","repo":"KaidongLi/pytorch-LatticePointClassifier","repo_kind":"listed","path":"ctri_attack.py","file_url":"https://github.com/KaidongLi/pytorch-LatticePointClassifier/blob/HEAD/ctri_attack.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1a65698a4ceb9300"}},{"code_sha256_prefix":"4783fbece52f500e","entry":"pc_normalize","repo":"KaidongLi/pytorch-LatticePointClassifier","repo_kind":"listed","path":"data_utils/AttackModelNetLoader.py","file_url":"https://github.com/KaidongLi/pytorch-LatticePointClassifier/blob/HEAD/data_utils/AttackModelNetLoader.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4783fbece52f500e"}},{"code_sha256_prefix":"25c7475539e39da4","entry":"str2bool","repo":"Wuziyi616/IF-Defense","repo_kind":"official","path":"ConvONet/opt_defense.py","file_url":"https://github.com/Wuziyi616/IF-Defense/blob/HEAD/ConvONet/opt_defense.py","link_basis":"harvester_set","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"25c7475539e39da4"}},{"code_sha256_prefix":"f80066a00e7156a2","entry":"farthest_point_sample","repo":"KaidongLi/pytorch-LatticePointClassifier","repo_kind":"listed","path":"data_utils/AttackModelNetLoader.py","file_url":"https://github.com/KaidongLi/pytorch-LatticePointClassifier/blob/HEAD/data_utils/AttackModelNetLoader.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":"f80066a00e7156a2"}},{"code_sha256_prefix":"e8b95eed79a86b6b","entry":"farthest_point_sample","repo":"Wuziyi616/IF-Defense","repo_kind":"official","path":"ConvONet/defense/pn_utils.py","file_url":"https://github.com/Wuziyi616/IF-Defense/blob/HEAD/ConvONet/defense/pn_utils.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":"e8b95eed79a86b6b"}},{"code_sha256_prefix":"6bc6b4d5f13a296d","entry":"fps_points","repo":"Wuziyi616/IF-Defense","repo_kind":"official","path":"ConvONet/defense/pn_utils.py","file_url":"https://github.com/Wuziyi616/IF-Defense/blob/HEAD/ConvONet/defense/pn_utils.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":"6bc6b4d5f13a296d"}},{"code_sha256_prefix":"6d4650e09a86da2d","entry":"get_critical_points","repo":"KaidongLi/pytorch-LatticePointClassifier","repo_kind":"listed","path":"independent_attack.py","file_url":"https://github.com/KaidongLi/pytorch-LatticePointClassifier/blob/HEAD/independent_attack.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":"6d4650e09a86da2d"}},{"code_sha256_prefix":"d5492c0376063d18","entry":"get_critical_points_simple","repo":"KaidongLi/pytorch-LatticePointClassifier","repo_kind":"listed","path":"cluster_attack.py","file_url":"https://github.com/KaidongLi/pytorch-LatticePointClassifier/blob/HEAD/cluster_attack.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":"d5492c0376063d18"}},{"code_sha256_prefix":"f4f5f9e8c35bebe4","entry":"get_initial_cluster","repo":"KaidongLi/pytorch-LatticePointClassifier","repo_kind":"listed","path":"cluster_attack.py","file_url":"https://github.com/KaidongLi/pytorch-LatticePointClassifier/blob/HEAD/cluster_attack.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":"f4f5f9e8c35bebe4"}},{"code_sha256_prefix":"75ef0a2731957067","entry":"grouped_shuffle","repo":"KaidongLi/pytorch-LatticePointClassifier","repo_kind":"listed","path":"data_utils/AttackScanNetLoader.py","file_url":"https://github.com/KaidongLi/pytorch-LatticePointClassifier/blob/HEAD/data_utils/AttackScanNetLoader.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":"75ef0a2731957067"}},{"code_sha256_prefix":"0b3628082aec98d2","entry":"iso_penalty","repo":"KaidongLi/pytorch-LatticePointClassifier","repo_kind":"listed","path":"ctri_attack.py","file_url":"https://github.com/KaidongLi/pytorch-LatticePointClassifier/blob/HEAD/ctri_attack.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":"0b3628082aec98d2"}},{"code_sha256_prefix":"9555a6e5f89c8d47","entry":"normalize_batch_pc","repo":"Wuziyi616/IF-Defense","repo_kind":"official","path":"ConvONet/opt_defense.py","file_url":"https://github.com/Wuziyi616/IF-Defense/blob/HEAD/ConvONet/opt_defense.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":"9555a6e5f89c8d47"}},{"code_sha256_prefix":"0c7f640a543dac45","entry":"normalize_pc","repo":"Wuziyi616/IF-Defense","repo_kind":"official","path":"ONet/remesh_defense.py","file_url":"https://github.com/Wuziyi616/IF-Defense/blob/HEAD/ONet/remesh_defense.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":"0c7f640a543dac45"}},{"code_sha256_prefix":"7f7aa628837f4b3b","entry":"pc_normalize","repo":"KaidongLi/pytorch-LatticePointClassifier","repo_kind":"listed","path":"data_utils/AttackScanNetLoader.py","file_url":"https://github.com/KaidongLi/pytorch-LatticePointClassifier/blob/HEAD/data_utils/AttackScanNetLoader.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":"7f7aa628837f4b3b"}},{"code_sha256_prefix":"46bfcc9fc0b2f12b","entry":"rotation","repo":"KaidongLi/pytorch-LatticePointClassifier","repo_kind":"listed","path":"isometry_init.py","file_url":"https://github.com/KaidongLi/pytorch-LatticePointClassifier/blob/HEAD/isometry_init.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":"46bfcc9fc0b2f12b"}},{"code_sha256_prefix":"2f5b0b8ec05fab7e","entry":"rotation_axis_angle","repo":"KaidongLi/pytorch-LatticePointClassifier","repo_kind":"listed","path":"isometry_init.py","file_url":"https://github.com/KaidongLi/pytorch-LatticePointClassifier/blob/HEAD/isometry_init.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":"2f5b0b8ec05fab7e"}},{"code_sha256_prefix":"09ba264276d7fb5f","entry":"rotation_xyz","repo":"KaidongLi/pytorch-LatticePointClassifier","repo_kind":"listed","path":"isometry_init.py","file_url":"https://github.com/KaidongLi/pytorch-LatticePointClassifier/blob/HEAD/isometry_init.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":"09ba264276d7fb5f"}},{"code_sha256_prefix":"1ef3ef28cc0e8539","entry":"spectral_penalty","repo":"KaidongLi/pytorch-LatticePointClassifier","repo_kind":"listed","path":"ctri_attack.py","file_url":"https://github.com/KaidongLi/pytorch-LatticePointClassifier/blob/HEAD/ctri_attack.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":"1ef3ef28cc0e8539"}},{"code_sha256_prefix":"1f1a30d62ca94b83","entry":"test","repo":"KaidongLi/pytorch-LatticePointClassifier","repo_kind":"listed","path":"cluster_attack.py","file_url":"https://github.com/KaidongLi/pytorch-LatticePointClassifier/blob/HEAD/cluster_attack.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":"1f1a30d62ca94b83"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}