Papers › AnomalyCLIP: Object-agnostic Prompt Learning for Zero-shot Anomaly Detection
AnomalyCLIP: Object-agnostic Prompt Learning for Zero-shot Anomaly Detection
Qihang Zhou, Guansong Pang, Yu Tian, Shibo He, Jiming Chen
Zero-shot anomaly detection (ZSAD) requires detection models trained using auxiliary data to detect anomalies without any training sample in a target dataset. It is a crucial task when training data is not accessible due to various concerns, eg, data privacy, yet it is challenging since the models need to generalize to anomalies across different domains where the appearance of foreground objects, abnormal regions, and background features, such as defects/tumors on different products/organs, can vary significantly. Recently large pre-trained vision-language models (VLMs), such as CLIP, have demonstrated strong zero-shot recognition ability in various vision tasks, including anomaly detection. However, their ZSAD performance is weak since the VLMs focus more on modeling the class semantics of the foreground objects rather than the abnormality/normality in the images. In this paper we introduce a novel approach, namely AnomalyCLIP, to adapt CLIP for accurate ZSAD across different domains. The key insight of AnomalyCLIP is to learn object-agnostic text prompts that capture generic normality and abnormality in an image regardless of its foreground objects. This allows our model to focus on the abnormal image regions rather than the object semantics, enabling generalized normality and abnormality recognition on diverse types of objects. Large-scale experiments on 17 real-world anomaly detection datasets show that AnomalyCLIP achieves superior zero-shot performance of detecting and segmenting anomalies in datasets of highly diverse class semantics from various defect inspection and medical imaging domains. Code will be made available at https://github.com/zqhang/AnomalyCLIP.
In Syntology Open this paper in Syntology's Atlas, the map of the papers in Syntology's graph and their citations.
For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="2310.18961")
Code
Syntology Ran 14 of 32 code samples harvested from 2 repositories linked to this paper; 18 have no recorded run. Of those that ran: 1 ran · honoured contract; 1 ran · violated contract; 4 ran · our draft was wrong; 1 ran · fixture could not drive it; 7 ran with no contract checked.
By repository: official repository: 18 samples from 1 repository, 12 ran; community (archive-listed): 14 samples from 1 repository, 2 ran. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.
Repository list and official/mentioned flags are the archive's, frozen 2025-07-28. Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.
Code Syntology ran Syntology
32 samples harvested; 14 ran; 1 honoured the contract we drafted; 18 have no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.
Licence: 0 of the 32 samples are pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.
Harvested from 2 repositories linked to this paper, official or community; each sample names its own and says which. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.
Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.
Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: 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. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.
98f385d847636a3e · report
178a0488f0c59db0 · report
bbbfccbf329e9fdd · report
01e8c2f30dcaa3d3 · report
d919ae32e5e4e616 · report
eb13a678b5dba664 · report
4b3a4d17e1df3140 · report
0c3f9d9b0ac9f33d · report
cc90ad1a3ffd0e88 · report
abedbe9b904a9780 · report
208456d9417303f4 · report
9542161e9640b858 · report
f8d43518b10ab859 · report
175f83b44a42759d · report
ed57101d91ad0e4e · report
2c38b8a1a6553df1 · report
45e1ef91f571e2f5 · report
d53108edea9d2b46 · report
f19962ebb134b3d7 · report
dcd422d66b0581d8 · report
f09367dd0e4c9c94 · report
e332828701fffe70 · report
e0b318791c717866 · report
e6a423edd53e011c · report
ddcbd45e940484ee · report
5c7cf820e99443ff · report
f34d8f34635af394 · report
8019976ff0ac258f · report
a1693b09a14a516f · report
db75b22fe2d18129 · report
fb651d0a97fd4d3f · report
2a377da4a76a2d44 · report
Tasks
Results from the paper archive 2025-07-28
| Task | Dataset | Model | Metric | Value | Rank at snapshot | Leaderboard | Report |
|---|---|---|---|---|---|---|---|
| Anomaly Detection | MVTec AD | AnomalyCLIP | Detection AUROC | 91.5 | #109 of 148 | Archive leaderboard | report |
| Anomaly Detection | MVTec AD | AnomalyCLIP | Segmentation AUPRO | 81.4 | #109 of 148 | Archive leaderboard | report |
| Anomaly Detection | MVTec AD | AnomalyCLIP | Segmentation AUROC | 91.1 | #109 of 148 | Archive leaderboard | report |
| Anomaly Detection | VisA | AnomalyCLIP | Detection AUROC | 82.1 | #39 of 50 | Archive leaderboard | report |
| Anomaly Detection | VisA | AnomalyCLIP | Segmentation AUPRO | 87.0 | #39 of 50 | Archive leaderboard | report |
| Anomaly Detection | VisA | AnomalyCLIP | Segmentation AUROC | 95.5 | #39 of 50 | Archive leaderboard | report |
Ranks are positions in the archive's leaderboards as they stood at the 2025-07-28 snapshot. Results published since then are not among these rows, so a rank here is not a current standing.
Methods
Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections