Ascend-SACT/PatchCore
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

PatchCore 是一款面向工业异常检测场景的模型,由 Roth 等人在 2021 年提出(论文:https://arxiv.org/abs/2106.08265),核心目标是实现工业场景下异常检测的 “全召回(Total Recall)”,也是亚马逊科学(Amazon Science)开源的工业异常检测解决方案。

一、准备运行环境

表 1 版本配套表

配套版本环境准备指导
机器型号Atlas800I A2-
AI加速芯片昇腾910B4-
Python3.11-
mindie2.3.0-

1.1 加载镜像

# 镜像版本torch-onnx-inference:cann8.3.rc1_torch2.1.0-800I-A2-openeuler24.03-py3.11-aarch64 或者quay.io/ascend/vllm-ascend:v0.18.0

1.2 容器创建

docker 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

1.3 安装依赖

# 拉取代码仓
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

二、下载模型权重与数据集

2.1 下载到本地


# 下载公开数据集mvtec_anomaly_detection:
https://www.mvtec.com/research-teaching/datasets/mvtec-ad/downloads

三、模型推理使用

3.1 运行训练脚本

运行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

3.2 运行推理脚本

运行 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

四、性能数据

4.1 训练精度

表 2 训练精度

配套显存+卡数精度
A232G*1卡instance_auroc = 0.990529821408584;full_pixel_auroc = 0.981232508734393;anomaly_pixel_auroc = 0.973702781905656

4.2 推理性能

表 3 推理性能

配套显存+卡数性能
A232G*1卡throughput_fps = 2.15105770691515(张/秒)

五、问题解决

5.1 启动训练时,缺失依赖如timm

requirements.txt 缺失依赖如timm,需要手动安装

pip install timm

5.2 启动推理时,加载模型文件报错

报错信息如下:

 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