patchcore论文地址
简介
略
算法
Locally aware patch features
样本用
x
x
x表示 label定义:0是正常样本(nominal),1是异常样本(anomalous)。
y
x
∈
{
0
,
1
}
y_x \in \{ 0 , 1\}
yx?∈{0,1} 训练阶段使用正常样本 :
?
x
∈
X
N
:
y
x
=
0
{\forall} x \in X_N : y_x=0
?x∈XN?:yx?=0 测试阶段样本:
?
x
∈
X
T
:
y
x
∈
{
0
,
1
}
{\forall x \in X_T : y_x \in \{0 ,1\}}
?x∈XT?:yx?∈{0,1}
patchcore使用在ImageNet上的预训练网络,用符号
?
\phi
?表示
符号
?
i
j
=
?
j
(
x
i
)
\phi_{ij} = \phi_j(x_i)
?ij?=?j?(xi?)表示第
i
i
i个样本
x
i
∈
X
x_i \in X
xi?∈X在网络
?
\phi
?第
j
j
j层feature map 本文使用ResNet50最终输出的spatial resolution blocks的第
j
∈
{
1
,
2
,
3
,
4
}
j\in \{ 1,2,3,4\}
j∈{1,2,3,4}层
采用网络最后几层输出会出现的问题:
- Firstly, it loses more localized nominal information [14].As the types of anomalies encountered at test time are not known a priori, this becomes detrimental to the downstream anomaly detection performance.
- very deep and abstract features in ImageNet pretrained networks are biased towards the task of natural image classification, which has only little overlap with the cold-start industrial anomaly detection task and the evaluated data at hand.
本文采用a memory bank
M
M
M(在 patch level),避免过多的偏向imageNet
记第
i
i
i张图片,第
j
j
j层的特征图为
?
i
j
∈
R
c
×
h
×
w
\phi_{ij} \in R_{c \times h\times w}
?ij?∈Rc×h×w? 特征图上的点用
?
i
j
(
h
,
w
)
=
?
j
(
x
i
,
h
,
w
)
\phi_{ij}(h,w) =\phi_j(x_i,h,w)
?ij?(h,w)=?j?(xi?,h,w)
each patch-representation operates on a large enough receptive field size to account for meaningful anomalous context robust to local spatial variations. 本文采用感受野更大的patch(而不是特征图上的点)
This motivates a local neighbourhood aggregation when composing each patch-level feature representation to increase receptive field size and robustness to small spatial deviations without losing spatial resolution or usability of feature maps.
记点
(
h
,
w
)
(h,w)
(h,w)周围的点集为: 这个公式可以理解为 以
(
h
,
w
)
(h,w)
(h,w)为中心,以
p
p
p为直径的正方形包围住的点 那么围绕这些点计算的特征图上的点为 locally aware patch-feature collection 可以表示为: 其中 striding parameter: s 最后 PatchCore memory bank 可以理解为 所有训练集的图片上所有的点
(
h
,
w
)
(h,w)
(h,w) 以这个点为中心计算它的邻居点集,得到的特征值 这些特征值的集合作为PatchCore memory bank
Coreset-reduced patch-feature memory bank
根据上面计算的PatchCore memory bank直接用是不现实的,因为太大了。所以需要计算一个
M
C
M_C
MC?(小一点的)d代替
M
M
M 什么样的子集能代替原来的集合呢? 首先取任意一个子集
M
C
M_C
MC?
- 公式
min
?
∣
∣
m
?
n
∣
∣
2
\min || m - n||_2
min∣∣m?n∣∣2? 的含义:计算集合
M
M
M中每一个点
m
m
m到子集
M
C
M_C
MC?的距离
(一般点到集合的距离,定义为该点到集合内所有点的最小距离) - 公式
max
?
\max
max是指在
M
M
M中找到距离
M
C
M_C
MC?最大的点
- 最终求得距离集合
M
M
M最近的集合
M
C
?
M_C^*
MC??
具体的算法
Anomaly Detection with PatchCore
对于测试图片
x
t
e
s
t
x^{test}
xtest,计算测试图片的patch-feature 得到
m
t
e
s
t
m^{test}
mtest 和上面的过程一样,还是求集合
P
(
x
t
e
s
t
)
P(x^{test})
P(xtest)到集合
M
M
M的距离,标记距离的两个点为
m
t
e
s
t
,
?
∈
P
(
x
t
e
s
t
)
,
m
?
∈
M
m^{test,*} \in P(x^{test}),m^*\in M
mtest,?∈P(xtest),m?∈M 解释
- 公式
arg?min
?
∣
∣
m
t
e
s
t
?
m
∣
∣
\argmin||m^{test}-m||
argmin∣∣mtest?m∣∣计算的是 点
m
t
e
s
t
m^{test}
mtest到集合
M
M
M的距离
- 然后找到距离最远的点
m
t
e
s
t
,
?
m^{test,*}
mtest,?
计算分数
N
(
m
)
N(m)
N(m)是指
m
?
m^*
m?的最近邻点集,这里实际上是计算了 一个softmax
|