Spaces:
Running
Running
title: AdaCLIP -- Zero-shot Anomaly Detection | |
emoji: 🚀 | |
colorFrom: red | |
colorTo: purple | |
sdk: gradio | |
sdk_version: 4.39.0 | |
app_file: app.py | |
pinned: false | |
short_description: 'Detecting visual anomalies for novel categories! ' | |
# AdaCLIP (Detecting Anomalies for Novel Categories) | |
[]() | |
> [**ECCV 24**] [**AdaCLIP: Adapting CLIP with Hybrid Learnable Prompts for Zero-Shot Anomaly Detection**](). | |
> | |
> by [Yunkang Cao](https://caoyunkang.github.io/), [Jiangning Zhang](https://zhangzjn.github.io/), [Luca Frittoli](https://scholar.google.com/citations?user=cdML_XUAAAAJ), | |
> [Yuqi Cheng](https://scholar.google.com/citations?user=02BC-WgAAAAJ&hl=en), [Weiming Shen](https://scholar.google.com/citations?user=FuSHsx4AAAAJ&hl=en), [Giacomo Boracchi](https://boracchi.faculty.polimi.it/) | |
> | |
## Introduction | |
Zero-shot anomaly detection (ZSAD) targets the identification of anomalies within images from arbitrary novel categories. | |
This study introduces AdaCLIP for the ZSAD task, leveraging a pre-trained vision-language model (VLM), CLIP. | |
AdaCLIP incorporates learnable prompts into CLIP and optimizes them through training on auxiliary annotated anomaly detection data. | |
Two types of learnable prompts are proposed: \textit{static} and \textit{dynamic}. Static prompts are shared across all images, serving to preliminarily adapt CLIP for ZSAD. | |
In contrast, dynamic prompts are generated for each test image, providing CLIP with dynamic adaptation capabilities. | |
The combination of static and dynamic prompts is referred to as hybrid prompts, and yields enhanced ZSAD performance. | |
Extensive experiments conducted across 14 real-world anomaly detection datasets from industrial and medical domains indicate that AdaCLIP outperforms other ZSAD methods and can generalize better to different categories and even domains. | |
Finally, our analysis highlights the importance of diverse auxiliary data and optimized prompts for enhanced generalization capacity. | |
## Overview of AdaCLIP | |
 | |
## 🛠️ Getting Started | |
### Installation | |
To set up the AdaCLIP environment, follow one of the methods below: | |
- Clone this repo: | |
```shell | |
git clone https://github.com/caoyunkang/AdaCLIP.git && cd AdaCLIP | |
``` | |
- You can use our provided installation script for an automated setup:: | |
```shell | |
sh install.sh | |
``` | |
- If you prefer to construct the experimental environment manually, follow these steps: | |
```shell | |
conda create -n AdaCLIP python=3.9.5 -y | |
conda activate AdaCLIP | |
pip install torch==1.10.1+cu111 torchvision==0.11.2+cu111 torchaudio==0.10.1 -f https://download.pytorch.org/whl/cu111/torch_stable.html | |
pip install tqdm tensorboard setuptools==58.0.4 opencv-python scikit-image scikit-learn matplotlib seaborn ftfy regex numpy==1.26.4 | |
pip install gradio # Optional, for app | |
``` | |
- Remember to update the dataset root in config.py according to your preference: | |
```python | |
DATA_ROOT = '../datasets' # Original setting | |
``` | |
### Dataset Preparation | |
Please download our processed visual anomaly detection datasets to your `DATA_ROOT` as needed. | |
#### Industrial Visual Anomaly Detection Datasets | |
Note: some links are still in processing... | |
| Dataset | Google Drive | Baidu Drive | Task | |
|------------|------------------|------------------| ------------------| | |
| MVTec AD | [Google Drive](链接) | [Baidu Drive](链接) | Anomaly Detection & Localization | | |
| VisA | [Google Drive](链接) | [Baidu Drive](链接) | Anomaly Detection & Localization | | |
| MPDD | [Google Drive](链接) | [Baidu Drive](链接) | Anomaly Detection & Localization | | |
| BTAD | [Google Drive](链接) | [Baidu Drive](链接) | Anomaly Detection & Localization | | |
| KSDD | [Google Drive](链接) | [Baidu Drive](链接) | Anomaly Detection & Localization | | |
| DAGM | [Google Drive](链接) | [Baidu Drive](链接) | Anomaly Detection & Localization | | |
| DTD-Synthetic | [Google Drive](链接) | [Baidu Drive](链接) | Anomaly Detection & Localization | | |
#### Medical Visual Anomaly Detection Datasets | |
| Dataset | Google Drive | Baidu Drive | Task | |
|------------|------------------|------------------| ------------------| | |
| HeadCT | [Google Drive](链接) | [Baidu Drive](链接) | Anomaly Detection | | |
| BrainMRI | [Google Drive](链接) | [Baidu Drive](链接) | Anomaly Detection | | |
| Br35H | [Google Drive](链接) | [Baidu Drive](链接) | Anomaly Detection | | |
| ISIC | [Google Drive](链接) | [Baidu Drive](链接) | Anomaly Localization | | |
| ColonDB | [Google Drive](链接) | [Baidu Drive](链接) | Anomaly Localization | | |
| ClinicDB | [Google Drive](链接) | [Baidu Drive](链接) | Anomaly Localization | | |
| TN3K | [Google Drive](链接) | [Baidu Drive](链接) | Anomaly Localization | | |
#### Custom Datasets | |
To use your custom dataset, follow these steps: | |
1. Refer to the instructions in `./data_preprocess` to generate the JSON file for your dataset. | |
2. Use `./dataset/base_dataset.py` to construct your own dataset. | |
### Weight Preparation | |
We offer various pre-trained weights on different auxiliary datasets. | |
Please download the pre-trained weights in `./weights`. | |
| Pre-trained Datasets | Google Drive | Baidu Drive | |
|------------|------------------|------------------| | |
| MVTec AD & ClinicDB | [Google Drive](https://drive.google.com/file/d/1xVXANHGuJBRx59rqPRir7iqbkYzq45W0/view?usp=drive_link) | [Baidu Drive](链接) | | |
| VisA & ColonDB | [Google Drive](https://drive.google.com/file/d/1QGmPB0ByPZQ7FucvGODMSz7r5Ke5wx9W/view?usp=drive_link) | [Baidu Drive](链接) | | |
| All Datasets Mentioned Above | [Google Drive](https://drive.google.com/file/d/1Cgkfx3GAaSYnXPLolx-P7pFqYV0IVzZF/view?usp=drive_link) | [Baidu Drive](链接) | | |
### Train | |
By default, we use MVTec AD & ClinicDB for training and VisA for validation: | |
```shell | |
CUDA_VISIBLE_DEVICES=0 python train.py --save_fig True --training_data mvtec colondb --testing_data visa | |
``` | |
Alternatively, for evaluation on MVTec AD & ClinicDB, we use VisA & ColonDB for training and MVTec AD for validation. | |
```shell | |
CUDA_VISIBLE_DEVICES=0 python train.py --save_fig True --training_data visa clinicdb --testing_data mvtec | |
``` | |
Since we have utilized half-precision (FP16) for training, the training process can occasionally be unstable. | |
It is recommended to run the training process multiple times and choose the best model based on performance | |
on the validation set as the final model. | |
To construct a robust ZSAD model for demonstration, we also train our AdaCLIP on all AD datasets mentioned above: | |
```shell | |
CUDA_VISIBLE_DEVICES=0 python train.py --save_fig True \ | |
--training_data \ | |
br35h brain_mri btad clinicdb colondb \ | |
dagm dtd headct isic mpdd mvtec sdd tn3k visa \ | |
--testing_data mvtec | |
``` | |
### Test | |
Manually select the best models from the validation set and place them in the `weights/` directory. Then, run the following testing script: | |
```shell | |
sh test.sh | |
``` | |
If you want to test on a single image, you can refer to `test_single_image.sh`: | |
```shell | |
CUDA_VISIBLE_DEVICES=0 python test.py --testing_model image --ckt_path weights/pretrained_all.pth --save_fig True \ | |
--image_path asset/img.png --class_name candle --save_name test.png | |
``` | |
## Main Results | |
Due to differences in versions utilized, the reported performance may vary slightly compared to the detection performance | |
with the provided pre-trained weights. Some categories may show higher performance while others may show lower. | |
 | |
 | |
 | |
### :page_facing_up: Demo App | |
To run the demo application, use the following command: | |
```bash | |
python app.py | |
``` | |
 | |
## 💘 Acknowledgements | |
Our work is largely inspired by the following projects. Thanks for their admiring contribution. | |
- [VAND-APRIL-GAN](https://github.com/ByChelsea/VAND-APRIL-GAN) | |
- [AnomalyCLIP](https://github.com/zqhang/AnomalyCLIP) | |
- [SAA](https://github.com/caoyunkang/Segment-Any-Anomaly) | |
## Stargazers over time | |
[](https://starchart.cc/caoyunkang/AdaCLIP) | |
## Citation | |
If you find this project helpful for your research, please consider citing the following BibTeX entry. | |
```BibTex | |
``` |