运行PatchCore代码
1 2 3
| 论文地址:https://arxiv.org/abs/2106.08265 github地址:https://github.com/amazon-science/patchcore-inspection 平台:autodl云服务器
|
1.安装依赖
1 2 3 4 5 6 7
| # 有setup.py文件,将整个项目安装成一个可导入的依赖 pip install -e . # 安装依赖 ## 注意这里的faiss用的就是cpu版,换成gpu反而会在推理时报错,而且超级影响模型性能(用faiss-gpu训练精度大概会掉30%-40%!!!) pip install -r requirements.txt # 运行过程中发现需要安装 pip install timm
|
2.训练
.sh
是一个命令行脚本文件,用于存储原本会手动在命令行执行的命令。通过将命令集中在一个脚本,可以自动化运行代码的流程。
修改sample_training_copy.sh
,修改后文件内容为:
1 2 3 4 5 6 7 8 9 10 11 12 13
| datapath=/root/autodl-fs/mvtec2d datasets=('bottle' 'cable' 'capsule' 'carpet' 'grid' 'hazelnut' 'leather' 'metal_nut' 'pill' 'screw' 'tile' 'toothbrush' 'transistor' 'wood' 'zipper') dataset_flags=($(for dataset in "${datasets[@]}"; do echo '-d '"${dataset}"; done))
############# Detection ### IM224: # Baseline: Backbone: WR50, Blocks: 2 & 3, Coreset Percentage: 10%, Embedding Dimensionalities: 1024 > 1024, neighbourhood aggr. size: 3, neighbours: 1, seed: 0 # Performance: Instance AUROC: 0.992, Pixelwise AUROC: 0.981, PRO: 0.944
##下述命令行代码的调整:1.将参数采样率-p的值由原来的0.1调整为了0.01,因为显存不够 2.去掉了原来的参数--faiss_on_gpu,因为用的是faiss-cpu 3.去掉参数--log_online
python 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 results \ 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.01 approx_greedy_coreset dataset --resize 256 --imagesize 224 "${dataset_flags[@]}" mvtec $datapath
|
运行sample_training_copy.sh
1 2 3
| # 在命令行执行: chmod +x sample_training_copy.sh ./sample_training_copy.sh
|
3.评估
修改sample_evaluate_copy.sh
,修改后文件内容为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| # 注意这里评估的模型是我上面自己训练的模型,如果需要评估官方预训练好的权重,注意修改loadpath和modelfolder # Set paths datapath="/root/autodl-fs/mvtec2d" loadpath="results/MVTecAD_Results" modelfolder="IM224_WR50_L2-3_P01_D1024-1024_PS-3_AN-1_S0_2" savefolder="evaluated_results/$modelfolder"
# Define datasets datasets=('bottle' 'cable' 'capsule' 'carpet' 'grid' 'hazelnut' 'leather' 'metal_nut' 'pill' 'screw' 'tile' 'toothbrush' 'transistor' 'wood' 'zipper')
# Generate flags dataset_flags=($(for dataset in "${datasets[@]}"; do echo "-d $dataset"; done)) model_flags=($(for dataset in "${datasets[@]}"; do echo "-p ${loadpath}/${modelfolder}/models/mvtec_${dataset}"; done))
# Run the evaluation # 注意去掉官方提供的代码中的--faiss_on_gpu参数 python bin/load_and_evaluate_patchcore.py --gpu 0 --seed 0 "$savefolder" \ patch_core_loader "${model_flags[@]}" --faiss_on_gpu \ dataset --resize 256 --imagesize 224 "${dataset_flags[@]}" mvtec "$datapath"
|
运行sample_evaluation_copy.sh
1 2 3
| # 在命令行执行: chmod +x sample_evaluation_copy.sh ./sample_evaluation_copy.sh
|
4.遇到的问题及解决
问题:无法下载官方训练好的模型权重,导致想要加载预训练模型直接评估时报错_pickle.UnpicklingError: invalid load key, ‘<‘
原因:模型加载不完整,需要git lfs clone + 链接
下载项目