赞
踩
code:patchcore-inspection/images at main · amazon-science/patchcore-inspection (github.com)
论文:[2106.08265] Towards Total Recall in Industrial Anomaly Detection (arxiv.org)
patchcore,基于内存库的异常检测方法,其使用了一个具有最大代表性的标称斑块特征记忆库。PatchCore 的推理时间很快,同时在检测和定位方面都达到了极高的性能。本文通过使用矩阵云复现patchcore的代码。
进入矩阵云,首先先租借一个服务器,我这里使用了矩池云的服务器,注册可以免费用5个小时。矩阵云的服务器自带CUDA CUDNN pytourch等,因此不需要再自行安装,很方便。
显卡要求不用很高,因此选择A16(最便宜的),环境这里我的镜像选择为Pytorch 2.1.1 预装:Ubuntu20.04, Python 3.10, Pytorch 2.1.1, CUDA 11.8, cuDNN 8, NVCC
登录服务器可以使用JupyterLab查看服务器的文件结构等,也可以修改代码,我这里使用XSHELL登录服务器。
成功进入服务器。
之后使用git将patchcore源码下载到服务器,并将MvTecAD数据集传输至服务器,这里给一份数据集的链接: 百度网盘 提取码: tp22
进入patchcore目录,并运行指令安装所需库
- cd patchcore-inspection
- pip3 install -r requirements.txt
至此环境准备完成。
这里给出训练bottle类的模型指令,其他指令都类似,只需要调整即可,同时需要先确保使用的gpu序号,patchcore配置等等,具体可以看github上的说明:
python /root/patchcore-inspection/bin/run_patchcore.py --gpu 0 --seed 0 --save_patchcore_model --log_group IM224_WR50_L2-3_P01_D1024-1024_PS-3_AN-1_S0 --log_project MVTecAD_Results /root/model patch_core -b wideresnet50 -le layer2 -le layer3 --pretrain_embed_dimension 1024 --target_embed_dimension 1024 --anomaly_scorer_num_nn 1 --patchsize 3 sampler -p 0.1 approx_greedy_coreset dataset --resize 256 --imagesize 224 --subdatasets "bottle" mvtec /root/mvtec
指令说明:
指定GPU和种子:使用--gpu 0和--seed 0。
模型保存:通过--save_patchcore_model指定在训练结束后保存模型。
日志组和项目:通过--log_group和--log_project指定日志相关的参数。
结果路径:指定训练结果和模型应该保存在/root/model路径下。
PatchCore配置:指定使用wideresnet50作为骨干网络,并且从layer2和layer3提取特征。还包括预训练嵌入维度、目标嵌入维度、异常评分器的最近邻数和patch大小等参数。
采样器:使用-p 0.1指定采样比例为10%的近似贪婪核心集采样器。
数据集和子数据集:通过--resize和--imagesize指定图像处理的大小,--subdatasets "bottle"来指定只训练bottle这一子数据集。
数据集路径:确保将/root/mvtec替换成你实际存放MVTec AD数据集的路径。
一定要确保数据集路径和结果路径正确
由于外网下载wideresnet50很慢,这里可以直接根据终端给的链接下载并保存至其对于文件夹,就不用龟速下载了。
注意这里运行时可能会提示ModuleNotFoundError: No module named 'patchcore',但实际上是有的,只是环境路径设置错误,使用export PYTHONPATH=src后再运行即可。
成功运行,以pill类为例(这里bottle忘了截图,实际上bottle准确率应该更高),这里可以看到准确率很高。
前往指令中指定的存储位置可以查看保存的模型。
同样,给出bottle模型的测试指令:
python bin/load_and_evaluate_patchcore.py --gpu 0 --seed 0 "/root/evaluateAnswer" patch_core_loader -p "/root/model/MVTecAD_Results/IM224_WR50_L2-3_P01_D1024-1024_PS-3_AN-1_S0/models/mvtec_bottle/" dataset --resize 256 --imagesize 224 -d "bottle" mvtec "/root/mvtec"
这里说一下几个路径的设置:
"/root/evaluateAnswer/bottle"替换为你保存测试结果的路径
"/root/model/MVTecAD_Results/IM224_WR50_L2-3_P01_D1024-1024_PS-3_AN-1_S0/models/mvtec_bottle/":换成你之前训练的模型的路径
"/root/mvtec"替换为你的数据集的路径
同时如果你想保存测试图像的话,加上--save_segmentation_images :
python bin/load_and_evaluate_patchcore.py --gpu 0 --seed 0 --save_segmentation_images "/root/evaluateAnswer/bottle" patch_core_loader -p "/root/model/MVTecAD_Results/IM224_WR50_L2-3_P01_D1024-1024_PS-3_AN-1_S0/models/mvtec_bottle/" dataset --resize 256 --imagesize 224 -d "bottle" mvtec "/root/mvtec"
这里可能会存在问题,当运行时可能会提示'MVTecDataset' object has no attribute 'transform_std',可以参考issue80,这里提供了很好的解决方法。
我通过这个方法解决的:
之后成功运行:
并在保存结果的位置可以看到可视化结果:
复现过程比较顺利,没遇到太大的问题,如果过程中遇到什么问题,大概率github上会有解决方法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。