文章目录
前言
自己在本地部署了AnomalyGPT,测试了demo和训练自己数据集的train_mvtec,在这里分享我的部署过程和遇到的错误及解决办法。
AnomalyGPT 是首个基于大型视觉-语言模型(LVLM)的工业异常检测(IAD)方法,能够在不需要手动设定阈值的情况下检测工业图像中的异常。现有的 IAD 方法只能提供异常分数,并且需要手动设置阈值,而现有的 LVLM 无法检测图像中的异常。AnomalyGPT 不仅能够指示异常的存在与位置,还能提供有关图像的信息。
GitHub地址:https://github.com/CASIA-IVA-Lab/AnomalyGPT?tab=readme-ov-file#train_anomalygpt
我的环境:
CUDA 12.4
Ubuntu 22.04 LTS
24GB *4
跑demo只需要一张卡,具体需要多大没有测过。要保证自己一张卡的容量,demo没办法多GPU运行。要实现多GPU需要改代码。 训练自己的数据集要加上pandaGPT数据,一张24GB卡不够用。
参考
(WIN10版)工业缺陷检测——Windows 10本地部署AnomalyGPT工业缺陷检测大模型https://blog.youkuaiyun.com/matt45m/article/details/142565906
(CPU版)工业异常检测AnomalyGPT-Demo试跑https://blog.youkuaiyun.com/lijjianqing/article/details/135408715
配置流程
一、环境准备
源码下载
git clone https://github.com/CASIA-IVA-Lab/AnomalyGPT.git
创建环境
conda create -n agpt python=3.10
conda activate agpt
安装依赖
重要:这里要安装与自己本机电脑CUDA适配的torch,跑demo没关系, 如果训练自己的数据集一定要选择与本机对应的CUDA版本。
我是CUDA12.4、python 3.10,这里选择与其对应的torch,torchvision,torchaudio版本。建议先下载好安装包在本地pip install 安装包。
安装教程参考:保姆级下载安装GPU(CUDA)版本PyTorch
https://blog.youkuaiyun.com/Luobinhai/article/details/140216028?spm=1001.2014.3001.5506
我安装的对应版本:
pytorch == 2.5.0
torchvision == 0.20.0
torchaudio == 2.5.0
打开AnomalyGPT/路径下的requirements.txt
注释掉torch,torchaudio,torchvision
在/AnomalyGPT环境下运行requirements.txt
pip install -r requirements.txt
二、Vicuna 和LLaMA模型下载合并
这里分享两种方法,一是直接用合并好的模型。二是按照官方教程合并。
1. 直接用合并好的模型
选择这一步可以跳过合并过程,进行到下一环节。
但我看issues中一个问答里作者说 Vicuna 要 v0 版本,
“请确认一下我们使用的 Vicuna 应该是 v0 版本的,v1 版本的 Vicuna 修改了数据格式,可能会有问题。”
就我本人使用体验来看,没有遇到乱回答的情况。
在AnomalyGPT目录下创建路径:
pretrained_ckpt/vicuna_ckpt/7b_v0
vicuna v1 和LLaMA 合并好的模型地址:
https://huggingface.co/lmsys/vicuna-7b-v1.1
将这几个文件放到刚刚创建的7b_v0目录下
2. LLaMA的模型与Vicuna Delta模型合并
下载LLaMA 7B模型
这里完全参考链接里作者的内容:
https://blog.youkuaiyun.com/matt45m/article/details/142565906
作者把模型转到百度网盘了,比较方便。直接按照TA的教程来转换成Huggingface格式,我用代码转换的。文件创建格式也是按照作者的来,即AnomalyGPT/LLaMA/7B。
这里我把模型转到百度网盘了,通过网盘分享的文件:LLaMA
链接: https://pan.baidu.com/s/1syklVFou4r252PxcCaZY7w 提取码: 5ffx 。只下载7B和tokenizer.model,然后把model放在7B文件夹。…
按照以上教程转换后在LLaMa下会多出一个7Bhuggingface的目录,目录文件结构如下:
下载Vicuna Delta权重
地址: https://huggingface.co/lmsys/vicuna-7b-delta-v0/tree/main
下载内容到LLaMA/vicuna-7b-v0-delta
合并LLaMA和Vicuna Delta
#安装fschat
pip install fschat
cd AnomalyGPT
python -m fastchat.model.apply_delta --base LLaMA/7Bhuggingface --target pretrained_ckpt/vicuna_ckpt/7b_v0 --delta LLaMA/vicuna-7b-v0-delta
合并可能会遇到的问题:delta和basemodel 张量的尺寸不匹配 32000 32001
Traceback (most recent call last):
...
RuntimeError: The size of tensor a (32000) must match the size of tensor b (32001) at non-singleton dimension 0
在AnomalyGPT下运行以下代码修改张量尺寸
from transformers import AutoModelForCausalLM
# 加载基础模型
base_model_path = "LLaMA/7Bhuggingface"
base_model = AutoModelForCausalLM.from_pretrained(base_model_path)
# 扩展基础模型的词表
new_vocab_size = 32001 # 增量模型的词表大小
base_model.resize_token_embeddings(new_vocab_size)
# 保存扩展后的基础模型
expanded_model_path = "LLaMA/7Bhuggingface_expanded"
base_model.save_pretrained(expanded_model_path)
替换原来的7Bhuggingface
三、 其他模型下载配置
在AnomalyGPT/code/ckpt目录下创建这三个目录,然后从官方git界面下载相应的模型权重放到里面:
运行demo
在agpt环境下安装一个gradio
pip install gradio
在code目录下运行
python web_demo.py
运行成功:
运行demo可能遇到的问题
Traceback (most recent call last):
...
PermissionError: [Errno 13] Permission denied: '/tmp/gradio/2f658d17b167ac70d988435561abfa07ea24d76a'
解决办法:
修改 /tmp 目录权限
sudo chmod -R 1777 /tmp
训练自己的数据集
有一个包要先安装
pip install scikit-image
我这里用mvtec数据集训练的。
一定要选择系统CUDA版本对应的torch,不然会出错。类似
AttributeError: 'DeepSpeedCPUAdam' object has no attribute 'ds_opt_adam'
cpu_adam
之类的错误。下载PandaGPT到以下路径:
目录格式:
修改openllama.py,
增加以下内容:
from peft import LoraConfig
from peft.utils import TaskType
from peft import get_peft_model
from transformers import LlamaTokenizer
cd ./code
bash ./scripts/train_mvtec.sh
可能遇到的问题:
TypeError: 'NoneType' object is not subscriptable
[rank0]: min_width_dim1 = (width_bounds_pct[0][0]*dims[0]).round().astype(int)
[rank0]: TypeError: 'NoneType' object is not subscriptable
解决办法:
增加以下代码:
if width_bounds_pct is None:
width_bounds_pct = ((0.05,0.2),(0.05,0.2)) # 默认值
if intensity_logistic_params is None:
intensity_logistic_params = (1/6, 20) # 使用默认值
之后就能正常训练了。
补充
code目录里有个ffffff.png图片不要删掉,会报错。
Traceback (most recent call last):
FileNotFoundError: [Errno 2] No such file or directory: 'ffffff.png'
页面会error