{"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-2510-00495","title":"Normal-Abnormal Guided Generalist Anomaly Detection","arxiv_id":"2510.00495","date":"2025-10-01","proceeding":"NeurIPS","authors":["Yuexin Wang","Xiaolei Wang","Yizheng Gong","Jimin Xiao"],"abstract":"Generalist Anomaly Detection (GAD) aims to train a unified model on an original domain that can detect anomalies in new target domains. Previous GAD methods primarily use only normal samples as references, overlooking the valuable information contained in anomalous samples that are often available in real-world scenarios. To address this limitation, we propose a more practical approach: normal-abnormal-guided generalist anomaly detection, which leverages both normal and anomalous samples as references to guide anomaly detection across diverse domains. We introduce the Normal-Abnormal Generalist Learning (NAGL) framework, consisting of two key components: Residual Mining (RM) and Anomaly Feature Learning (AFL). RM extracts abnormal patterns from normal-abnormal reference residuals to establish transferable anomaly representations, while AFL adaptively learns anomaly features in query images through residual mapping to identify instance-aware anomalies. Our approach effectively utilizes both normal and anomalous references for more accurate and efficient cross-domain anomaly detection. Extensive experiments across multiple benchmarks demonstrate that our method significantly outperforms existing GAD approaches. This work represents the first to adopt a mixture of normal and abnormal samples as references in generalist anomaly detection. The code and datasets are available at https://github.com/JasonKyng/NAGL.","url_abs":"https://arxiv.org/abs/2510.00495","url_pdf":"https://arxiv.org/pdf/2510.00495","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":{"atlas_url":"https://app.syntology.ai/?focus=2510.00495","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2510.00495"}},"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":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/JasonKyng/NAGL","reach":null}],"summary":{"ran":6,"unverified":1},"by_repo_kind":{"found_in_text":{"samples":7,"ran":6,"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":"1f1232cc8350d48f","entry":"BinaryDiceLoss","repo":"JasonKyng/NAGL","repo_kind":"found_in_text","path":"models/model.py","file_url":"https://github.com/JasonKyng/NAGL/blob/HEAD/models/model.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1f1232cc8350d48f"}},{"code_sha256_prefix":"b56ef1055cbbd597","entry":"CrossAttentionLayer","repo":"JasonKyng/NAGL","repo_kind":"found_in_text","path":"models/model.py","file_url":"https://github.com/JasonKyng/NAGL/blob/HEAD/models/model.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b56ef1055cbbd597"}},{"code_sha256_prefix":"72a5bef735c74fae","entry":"DiceLoss","repo":"JasonKyng/NAGL","repo_kind":"found_in_text","path":"models/model.py","file_url":"https://github.com/JasonKyng/NAGL/blob/HEAD/models/model.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"72a5bef735c74fae"}},{"code_sha256_prefix":"3969c47a428beeeb","entry":"FocalLoss","repo":"JasonKyng/NAGL","repo_kind":"found_in_text","path":"models/model.py","file_url":"https://github.com/JasonKyng/NAGL/blob/HEAD/models/model.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3969c47a428beeeb"}},{"code_sha256_prefix":"7f02c425d460a256","entry":"PositionEmbeddingSine","repo":"JasonKyng/NAGL","repo_kind":"found_in_text","path":"models/model.py","file_url":"https://github.com/JasonKyng/NAGL/blob/HEAD/models/model.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7f02c425d460a256"}},{"code_sha256_prefix":"664e5431c96995da","entry":"SelfAttentionLayer","repo":"JasonKyng/NAGL","repo_kind":"found_in_text","path":"models/model.py","file_url":"https://github.com/JasonKyng/NAGL/blob/HEAD/models/model.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"664e5431c96995da"}},{"code_sha256_prefix":"23f2d5ff92e8cd05","entry":"NAGL","repo":"JasonKyng/NAGL","repo_kind":"found_in_text","path":"models/model.py","file_url":"https://github.com/JasonKyng/NAGL/blob/HEAD/models/model.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":"23f2d5ff92e8cd05"}}]},"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_api"},"syntology_extracted_results":null}