type
status
date
slug
summary
tags
category
icon
password
Last edited time
Mar 16, 2024 07:01 AM
使用在imagenet的第2,3层特征 邻域特征聚合 贪婪策略构建内存库
📝 主旨内容
异常检测在工业检测等场景有重要应用,PatchCore在MVTec数据集中霸榜了很久,本文介绍相关内容。
算法流程
提取特征
特征级别
- 用预训练模型Backbone提取图像特征
- 以Resnet50为例,本文放弃了局部正常特征数据较少、偏向于分类任务的深层特征,采用第 [2, 3]层特征作为图像特征
Patch
特征
- 提取图像的
Patch
特征,这个特征带有周围数据的信息
- 以
h, w
位置为中心,取边长为p
的正方形区域
- 围绕这些点计算的特征图上的点为:(是对某领域中特征向量的聚合函数)
- 一幅图像的
Patch
特征集合为:
构建Memory Bank
Memory Bank
- 将收集到的正常图像
Patch
特征放入MemoryBank
Reduce memory bank(降低)
- 通过稀疏采样在尽可能保持特征表达能力的情况下,使得MemoryBank稀疏化(为了加快算法运行速度)
- 在确定目标Bank 特征数量后通过优化以下目标实现稀疏化
含义为找到一个特征集合,使得中任意特征距离中最近的特征的距离的最大值最小
- 之后用一些选择特征的策略获取稀疏化Memory Bank
梳理构建流程
异常检测
- 构建Memory Bank相当于使用正常数据进行模型训练、构建
- 之后输入待检测的图像进行异常检测,相当于infer
infer 流程
- 提取
Patch
特征:
- 对于每个
Patch
特征选择中距离最近的特征
公式计算的是点到集合的距离,选择距离最远的异常值距离最远的点为图像的异常值分数
- 文中强调为了提升算法鲁棒性,采用一个公式更新了异常值
我的理解为:对于特征系数的区域倾向于判定为异常,反正给予异常值一定的削减每个点的异常值拼接起来即可获得图像的异常热力图
🤗 总结归纳
实验比较选取不同的预训练模型层特征进行训练的差异
论文核心知识点
Patch: 所谓补丁,指的是像素;
PatchCore: 也就是补丁的核心信息;
Embedding: 所谓嵌入,指的是将网络提取的不同特征组合到一块;
Nominal samples: 正常样本即不包含异常的样本;
Memory bank: 就是记忆提取到的特征的集合;
Pretrained Encoder: 使用预训练模型(wide_resnet50_2) backbone 提取图像特征, 采用[2, 3]层特征作为图像特征,具有较强的底层特征(轮廓、边缘、颜色、纹理和形状特征),更能够反映图像内容。不采用最后几层原因:深层特征偏向于分类任务,具有更强的语义信息。
Locally aware patch features: 提取图像的 Patch特征,这个特征带有周围数据的信息。特征值的集合构建 PatchCore Memory bank;
Coreset Subsampling: 核心集二次抽样;
Coreset-reduced patch-feature memory bank:: 稀疏采样 目的是Reduce memory bank,加快算法运行速度。
anomaly score: 就是你训练正常的数据,捕获正常图像的特征,然后有一个异常的数据进来,就会和正常数据产生一个差异,通过整个差异来判断是否是异常。
算法流程
通过预训练好的ResNet-50在正常样本上面进行特征提取(不从Resnet最后一层获取特征,而是从中间获取)随后再采用 coreset subsampling,进行有效的降采样生成更加核心的特征集即memory bank。
在测试的时候,将提取到的特征通过 nearest neighbour search(最近邻搜索:每个query进来,首先找最近距离最近的领域质心,找到距离query最近的质心后,锁定该领域) 然后在该领域内计算距离最远的数据点,用该距离计算anomaly score,判断是否异常,得到结果。
📎 参考文章
- 作者:ziuch
- 链接:https://ziuch.com/article/PatchCore?target=comment
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章