🌐 项目页面 • 🤗 在线演示 • 📃 论文 • 🤖 模型 • 📹 视频
Zhaopeng Gu, Bingke Zhu, Guibo Zhu, Yingying Chen, Ming Tang, Jinqiao Wang
AnomalyGPT 是首个基于大型视觉语言模型(LVLM)的工业异常检测(IAD)方法,无需手动设定阈值即可检测工业图像中的异常。现有的 IAD 方法只能提供异常分数,需要手动设定阈值,而现有的 LVLM 无法检测图像中的异常。AnomalyGPT 不仅能指示异常的存在和位置,还能提供关于图像的描述信息。

我们利用预训练的图像编码器和大型语言模型(LLM),通过模拟异常数据将 IAD 图像与其对应的文本描述对齐。我们采用轻量级的、基于视觉-文本特征匹配的图像解码器来获取定位结果,并设计了一个提示学习器,为 LLM 提供细粒度的语义信息,并使用提示嵌入对 LVLM 进行微调。我们的方法还能在仅提供少量正常样本的情况下,检测未见过的物品的异常。
克隆本仓库到本地:
git clone https://github.com/CASIA-IVA-Lab/AnomalyGPT.git
安装所需的依赖包:
pip install -r requirements.txt
你可以通过此链接下载预训练的 ImageBind 模型。下载完成后,将文件 (imagebind_huge.pth) 放入 ./pretrained_ckpt/imagebind_ckpt/ 目录下。
要准备预训练的 Vicuna 模型,请按照此处的说明进行操作。
我们使用 PandaGPT 的预训练参数来初始化我们的模型。你可以从下方表格中获取使用不同策略训练的 PandaGPT 权重。由于计算资源限制,我们的实验和在线演示均使用 Vicuna-7B 和 openllmplayground/pandagpt_7b_max_len_1024。切换到 Vicuna-13B 预计可获得更好的结果。
| 基础语言模型 | 最大序列长度 | Huggingface Delta 权重地址 |
|---|---|---|
| Vicuna-7B (version 0) | 512 | openllmplayground/pandagpt_7b_max_len_512 |
| Vicuna-7B (version 0) | 1024 | openllmplayground/pandagpt_7b_max_len_1024 |
| Vicuna-13B (version 0) | 256 | openllmplayground/pandagpt_13b_max_len_256 |
| Vicuna-13B (version 0) | 400 | openllmplayground/pandagpt_13b_max_len_400 |
请将下载的 7B/13B Delta 权重文件 (pytorch_model.pt) 放入 ./pretrained_ckpt/pandagpt_ckpt/7b/ 或 ./pretrained_ckpt/pandagpt_ckpt/13b/ 目录。
之后,请从下方表格下载 AnomalyGPT 权重。
| 设置与数据集 | 权重地址 |
|---|---|
| MVTec-AD 上的无监督训练 | AnomalyGPT/train_mvtec |
| VisA 上的无监督训练 | AnomalyGPT/train_visa |
| MVTec-AD, VisA, MVTec-LOCO-AD 和 CrackForest 上的有监督训练 | AnomalyGPT/train_supervised |
下载后,将 AnomalyGPT 权重放入 ./code/ckpt/ 目录。
在我们的在线演示中,我们使用有监督训练的模型作为默认模型,以获得更好的用户体验。你也可以在本地尝试其他权重。
完成以上步骤后,你可以在本地运行演示:
cd ./code/
python web_demo.py
前置条件: 在训练模型之前,请确保已正确安装环境,并已下载 ImageBind、Vicuna 和 PandaGPT 的检查点。
你可以从此链接下载 MVTec-AD 数据集,从此链接下载 VisA 数据集。你也可以从此处下载 PandaGPT 的预训练数据。下载后,将数据放入 ./data/ 目录。
./data/ 目录的结构应如下所示:
data
|---pandagpt4_visual_instruction_data.json
|---images
|-----|-- ...
|---mvtec_anomaly_detection
|-----|-- bottle
|-----|-----|----- ground_truth
|-----|-----|----- test
|-----|-----|----- train
|-----|-- capsule
|-----|-- ...
|----VisA
|-----|-- split_csv
|-----|-----|--- 1cls.csv
|-----|-----|--- ...
|-----|-- candle
|-----|-----|--- Data
|-----|-----|-----|----- Images
|-----|-----|-----|--------|------ Anomaly
|-----|-----|-----|--------|------ Normal
|-----|-----|-----|----- Masks
|-----|-----|-----|--------|------ Anomaly
|-----|-----|--- image_anno.csv
|-----|-- capsules
|-----|-----|----- ...
下表列出了我们实验中使用的训练超参数。这些超参数是根据我们的计算资源(即 2 块 RTX3090 GPU)限制选择的。
| 基础语言模型 | 训练轮数 | 批次大小 | 学习率 | 最大序列长度 |
|---|---|---|---|---|
| Vicuna-7B | 50 | 16 | 1e-3 | 1024 |
要在 MVTec-AD 数据集上训练 AnomalyGPT,请运行以下命令:
cd ./code
bash ./scripts/train_mvtec.sh
训练脚本的关键参数如下:
* --data_path: JSON 文件 pandagpt4_visual_instruction_data.json 的数据路径。
* --image_root_path: PandaGPT 训练图像的根路径。
* --imagebind_ckpt_path: ImageBind 检查点的路径。
* --vicuna_ckpt_path: 保存预训练 Vicuna 检查点的目录。
* --max_tgt_len: 训练实例的最大序列长度。
* --save_path: 保存训练好的 Delta 权重的目录。该目录会自动创建。
* --log_path: 保存日志的目录。该目录会自动创建。
请注意,训练轮数可在 ./code/config/openllama_peft.yaml 文件的 epochs 参数中设置,学习率可在 ./code/dsconfig/openllama_peft_stage_1.json 文件中设置。







AnomalyGPT 采用 CC BY-NC-SA 4.0 许可协议。
如果 AnomalyGPT 对你的研究或应用有帮助,请使用以下 BibTeX 进行引用:
@article{gu2023anomalyagpt,
title={AnomalyGPT: Detecting Industrial Anomalies using Large Vision-Language Models},
author={Gu, Zhaopeng and Zhu, Bingke and Zhu, Guibo and Chen, Yingying and Tang, Ming and Wang, Jinqiao},
journal={arXiv preprint arXiv:2308.15366},
year={2023}
}
我们借鉴了 PandaGPT 的部分代码和预训练权重。感谢他们的出色工作!