{"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/adafit-rethinking-learning-based-normal","title":"AdaFit: Rethinking Learning-based Normal Estimation on Point Clouds","arxiv_id":"2108.05836","date":"2021-08-12","proceeding":"ICCV 2021 10","authors":["Runsong Zhu","YuAn Liu","Zhen Dong","Tengping Jiang","YuAn Wang","Wenping Wang","Bisheng Yang"],"abstract":"This paper presents a neural network for robust normal estimation on point clouds, named AdaFit, that can deal with point clouds with noise and density variations. Existing works use a network to learn point-wise weights for weighted least squares surface fitting to estimate the normals, which has difficulty in finding accurate normals in complex regions or containing noisy points. By analyzing the step of weighted least squares surface fitting, we find that it is hard to determine the polynomial order of the fitting surface and the fitting surface is sensitive to outliers. To address these problems, we propose a simple yet effective solution that adds an additional offset prediction to improve the quality of normal estimation. Furthermore, in order to take advantage of points from different neighborhood sizes, a novel Cascaded Scale Aggregation layer is proposed to help the network predict more accurate point-wise offsets and weights. Extensive experiments demonstrate that AdaFit achieves state-of-the-art performance on both the synthetic PCPNet dataset and the real-word SceneNN dataset.","url_abs":"https://arxiv.org/abs/2108.05836v1","url_pdf":"https://arxiv.org/pdf/2108.05836v1.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":"adafit-rethinking-learning-based-normal","repo_url":"https://github.com/runsong123/adafit","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[{"task_slug":"surface-normals-estimation","task_name":"Surface Normals Estimation"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/surface-normals-estimation-on-pcpnet","task":"Surface Normals Estimation","dataset":"PCPNet","model":"AdaFit","rank_in_archive_order":5,"of":8,"metrics":{"RMSE ":"10.76"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2108.05836","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2108.05836"}},"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/runsong123/adafit","reach":{"status":"ok"}},{"provenance":"deterministic:regex_extraction","url":"https://github.com/Runsong123/AdaFit","reach":{"status":"ok"}}],"summary":{"ran":5,"ran_draft_wrong":2,"ran_fixture":2,"unverified":8},"by_repo_kind":{"official":{"samples":17,"ran":9,"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":17,"samples":[{"code_sha256_prefix":"c84070aee408732d","entry":"BaseBC","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c84070aee408732d"}},{"code_sha256_prefix":"0da3abc050b0a66b","entry":"BaseBF","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"0da3abc050b0a66b"}},{"code_sha256_prefix":"8834f32b69b83af3","entry":"Inception3D","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"8834f32b69b83af3"}},{"code_sha256_prefix":"b2bb9a5d3998694c","entry":"STN","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b2bb9a5d3998694c"}},{"code_sha256_prefix":"abe6fbe3f2dcc072","entry":"VariableScaleLayer","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"abe6fbe3f2dcc072"}},{"code_sha256_prefix":"8e631a5d06b64765","entry":"batch_quat_to_rotmat","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"8e631a5d06b64765"}},{"code_sha256_prefix":"9e8d607f21afdb0f","entry":"fit_Wjet","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9e8d607f21afdb0f"}},{"code_sha256_prefix":"ecb295a64a2d0737","entry":"get_3DmFV_pytorch","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"ecb295a64a2d0737"}},{"code_sha256_prefix":"cf1d6127981c7181","entry":"solve_linear_system","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"cf1d6127981c7181"}},{"code_sha256_prefix":"ba8dc700dee0518a","entry":"DeepFit","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"ba8dc700dee0518a"}},{"code_sha256_prefix":"02c419a41377302d","entry":"Global3DmFVFeature","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"02c419a41377302d"}},{"code_sha256_prefix":"75e4c5399e922c27","entry":"PointNet3DmFVEncoder","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"75e4c5399e922c27"}},{"code_sha256_prefix":"2869c04723232e53","entry":"PointNetEncoder","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2869c04723232e53"}},{"code_sha256_prefix":"b98d64954f74d799","entry":"PointNetFeatures","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b98d64954f74d799"}},{"code_sha256_prefix":"ae6834ddb339bc38","entry":"QSTN","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"ae6834ddb339bc38"}},{"code_sha256_prefix":"48d97aea48dac671","entry":"ThreeDmFVNet","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"48d97aea48dac671"}},{"code_sha256_prefix":"9144350149cc9475","entry":"get_3d_grid_gmm","repo":"Runsong123/AdaFit","repo_kind":"official","path":"models/AdaFit_multi_scale.py","file_url":"https://github.com/Runsong123/AdaFit/blob/HEAD/models/AdaFit_multi_scale.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9144350149cc9475"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}