{"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/self-supervised-feature-adaptation-for-3d","title":"Self-supervised Feature Adaptation for 3D Industrial Anomaly Detection","arxiv_id":"2401.03145","date":"2024-01-06","proceeding":null,"authors":["Yuanpeng Tu","Boshen Zhang","Liang Liu","Yuxi Li","Xuhai Chen","Jiangning Zhang","Yabiao Wang","Chengjie Wang","Cai Rong Zhao"],"abstract":"Industrial anomaly detection is generally addressed as an unsupervised task that aims at locating defects with only normal training samples. Recently, numerous 2D anomaly detection methods have been proposed and have achieved promising results, however, using only the 2D RGB data as input is not sufficient to identify imperceptible geometric surface anomalies. Hence, in this work, we focus on multi-modal anomaly detection. Specifically, we investigate early multi-modal approaches that attempted to utilize models pre-trained on large-scale visual datasets, i.e., ImageNet, to construct feature databases. And we empirically find that directly using these pre-trained models is not optimal, it can either fail to detect subtle defects or mistake abnormal features as normal ones. This may be attributed to the domain gap between target industrial data and source data.Towards this problem, we propose a Local-to-global Self-supervised Feature Adaptation (LSFA) method to finetune the adaptors and learn task-oriented representation toward anomaly detection.Both intra-modal adaptation and cross-modal alignment are optimized from a local-to-global perspective in LSFA to ensure the representation quality and consistency in the inference stage.Extensive experiments demonstrate that our method not only brings a significant performance boost to feature embedding based approaches, but also outperforms previous State-of-The-Art (SoTA) methods prominently on both MVTec-3D AD and Eyecandies datasets, e.g., LSFA achieves 97.1% I-AUROC on MVTec-3D, surpass previous SoTA by +3.4%.","url_abs":"https://arxiv.org/abs/2401.03145v2","url_pdf":"https://arxiv.org/pdf/2401.03145v2.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":[],"tasks":[{"task_slug":"anomaly-detection","task_name":"Anomaly Detection"},{"task_slug":"cross-modal-alignment","task_name":"cross-modal alignment"}],"methods":[{"method_slug":"focus","method_name":"Focus"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2401.03145","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2401.03145"}},"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":"deterministic:regex_extraction","url":"https://github.com/yuanpengtu/LSFA","reach":{"status":"ok"}}],"summary":{"ran":6,"ran_fixture":2,"ran_honours":1,"unverified":2},"by_repo_kind":{"found_in_text":{"samples":11,"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":11,"samples":[{"code_sha256_prefix":"c6e7c3451c85404f","entry":"AutoContrast","repo":"yuanpengtu/LSFA","repo_kind":"found_in_text","path":"Adaptation/randaugment.py","file_url":"https://github.com/yuanpengtu/LSFA/blob/HEAD/Adaptation/randaugment.py","link_basis":"harvester_set","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":"c6e7c3451c85404f"}},{"code_sha256_prefix":"0d1a8d6ce2015fc7","entry":"Brightness","repo":"yuanpengtu/LSFA","repo_kind":"found_in_text","path":"Adaptation/randaugment.py","file_url":"https://github.com/yuanpengtu/LSFA/blob/HEAD/Adaptation/randaugment.py","link_basis":"harvester_set","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":"0d1a8d6ce2015fc7"}},{"code_sha256_prefix":"32cb3f5760fa593e","entry":"Color","repo":"yuanpengtu/LSFA","repo_kind":"found_in_text","path":"Adaptation/randaugment.py","file_url":"https://github.com/yuanpengtu/LSFA/blob/HEAD/Adaptation/randaugment.py","link_basis":"harvester_set","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":"32cb3f5760fa593e"}},{"code_sha256_prefix":"41eb6f5057605491","entry":"euclidean_dist","repo":"yuanpengtu/LSFA","repo_kind":"found_in_text","path":"Adaptation/fusion_pretrain.py","file_url":"https://github.com/yuanpengtu/LSFA/blob/HEAD/Adaptation/fusion_pretrain.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"41eb6f5057605491"}},{"code_sha256_prefix":"064e83a9cb5bf530","entry":"eye_rank","repo":"yuanpengtu/LSFA","repo_kind":"found_in_text","path":"Adaptation/NTXentLoss.py","file_url":"https://github.com/yuanpengtu/LSFA/blob/HEAD/Adaptation/NTXentLoss.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":"064e83a9cb5bf530"}},{"code_sha256_prefix":"82f7e0d7e4d75318","entry":"get_all_feature","repo":"yuanpengtu/LSFA","repo_kind":"found_in_text","path":"Adaptation/fusion_pretrain.py","file_url":"https://github.com/yuanpengtu/LSFA/blob/HEAD/Adaptation/fusion_pretrain.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":"82f7e0d7e4d75318"}},{"code_sha256_prefix":"3e30d88eaef01190","entry":"off_diagonal","repo":"yuanpengtu/LSFA","repo_kind":"found_in_text","path":"Adaptation/fusion_pretrain.py","file_url":"https://github.com/yuanpengtu/LSFA/blob/HEAD/Adaptation/fusion_pretrain.py","link_basis":"harvester_set","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"3e30d88eaef01190"}},{"code_sha256_prefix":"ec413739d406e611","entry":"pc_normalize","repo":"yuanpengtu/LSFA","repo_kind":"found_in_text","path":"Adaptation/models/pointnet2_utils.py","file_url":"https://github.com/yuanpengtu/LSFA/blob/HEAD/Adaptation/models/pointnet2_utils.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"ec413739d406e611"}},{"code_sha256_prefix":"3bfe172e686075cd","entry":"square_distance","repo":"yuanpengtu/LSFA","repo_kind":"found_in_text","path":"Adaptation/models/pointnet2_utils.py","file_url":"https://github.com/yuanpengtu/LSFA/blob/HEAD/Adaptation/models/pointnet2_utils.py","link_basis":"harvester_set","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"3bfe172e686075cd"}},{"code_sha256_prefix":"d42584b747a12bb8","entry":"gather","repo":"yuanpengtu/LSFA","repo_kind":"found_in_text","path":"Adaptation/NTXentLoss.py","file_url":"https://github.com/yuanpengtu/LSFA/blob/HEAD/Adaptation/NTXentLoss.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":"d42584b747a12bb8"}},{"code_sha256_prefix":"b1227ddb721e2999","entry":"timeit","repo":"yuanpengtu/LSFA","repo_kind":"found_in_text","path":"Adaptation/models/pointnet2_utils.py","file_url":"https://github.com/yuanpengtu/LSFA/blob/HEAD/Adaptation/models/pointnet2_utils.py","link_basis":"harvester_set","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":"b1227ddb721e2999"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}