1. 算法详细过程
人类能够在一组同质自然图像中检测出异质或意外的模式。这种任务被称为异常检测,并有大量的应用, 目前异常检测主要应用在不可预期目标上的检测, 其中典型的代表是工业瑕疵检测。
算法详细思路:
(1)Embedding extraction
选择使用一个预先训练好的CNN来生成patch嵌入向量,在训练阶段,正常图像的每个patch补丁与预先训练的CNN激活图中其空间对应的激活向量相关联。然后,将来自不同层的激活向量连接起来,得到携带来自不同语义层次和分辨率的信息的嵌入向量,以便对细粒度和全局上下文进行编码,由于激活图的分辨率低于输入图像,因此许多像素具有相同的嵌入,然后形成与原始图像分辨率没有重叠的像素块。因此,可以在(i,j)∈[1,W]×[1,H]位置的网格中划分输入图像,其中w,h是用于生成嵌入的最大激活图的分辨率。
生成的patch嵌入向量可能携带冗余信息,因此可以使用随机选择特征维度或者用PCA降维技术以此降低模型的复杂性。
同质自然图像中检测出异质或意外的模式。这种任务被称为异常检测,并有大量的应用, 目前异常检测主要应用在不可预期目标上的检测, 其中典型的代表是工业瑕疵检测。
(2)Learning of the normality
为了学习位置(i, j)处的正常图像特征,我们首先从N幅正常训练图像中计算在(i, j)处的patch嵌入向量集合, Xij= {xk ij, k∈[1,N]},如图2所示。将集合所携带的信息进行汇总,我们假设由多元高斯分布N(µij, Σij)产生的Xij,其中µij是样本均值,∑ij样本协方差估计如下:
上图所示。对于最大的CNN特征图中位置(i, j)对应的每个图像patch, PaDiM从N个训练嵌入向量Xij= {xk ij, k∈[1,N]}的集合中学习高斯参数(µij, Σij),这些向量是从N个不同的训练图像和三个不同的预训练CNN层计算出来的。我们的Patch嵌入向量携带来自不同语义层次的信息。因此,每一个估计的多元高斯分布N(µij, Σij)也捕获了不同层次的信息,并且Σij包含了层次间的相关性。
(3)Inference : computation of the anomaly map
使用马氏距离给测试图像位置(i, j)的patch一个异常分数:M(i,j)
M(xij)可以解释为嵌入xij的测试patch与学习分布N(µij, Σij)之间的距离,其中M(xij)的计算公式如下:
3. 应用场景
不可预期类目标检测:
(1)工业瑕疵检测
(2)静态摄像头的视频监控: 比如行人区出现车辆或人们打斗
4. 评估
(1)接收机工作特征曲线(AUROC)下的面积
(2) 每个区域重叠分数(PRO-score)
实验效果:
(1)STC 结果
(2)MVTECAD结果