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等,因而不需求再自行安装,很方便。

反常检测patchcore源码复现

显卡要求不必很高,因而挑选A16(最便宜的),环境这儿我的镜像挑选为Pytorch 2.1.1 预装:Ubuntu20.04, Python 3.10, Pytorch 2.1.1, CUDA 11.8, cuDNN 8, NVCC

反常检测patchcore源码复现

登录服务器能够运用JupyterLab检查服务器的文件结构等,也能够修正代码,我这儿运用XSHELL登录服务器。

反常检测patchcore源码复现

成功进入服务器。

反常检测patchcore源码复现

之后运用git将patchcore源码下载到服务器,并将MvTecAD数据集传输至服务器,这儿给一份数据集的链接: pan.baidu.com/s/1oCTeg96y… 提取码: 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准确率应该更高),这儿能够看到准确率很高。

反常检测patchcore源码复现

前往存储方位检查保存的模型。

测验并分析模型

相同,给出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,这儿供给了很好的解决方法。

我经过这个方法解决的:

反常检测patchcore源码复现

之后成功运行:

反常检测patchcore源码复现

在保存成果的方位能够看到可视化成果:

反常检测patchcore源码复现

总结

复现过程比较顺利,没遇到太大的问题,如果过程中遇到什么问题,大概率github上会有解决方法。