{"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/arxiv-2609-14722","title":"PC$^2$-AD: Point Cloud Upsampling to Safeguard 3D Anomaly Detection with Resolution-constrained Edge Devices","arxiv_id":"2609.14722","date":"2026-09-13","proceeding":null,"authors":["Yutong Gu","Yingxi Xie","Kejin Huang","Jian Ning","Hanzhe Liang","Linlin Shen","Jinbao Wang"],"abstract":"Low-cost and low-resolution sensors used in edge deployments can produce test point clouds that are substantially sparser than the normal training data. This train-test sampling-resolution gap changes the local geometry available to a 3D anomaly detector. We propose PC$^2$-AD, a point cloud upsampling framework that compensates sparse test inputs before downstream detection. Target Domain Candidate Generation (TCG) adapts a pretrained upsampler to normal training geometry and generates a dense candidate pool. Geometry-Aware Candidate Filtering (GACF) selects candidates according to geometric spacing and spatial coverage. Normality-Preserving Point Compensation (NPPC) refines the selection by comparing candidate normality scores with those of their input anchors. The selected points are combined with the unchanged input points and processed by the existing detector. Experiments with six detectors on two Anomaly-ShapeNet settings and Real3D-AD show improvements in the mean of object-level and point-level AUROC for all six detectors in each Anomaly-ShapeNet setting and four on Real3D-AD. These results support point cloud compensation as an input-level approach to improving 3D anomaly detection under low-resolution sensing conditions. Code is publicly available at https://github.com/gyutong406-commits/PC2-AD.","url_abs":"https://arxiv.org/abs/2609.14722","url_pdf":"https://arxiv.org/pdf/2609.14722","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2609.14722","atlas_url":"https://app.syntology.ai/?focus=2609.14722","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2609.14722"}},"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":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/gyutong406-commits/PC2-AD","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"unverified":30},"by_repo_kind":{"found_in_text":{"samples":30,"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":"011a5646655b348d","entry":"align_gt_to_test_order","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/common/gt_alignment.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/common/gt_alignment.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"011a5646655b348d"}},{"code_sha256_prefix":"135ced43d7159bd2","entry":"anomaly_shapenet_resolution","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/common/plan_schema.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/common/plan_schema.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"135ced43d7159bd2"}},{"code_sha256_prefix":"b3ac13ee3f64696c","entry":"audit_plan","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/anomaly_shapenet/audit.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/anomaly_shapenet/audit.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b3ac13ee3f64696c"}},{"code_sha256_prefix":"3f318d1063f508bf","entry":"audit_sample","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/common/audit_core.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/common/audit_core.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3f318d1063f508bf"}},{"code_sha256_prefix":"8dc4d570e3d816db","entry":"augment_batch","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/train/contrastive_normality/contrastive_core.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/train/contrastive_normality/contrastive_core.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"8dc4d570e3d816db"}},{"code_sha256_prefix":"9ec207cf13c2799c","entry":"build_aligned_gt","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/common/gt_alignment.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/common/gt_alignment.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"9ec207cf13c2799c"}},{"code_sha256_prefix":"5021029aef1d8f78","entry":"build_morton_blocks","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/common/fps_sampling.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/common/fps_sampling.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"5021029aef1d8f78"}},{"code_sha256_prefix":"baf2acbb57d1fef3","entry":"build_plan_rows","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/anomaly_shapenet/build_plan.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/anomaly_shapenet/build_plan.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"baf2acbb57d1fef3"}},{"code_sha256_prefix":"46807b270ff8372c","entry":"build_state_arrays","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/common/output_writer.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/common/output_writer.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"46807b270ff8372c"}},{"code_sha256_prefix":"a62fb7b850f2bdd8","entry":"check_equal","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"environments/gradpu118fix/verify.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/environments/gradpu118fix/verify.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a62fb7b850f2bdd8"}},{"code_sha256_prefix":"25924b38d2bca762","entry":"contains_forbidden_public_token","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/common/plan_schema.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/common/plan_schema.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"25924b38d2bca762"}},{"code_sha256_prefix":"cb133a02450c2bf7","entry":"contrastive_loss_and_metrics","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/train/contrastive_normality/contrastive_core.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/train/contrastive_normality/contrastive_core.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"cb133a02450c2bf7"}},{"code_sha256_prefix":"809127532d86b9a4","entry":"decode_h5_string","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/train/contrastive_normality/contrastive_core.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/train/contrastive_normality/contrastive_core.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"809127532d86b9a4"}},{"code_sha256_prefix":"dd8f4aad21ca37dc","entry":"is_normal_sample","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/anomaly_shapenet/build_plan.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/anomaly_shapenet/build_plan.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"dd8f4aad21ca37dc"}},{"code_sha256_prefix":"bdd6242c037f6238","entry":"load_config","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/normality_training/build_normality_data.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/normality_training/build_normality_data.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"bdd6242c037f6238"}},{"code_sha256_prefix":"33ffd4e96640bc66","entry":"load_gt_txt","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/common/gt_alignment.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/common/gt_alignment.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"33ffd4e96640bc66"}},{"code_sha256_prefix":"795221c9231146f1","entry":"load_metadata","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/common/audit_core.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/common/audit_core.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"795221c9231146f1"}},{"code_sha256_prefix":"0476e3fd59c102cb","entry":"morton_codes","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/common/fps_sampling.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/common/fps_sampling.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"0476e3fd59c102cb"}},{"code_sha256_prefix":"349f6f1344150971","entry":"output_paths","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/anomaly_shapenet/build_plan.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/anomaly_shapenet/build_plan.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"349f6f1344150971"}},{"code_sha256_prefix":"3b58384c53c034e6","entry":"parse_args","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/normality_training/build_normality_data.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/normality_training/build_normality_data.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3b58384c53c034e6"}},{"code_sha256_prefix":"cba24a83b92c41f9","entry":"parse_config_gpu_ids","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/normality_training/build_normality_data.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/normality_training/build_normality_data.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"cba24a83b92c41f9"}},{"code_sha256_prefix":"b8d7a611007ed4b3","entry":"prepare_row","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/anomaly_shapenet/prepare.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/anomaly_shapenet/prepare.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b8d7a611007ed4b3"}},{"code_sha256_prefix":"c8a6713868d17edc","entry":"read_pcd_point_count","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/common/pcd_io.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/common/pcd_io.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"c8a6713868d17edc"}},{"code_sha256_prefix":"7f838db7f406a43e","entry":"read_pcd_points","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/common/pcd_io.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/common/pcd_io.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"7f838db7f406a43e"}},{"code_sha256_prefix":"11363b99ceae2d1d","entry":"real3d_ad_resolution","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/common/plan_schema.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/common/plan_schema.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"11363b99ceae2d1d"}},{"code_sha256_prefix":"89da1d0a91bf0395","entry":"row_output_paths","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/anomaly_shapenet/prepare.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/anomaly_shapenet/prepare.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"89da1d0a91bf0395"}},{"code_sha256_prefix":"471844260d549674","entry":"run_plan","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/anomaly_shapenet/prepare.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/anomaly_shapenet/prepare.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"471844260d549674"}},{"code_sha256_prefix":"3ce2f4dbf0c5aa8f","entry":"split_by_3","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/common/fps_sampling.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/common/fps_sampling.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"3ce2f4dbf0c5aa8f"}},{"code_sha256_prefix":"11dd43439e267c4b","entry":"validate_xyz","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"approach/data_preparation/common/pcd_io.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/approach/data_preparation/common/pcd_io.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"11dd43439e267c4b"}},{"code_sha256_prefix":"91768e9a14df8e38","entry":"version_of","repo":"gyutong406-commits/PC2-AD","repo_kind":"found_in_text","path":"environments/gradpu118fix/verify.py","file_url":"https://github.com/gyutong406-commits/PC2-AD/blob/HEAD/environments/gradpu118fix/verify.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"91768e9a14df8e38"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.CV","source":"arxiv_backlog_21d_20260915.json"},"syntology_extracted_results":{"kind":"leaderboard_placements","source":"Syntology's leaderboard-shaped extractor over the paper's own arXiv-HTML tables: a model pointed at a cell, the number was read from that cell and checked against the board's metric, dataset, split and scale, and an independent check accepted the entry; not reviewed by the paper's authors or the archive's editors","extractor_model":"global.anthropic.claude-sonnet-4-5-20250929-v1:0","verifier_model":null,"prompt_sha":"fa63d4bb9d755694","coverage":{"sentence":"Syntology has checked 6,885 of the 9,623 papers on this site that are newer than the archive; results from the others appear after they are checked.","papers_newer_than_archive":9623,"papers_checked":6885},"entries":[],"not_placed":{"boards":0,"rejected_by_independent_check":0,"refused_by_a_rule":0,"check_did_not_answer":0,"proposed_without_a_cell":0,"declined_by_site":0}}}