## **介绍**
经典缺陷检测算法整理,包含PaDiM(2020ICPR)、PatchCore(2022CVPR)、SimpleNet(2023CVPR)、EfficientAD(2023)。
> 文中部分图源见水印
## 1、PaDiM
### 问题
- 异常检测:实际应用中缺乏异常样本,并且异常可能会有意想不到的模式,不能使用完全监督的方法训练模型,即训练数据集仅包含正常类的图像。
- 目前的单类别学习模式的异常检测模型要么需要训练[深度神经网络](https://so.csdn.net/so/search?q=%E6%B7%B1%E5%BA%A6%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C&spm=1001.2101.3001.7020),非常麻烦。要么测试阶段在整个训练集上使用K最近邻算法,KNN算法线性复杂度的特点导致随着训练集的增大,其时间和空间复杂度也随之增大。
### 创新
PaDiM利用预训练好的CNN进行embedding提取,并且具有以下两个特点:(1)每个patch位置都用一个多元高斯分布来描述。(2)PaDiM考虑到了CNN不同语义层之间的关联。
此外,在测试阶段,它的时间和空间复杂度都比较小,且**独立于训练集的大小**,这非常有利于工业部署应用。对于异常检测和定位任务,在MVTec AD和ShanghaiTec Campus两个数据集上,PaDiM超越了现有SOTA方法(2020年本文提出时)。
### 详细
- **Embedding extraction(嵌入向量提取)**
![](https://s2.loli.net/2024/01/16/uZA34jCBO6Xf18s.png)
将预训练模型中三个不同层的feature map对应位置进行拼接得到embedding vector,这里分别取resnet18中layer1、layer2、layer3的最后一层,模型输入大小为224x224,这三层对应输出维度分别为(209,64,56,56)、(209,128,28,28)、(209,256,14,14),这里实现1中是通过将小特征图每个位置复制多份得到与大特征图同样的spatial size,然后再进行拼接。比如28x28的特征图中一个1x1的patch与56x56的特征图中对应位置的2x2的patch相对应,将该1x1的patch复制4份得到2x2大小patch后再与56x56对应位置的2x2 patch进行拼接
将三个不同语义层的特征图进行拼接后得到(209,448,56,56)大小的patch嵌入向量可能带有冗余信息,因此作者对其进行了降维,作者发现随机挑选某些维度的特征比PCA更有效,在保持sota性能的前提下降低了训练和测试的复杂度,文中维度选择100,因此输出为(209,100,56,56)
- **Learning of the normality(正常特征学习)**
为了学习正常图像在位置**(i,j)**处的特征,我们首先计算N张正常训练图片在位置**(i,j)**处的嵌入向量集和 **Xij= {xk ij, k ∈[[1, N]]}**。为了整合这个set的信息假设,我们假设**Xij**由多元高斯分布 **N (µij, Σij)**得到的,其中**µij** 是 **Xij** 的样本均值,样本协方差 **Σij**通过下式估计得到
![](https://s2.loli.net/2024/01/16/Z6b1UVGt2AEJxNF.png)
其中正则项 **ϵI** 保证协方差矩阵时满秩且可逆的,如上图右所示,图像中每个位置都通过高斯参数矩阵与一个多元高斯分别相关联。
- **Inference: computation of the anomaly map(推理:异常图的计算)**
我们使用马氏距离**M (xij )**给测试图像位置**(i,j)**的 patch 一个异常分数。**M (xij )**可以解释为嵌入**xij**
与学习分布**N(µij,Σij )**之间的距离,计算公式如下:
![](https://s2.loli.net/2024/01/16/KCbNvu42Sf3YBjc.png)
- **损失函数**
**AUC**:ROC(Receiver Operating Characteristic)曲线是以假正率(FPR)和真正率(TPR)为轴的曲线,ROC曲线下面的面积我们叫做AUC,如下图所示:
![](https://s2.loli.net/2024/01/16/H9wy6S1hqPQF2ZL.png)
**真正例率** TPR = TP / (TP + FN) 表示,预测为正例且真实情况为正例的,占所有真实情况中正例的比率。 **假正例率** FPR = FP /(TN + FP)表示的,预测为正例但真实情况为反例的,占所有真实情况中反例的比率。 TPR越大,则表示挑出的越有可能(是正确的);FPR越大,则表示越不可能(在挑选过程中,再挑新的出来,即再挑认为是正确的出来,越有可能挑的是错误的)
## 2、PatchCore
PatchCore 作为一种异常检测技术于2021年推出,旨在在工业应用中实现全面召回。如下图所示,PatchCore 有2个主要步骤。==首先,它从正常图像块中提取局部感知特征。之后,它应用子采样技术(核心集)来近似这些特征并构建一组描述正常模式的补丁特征。在测试时,为测试样本提取补丁特征,并使用最近邻方法计算异常分数。
![](https://s2.loli.net/2024/01/16/6q3WViXSy8fKvDj.png)
### 问题
- 冷启动问题:在训练集中都是正常的图片,模型很容易捕获到正常图像的特征,但是很难捕获到异常缺陷的样本
- 分布漂移。正常图像和异常图像分布是不一样的,模型学习的是正常图像的数据分布,而异常图像的数据分布和正常图像不一样
### 详细
- **使用中间 ResNet 表示**
采用ResNet-50/ WideResNet-50进行特征提取,由4个残差块组成。一般来说,获取提取的特征是在ResNet最后一层获取,但是存在两个问题
1. 损失太多的信息
2. 深度抽象的特征对当前的分类任务存在较大的偏差,因为冷启动带来的问题,缺陷特征很少,很难推测出来
解决:
1. 创建一个存储块:memory bank,存储patch features(可理解为块特征)
2. 不从Resnet最后一层获取特征,而是从中间获取:
![](https://s2.loli.net/2024/01/16/Y3xbye5ZTrMFW42.png)
1. 为了不损失空间的分辨率和有用的特征,采用局部邻居聚合的方法来增加感受野,然后合并特征
- **使用核心集构建内存库**
![](https://img-blog.csdnimg.cn/img_convert/d1a68032ba9801384291347e66d9e693.png)
流程解释:
1. M是我们需要的特征集,整个特征集不能太大(放在内存里面的),尽可能小的coreset能代表绝大多数的数据特征
2. 遍历所有的图像,获得经过ResNet提取后的特征,还是太多,得优化
3. l是设定的coreset的特征子集个数,是个超参数
4. 关键:如果选才能满足1中的要求? 就是,每次选一个coresset(Mc)中的点,在M中找一个最近又最远(贪心策略)的点,抽出来
5. 解释一下什么是最近又最远:在最近的范围内找到最远的点,也就是在局部找到一个最远的点,即最优解。如果不这样,搜索计算量巨大NP难的问题
- **用PatchCore进行异常检测**
测试集的数据进来,进行最近邻搜索
![](https://s2.loli.net/2024/01/16/gLQ3GYqfTC65XA7.png)
- **每个query进来,首先找最近距离最近的领域质心(蓝色标记,非数据点)**
![](https://s2.loli.net/2024/01/16/8yZqbY2awvpGTP5.png)
- **找到距离query最近的质心后,锁定该领域**
![](https://s2.loli.net/2024/01/16/pc8PzhJ975Z1IrK.png)
- **然后在该领域内计算距离最远的数据点,用该距离计算anomaly score,判断是否异常,得到结果**
![](https://s2.loli.net/2024/01/16/yX71GqDsHLoICAe.png)
## 3、PaDiM和PatchCore对比
- PatchCore与PaDiM对比: patchcore 使用高效的patch-feature memory bank,在测试时所有patch都可以访问该内存库。 PaDiM 是针对每个 patch 的马氏距离度量。 相比之下, PatchCore对图像对齐的依赖性降低。
- 特征提取:特征表示为何不选择网络特征层次的最后一级:(1)会丢失更多的局部正常样本信息;(2)深层特征具有更强的语义信息,偏向于分类任务。
没有合适的资源?快使用搜索试试~ 我知道了~
经典缺陷检测算法整理,包含PaDiM、PatchCore、SimpleNet、EfficientAD
共41个文件
py:32个
md:4个
txt:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 2 下载量 126 浏览量
2024-03-08
15:44:58
上传
评论 2
收藏 41.72MB ZIP 举报
温馨提示
经典缺陷检测算法整理,包含PaDiM(2020ICPR)、PatchCore(2022CVPR)、SimpleNet(2023CVPR)、EfficientAD(2023) PaDiM 问题 异常检测:实际应用中缺乏异常样本,并且异常可能会有意想不到的模式,不能使用完全监督的方法训练模型,即训练数据集仅包含正常类的图像。 目前的单类别学习模式的异常检测模型要么需要训练深度神经网络,非常麻烦。要么测试阶段在整个训练集上使用K最近邻算法,KNN算法线性复杂度的特点导致随着训练集的增大,其时间和空间复杂度也随之增大。 创新 PaDiM利用预训练好的CNN进行embedding提取,并且具有以下两个特点:(1)每个patch位置都用一个多元高斯分布来描述。(2)PaDiM考虑到了CNN不同语义层之间的关联。 此外,在测试阶段,它的时间和空间复杂度都比较小,且独立于训练集的大小,这非常有利于工业部署应用。对于异常检测和定位任务,在MVTec AD和ShanghaiTec Campus两个数据集上,PaDiM超越了现有SOTA方法(2020年本文提出时)。
资源推荐
资源详情
资源评论
收起资源包目录
Defect_detection-master.zip (41个子文件)
Defect_detection-master
EfficientAD
benchmark.py 3KB
pretraining.py 15KB
efficientad.py 23KB
common.py 5KB
test.py 712B
README.md 5KB
LICENSE 11KB
readme.md 8KB
SimpleNet
utils.py 6KB
backbones.py 4KB
metrics.py 4KB
main.py 12KB
datasets
__init__.py 0B
cifar10.py 4KB
btad.py 6KB
sdd.py 5KB
mvtec.py 7KB
sdd2.py 5KB
common.py 8KB
resnet.py 15KB
run.sh 643B
imgs
cover.png 212KB
README.md 2KB
simplenet.py 27KB
Padim
__init__.py 0B
main.py 13KB
fungai.py 1KB
datasets
__init__.py 0B
mvtec.py 5KB
pth
resnet18-5c106cde.pth 44.66MB
test.py 8KB
main_nom.py 12KB
PatchCore
requirements.txt 95B
sampling_methods
kcenter_greedy.py 4KB
get_roi.py 931B
change_data.py 383B
sampling_def.py 1KB
train.py 23KB
test.py 17KB
README.md 5KB
mvsdk.py 87KB
共 41 条
- 1
资源评论
- xiaoqi0070072024-05-07资源内容详细,总结地很全面,与描述的内容一致,对我启发很大,学习了。
- 叽呀咕2024-04-21资源内容总结的很到位,内容详实,很受用,学到了~
程序员柳
- 粉丝: 8180
- 资源: 1469
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功