PatchCore的代码复现

缺陷检测:PatchCore的代码解读 该文章发表在2022的CVPR上,用于缺陷检测,继承自SPADE,背后的关键原理为:测试样本与训练样本之间进行特征匹配,将不匹配的点识别出来。该文章探究了深度特征的多尺度性质。Youtube1Youtube2PatchCore主要包含三个部分创建特征的内存库通过贪心策略减少内存块数据量使用该内存块检测异常下面本人先介绍一下整个工程的流程,代码见,后面再逐一详细介绍三个部分的代码。 阅读详情
AI摘要

PatchCore模型在MVTec数据集上展现卓越性能,通过预训练模型提取特征,实现无监督异常检测,适用于工业图像分析。

前言
在这里插入图片描述
源码地址:https://github.com/amazon-science/patchcore-inspection
论文地址:https://arxiv.org/abs/2106.08265
异常检测问题在工业图像数据分析中扮演着至关重要的角色,其目的是从大量正常数据中识别出异常行为或模式。这一任务的挑战在于,正常数据的样本相对容易获取,而异常情况却因其稀有性和多样性而难以收集。为了解决这一问题,研究者们开发了多种方法,其中一种备受关注的方法是PatchCore模型。
PatchCore模型是一种先进的工业异常检测方法,它在MVTec数据集上取得了最先进的性能(State of the Art,简称SOTA。这个数据集是工业领域内公认的用于评估异常检测算法的标准数据集,包含了多种不同类别的工业产品图像,既有正常样本也有异常样本。
PatchCore的关键优势在于它的特征提取机制。传统的异常检测方法通常需要大量的标注数据来训练模型,以学习正常和异常图像之间的差异。然而,PatchCore采用了一种不同的策略,它利用了预训练模型(如WideResNet50)来提取图像特征。这种方法的优势在于,预训练模型已经在大型数据集(如ImageNet)上学习了丰富的视觉特征,因此可以直接应用于新的任务,而无需进行额外的特征提取训练。
这里只复现代码中训练和测试流程,不对论文核心进行分析。
使用数据
数据来源https://www.mvtec.com/company/research/datasets/mvtec-ad,将其放在某个位置datapath。确保其遵循以下数据树结构:

mvtec
|-- bottle
|-----|----- ground_truth
|-----|----- test
|-----|--------|------ good
|-----|--------|------ broken_large
|-----|--------|------ ...
|-----|----- train
|-----|--------|------ good
|-- cable
|-- ...

总共有15个子数据集:bottle(瓶子),cable(电缆),capsule(胶囊),carpet(地毯),grid(网格),hazelnut(危险螺母), leather(皮革),metal_nut(金属螺母),pill(药丸 ),screw(螺丝 ),tile(瓷砖),toothbrush(牙刷 ),transistor(变压器),wood(木材),zipper(拉链)。

模型训练

run_patchcore.py
--gpu 0 # 设置GPU ID
--seed 0 # 重复性种子 
--save_patchcore_model # 如果设置,则保存PatchCore模型
--save_segmentation_images
--log_group IM224_WR50_L2-3_P01_D1024-1024_PS-3_AN-1_S0
--log_project MVTecAD_Results results # 日志详细信息:运行名称和整体项目文件夹的名称
patch_core # 现在传递所有与PatchCore相关的参数
-b wideresnet50  # 使用哪个基础网络
-le layer2 # 从哪些层提取特征
-le layer3
--faiss_on_gpu # 是否在GPU上执行相似性搜索
--pretrain_embed_dimension 1024
--target_embed_dimension 1024 # 从基础层提取的特征维度和最终聚合的PatchCore维度
--anomaly_scorer_num_nn 1 # 异常检测使用的最近邻数量
--patchsize 3 # 和局部聚合的邻居大小
sampler # 现在传递所有(Coreset-)子采样的参数
-p 0.1 approx_greedy_coreset # # 子采样百分比和精确的子采样方法
dataset # 现在传递所有与数据集相关联的参数
--resize 256 # 初始缩放形状
--imagesize 224 # 最终裁剪图片尺寸
-d wood # 选择的数据类型
mvtec \datasets\mvtec # 要使用的MVTec子数据集

出现问题1:保存结果图时总是会将原图覆盖掉,检查后发现src/patchcore/utils.py代码存在bug,进行了修改

savename = image_path.split("/")
savename = "_".join(savename[-save_depth:])
savename = os.path.join(savefolder, savename)
这三行删掉,修改成
folder_name = os.path.basename(os.path.dirname(image_path))
save_path = os.path.join(savefolder, folder_name)
if not os.path.exists(save_path):
	os.makedirs(save_path)
savename = os.path.join(save_path, os.path.basename(image_path))

出现问题2:AttributeError: ‘MVTecDataset’ object has no attribute ‘transform_std’
因为主干是基于imagenet数据集训练的,所以均值和方差都是imagenet,因此可以在patchcore/datasets/mvtec.py中,在类class MVTecDataset 的def init 的函数中加入下面两行

self.transform_std = IMAGENET_STD
self.transform_mean = IMAGENET_MEAN

模型推理

load_and_evaluate_patchcore.py
--gpu 0
--seed 0
--save_segmentation_images
"results/MVTecAD_Results/IM224_WR50_L2-3_P01_D1024-1024_PS-3_AN-1_S0/evaluateAnswer" # 保存测试结果的路径
patch_core_loader
--patch_core_paths
"results/MVTecAD_Results/IM224_WR50_L2-3_P01_D1024-1024_PS-3_AN-1_S0/models/mvtec_tile" # 前训练的模型的路径
--faiss_on_gpu
dataset
--resize 256
--imagesize 224
--num_workers 0
-d tile # 选择的数据类型
mvtec \datasets\mvtec # 要使用的MVTec子数据集

输出结果
在这里插入图片描述

PatchCore实战:从零构建无监督工业异常检测系统,并实现C++端高效部署 本文详细介绍了如何从零开始构建基于PatchCore的无监督工业异常检测系统,并实现高效的C++端部署。文章深入解析了PatchCore仅需正样本的核心原理,提供了从环境搭建、数据准备、模型训练调参到C++推理引擎封装的完整实战指南,重点解决了工业场景下模型轻量化与高效部署的关键问题。 阅读详情

相关推荐

【2024工业图像异常检测实战】PatchCore:从零搭建高效记忆库驱动的检测系统

本文为2024年工业图像异常检测实战指南,详细解析了基于记忆库的经典算法PatchCore。文章从环境配置、数据适配、核心参数调优到性能加速(Faiss GPU检索优化)提供了全流程教程,并探讨了工业部署的关键问题,旨在帮助开发者从零搭建高效、稳定且可解释的工业质检系统。

weixin_29054245的博客 810

使用 PatchCore 进行图像异常检测

我们已经介绍了 PatchCore 的关键概念,并将其应用于医学影像数据集。即使数据集非常有限,我们也看到了一些非常有希望的结果。一般来说,如果您有一个用例,其中正常数据很容易获取但异常数据很昂贵(甚至是先验未知的),anomalib 可能是一个值得考虑的好工具。相关代码与数据集下载:欢迎关注公众号:猛男技术控,回复异常检测。

小白不白 1万+

【2022工业图像异常检测代码复现】PatchCore: 基于补丁特征记忆库的异常检测

Paper:Towards Total Recall in Industrial Anomaly Detection Code:https://github.com/amazon-science/patchcore-inspection

qq_1532145264的博客 2976

PatchCore原理与代码解读

随机下采样会丢失 \(\mathcal{M} \) 中的有用信息,本文使用coreset subsampling方法来减小 \(\mathcal{M} \),coreset selection旨在找到一个子集 \(\mathcal{S}\subset \mathcal{A}\),对于通过 \(\mathcal{A}\) 得到的解,通过 \(\mathcal{S}\) 可以快速得到最近似解。其中 \(f_{agg}\) 是邻域特征向量的聚合函数,文中采用adaptive average pooling。

00000cj的博客 3万+

保姆级教程:用PyTorch复现PatchCore工业异常检测(附MVTec数据集实战代码)

本文提供了一份详细的PyTorch教程,指导如何复现PatchCore工业异常检测算法,并附有MVTec数据集的实战代码。PatchCore作为一种无需异常样本训练的方法,在MVTec数据集上实现了99.6%的检测准确率,超越了人类专家水平。教程涵盖环境配置、数据准备、算法实现、异常检测与可视化等关键步骤,适合工业视觉领域的开发者和研究者。

weixin_30781433的博客 582

深入解析PatchCore:从特征提取到缺陷检测的代码实现

本文深入解析了无监督异常检测模型PatchCore的代码实现,从特征提取、核心集采样到缺陷检测定位,提供了完整的实战指南。文章结合MVTec AD数据集,详细拆解了利用预训练网络提取局部特征、使用近似贪心算法构建高效记忆库,以及借助Faiss库进行快速异常比对的三大核心步骤,并分享了工业场景下的参数调优与部署经验。

sony5的博客 1123

Patchcore运行过程

PatchCore 论文代码复现

weixin_42182290的博客 1865

patchcore 官方源码复现

https://github.com/amazon-research/patchcore-inspection AttributeError: module ‘faiss’ has no attribute ‘GpuIndexFlatL2’ 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器

shuaijieer的博客 3418

【无标题】

patchcore代码复现

beyfeng的博客 4145

基于特征嵌入的工业缺陷检测:PatchCore原理与代码复现

无监督异常检测在工业质检中越来越受关注,传统重构方法容易因模型泛化能力过强而漏检缺陷。基于特征嵌入的思路完全不同,它利用预训练网络提取正常样本的局部特征,通过核心集采样压缩特征库,再结合最近邻搜索量化异常程度。PatchCore正是这一范式的典型实现,在MVTec AD上仅用正常样本即可达到接近端到端训练的效果。内容从原理到代码逐步拆解其特征提取、核心集采样、最近邻检索及热力图生成流程,为落地真实工业缺陷检测提供参考。

weixin_31715171的博客 337

PatchCore工业缺陷检测:特征嵌入原理、代码复现与避坑实践

工业异常检测中,传统分类方法依赖标注缺陷样本,而实际产线的未知缺陷形态难以穷举。基于特征嵌入的无监督缺陷检测,将图像映射到高维特征空间,通过最近邻距离度量偏离正常样本分布的程度,从而识别异常。PatchCore算法使用预训练网络中间层提取局部纹理描述子,构建特征记忆库并采用核心集采样压缩,在保留空间信息的同时显著降低计算开销,在MVTec AD等工业视觉数据集上取得优异的图像级异常定位效果。本文从特征嵌入原理出发,详解PatchCore的代码复现、参数调优与常见工程踩坑,为工业质检场景提供一套可落地的异常检

weixin_29050271的博客 333

软件工程毕设全流程:8款AI工具高效串联代码复现与论文写作

大语言模型与人工智能辅助编程日益普及,工程实践中的写作与编码任务正被重构。通过自然语言交互,AI工具能够理解技术文档、分析代码逻辑、生成初稿并优化表达,其核心原理在于利用大规模预训练模型对上下文建模,输出结构化结果。这种技术价值在于将重复性劳动剥离,让开发者聚焦于关键决策与质量把控。在软件工程毕业设计场景中,从文献调研、代码复现到论文撰写和答辩准备,均可借助AI辅助工作流显著提速。围绕代码复现跑通与论文并行写作两大主线,梳理8款可落地工具的定位分工,演示如何用提示词控制输出质量,并给出查重与防伪建议,形成一

weixin_29056701的博客 429

PatchCore工业缺陷检测实战:从特征嵌入到代码落地

工业视觉中的异常检测长期面临缺陷样本稀缺、形态不可穷尽的难题,传统分类思路往往难以落地。特征嵌入作为一种无监督技术路线,不依赖缺陷标注,只从正常样本的特征分布中学习边界,为产线质检提供了新的解决思路。其核心原理是用预训练网络提取图像块的高维特征,通过核心集采样压缩正常特征库,再以最近邻距离度量异常程度。该方案在MVTec AD等数据集上表现优异,且推理过程无需反向传播,具有部署速度快、可解释性强的优势,非常适合缺陷样本收集困难、误检率要求高的工业场景。本文围绕PatchCore这一代表性算法,系统讲解其特征

weixin_29056145的博客 146

异常检测patchcore源码复现

patchcore源码复现详细过程

m0_63828250的博客 5888

机器学习课程设计高分实战指南:数据清洗到答辩话术闭环

机器学习课程设计不仅是算法实现,更是工程能力与教学目标的双重验证。从数据清洗可复现性、特征工程依据性,到模型对比的控制变量设计和实验结论的问题回溯,本质是构建‘可验证的学习闭环’。技术价值在于将抽象概念(如过拟合诊断、特征重要性解释)落地为可展示、可答辩、可复现的具体产出。典型应用场景包括文本分类、回归归因分析与工业时序异常检测,覆盖高校《机器学习》课程高频考核任务。本实践体系深度融合scikit-learn、SHAP与PatchCore思想简化实现,强调最小可行代码、Markdown结构化报告与答辩级图表

weixin_29089057的博客 204

PatchCore-anomaly-detection-main.zip

“Towards Total Recall in Industrial Anomaly Detection”在MVtec数据集上排名第一的方法,是基于pytorch实现的,非官方源码, 简称“PatchCore”

PATCHCORE实战:5个企业级代码修复案例解析

不用配环境就能直接跑起来,修复建议生成速度比我们本地部署的还快,特别适合中小团队快速搭建原型。他们的实时预览功能对演示修复效果特别有用,点几下就能看到前后对比,省去了打包部署的麻烦。最近在团队里折腾代码审计和自动化修复,发现PATCHCORE这个工具确实能帮我们省下不少功夫。PATCHCORE给出的修复方案包含完整的线程安全改造建议,上线后再没出现过并发异常。修复后新扫描报告显示漏洞清零,更重要的是查询性能还提升了12%——这是意外收获。原本预估3人日的工作,实际只用了1天就完成,测试阶段零报错。

NightshadeEagle34的博客 701

深度篇——图像处理的一些方法(一) 关于 图像处理的三个层次 与 selective search

返回主目录 返回 图像处理的一些方法 目录 下一章:深度篇——图像处理的一些方法(二)细说性能评估 IOU和 GIOU 目录内容 深度篇——图像处理的一些方法(一)关于图像处理的三个层次 与 selective search 深度篇——图像处理的一些方法(二)细说性能评估 IOU和 GIOU 深度篇——图像处理的一些方法(三)细说 HOG特征与bag-o...

天下所弃,不过其纪。世间事,在人,在志。 2917

patchcore 复现

使用conda install faiss-gpu cudatoolkit=11.3 -c pytorch 安装。A40,PYTORCH 1.10.0, CUDA 11.3, 显卡驱动支持11.6;如果用pip安装,默认安装1.7.2, 导致 faiss使用报错。4、mvtec文件夹下将mvtec数据集放到该文件夹下。1、设置pythonpath。5、安装faiss-gpu;

u013930679的博客 1389

基于ADS\HFSS\Matlab的平面带通发夹滤波器设计

写在最前面,前段时间完成了一个小项目,实现13.5~14GHz的带通滤波器,算是第一个微波项目,在老师、学长、各种大神的指点下,最终完成了指标,想来这段时间收获良多,想到老师教导的,有能力的话要尽可能帮助别人,以及网络上很少面向于小白的教程,于是决定把自己做这个小项目的经过,一些关键步骤,还有软件操作和公式讲解都发出来,供大家指正借鉴。由于我目前大三,刚学习电磁场、微波工程等等,技术实在有限,同时这样是我第一次发帖子,只能尽可能的将自己确认过正确的内容,步骤以及一些经验写出来,供大家借鉴。

likaifeng12138的博客 5218

智能客服系统知识库数据清洗

数据清洗(Data Cleaning)是确保智能客服知识库高效运行的重要环节,主要涉及。| 分类 & 标签优化 | 重新组织 FAQ,创建关键字索引 || 定期更新 | 结合用户反馈,每 1-3 个月优化 |才能提供更优质、正确的回答,提升客户满意度!、Zendesk、Intercom 等)中,: FAQ 或客服回答中可能存在。,会影响 AI 匹配的准确性。是一个持续优化的过程,

z1941563559的博客 2099
上一篇: OMP: Error #15问题解决方法
下一篇: Pycharm添加到右健打开方式中
WD-ss
博客等级 码龄7年 44粉丝 18原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值