PatchCore 是一款面向工业异常检测场景的模型,由 Roth 等人在 2021 年提出(论文:https://arxiv.org/abs/2106.08265),核心目标是实现工业场景下异常检测的 “全召回(Total Recall)”,也是亚马逊科学(Amazon Science)开源的工业异常检测解决方案。
表 1 版本配套表
| 配套 | 版本 | 环境准备指导 |
|---|---|---|
| 机器型号 | Atlas800I A2 | - |
| AI加速芯片 | 昇腾910B4 | - |
| Python | 3.11 | - |
| mindie | 2.3.0 | - |
# 镜像版本torch-onnx-inference:cann8.3.rc1_torch2.1.0-800I-A2-openeuler24.03-py3.11-aarch64 或者quay.io/ascend/vllm-ascend:v0.18.0docker run -dit --privileged --ipc=host --name=BlendMask_test --shm-size=1000g \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/sbin:/usr/local/sbin \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /home:/home \
-v /data:/data \
-v /tmp:/tmp \
IMAGE_ID \
/bin/bash
docker exec -it flant5-patchcore bash# 拉取代码仓
git clone https://github.com/amazon-science/patchcore-inspection.git
cd patchcore-inspection
# 安装依赖
pip install -r requirements.txt
pip install timm
# 昇腾适配
vim ./bin/run_patchcore.py
vim ./bin/load_and_evaluate_patchcore.py
添加:
import torch_npu
from torch_npu .contrib import transfer_to_npu
# 下载公开数据集mvtec_anomaly_detection:
https://www.mvtec.com/research-teaching/datasets/mvtec-ad/downloads
运行bin/run_patchcore.py训练模型,注意不要添加--faiss_on_gpu选项;命令末尾 path/to/data 更改为实际数据集目录位置:
datasets=('bottle' 'cable' 'capsule' 'carpet' 'grid' 'hazelnut' 'leather' 'metal_nut' 'pill' 'screw' 'tile' 'toothbrush' 'transistor' 'wood' 'zipper')
dataset_flags=($(for d in "${datasets[@]}"; do echo "-d ${d}"; done))
# 单卡训练
python bin/run_patchcore.py --gpu 0 --seed 0 --save_patchcore_model 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.1 approx_greedy_coreset \
dataset --resize 256 --imagesize 224 "${dataset_flags[@]}" mvtec path/to/data运行 bin\load_and_evaluate_patchcore.py,基于训练好的模型执行推理和评估流程。 假设项目位于 /home 目录下,需将 /home /patchcore-inspection 修改为实际项目路径,同时将 path/to/data 替换为实际数据集目录路径。
datasets=('bottle' 'cable' 'capsule' 'carpet' 'grid' 'hazelnut' 'leather' 'metal_nut' 'pill' 'screw' 'tile' 'toothbrush' 'transistor' 'wood' 'zipper')
dataset_flags=($(for d in "${datasets[@]}"; do echo "-d ${d}"; done))
model_flags=($(for d in "${datasets[@]}"; do echo "-p /home /patchcore-inspection/results/project/group_0/models/mvtec_${d}"; done))
python bin/load_and_evaluate_patchcore.py --gpu 0 --seed 0 eval_results \
patch_core_loader "${model_flags[@]}" \
dataset --resize 256 --imagesize 224 "${dataset_flags[@]}" mvtec path/to/data表 2 训练精度
| 配套 | 显存+卡数 | 精度 |
|---|---|---|
| A2 | 32G*1卡 | instance_auroc = 0.990529821408584;full_pixel_auroc = 0.981232508734393;anomaly_pixel_auroc = 0.973702781905656 |
表 3 推理性能
| 配套 | 显存+卡数 | 性能 |
|---|---|---|
| A2 | 32G*1卡 | throughput_fps = 2.15105770691515(张/秒) |
requirements.txt 缺失依赖如timm,需要手动安装
pip install timm报错信息如下:
patchcore_instance.load_from_path(
File "/patchcore-inspection/src/patchcore/patchcore.py", line 265, in load_from_path
patchcore_params = pickle.load(load_file)
^^^^^^^^^^^^^^^^^^^^^^
_pickle.UnpicklingError: invalid load key, 'v'.直接加载项目models文件夹下的pkl文件不能直接使用,建议使用训练结果:
cd /home/patchcore-inspection
ls -dt results/project/group* | head -n 3