当前位置:   article > 正文

异常检测patchcore源码复现_patchcore代码讲解

patchcore代码讲解

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目录,并运行指令安装所需库

  1. cd patchcore-inspection
  2. 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上会有解决方法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/373934?site
推荐阅读
相关标签
  

闽ICP备14008679号