patchcore: Towards Total Recall in Indus

论文地址
简介

算法
aware patch
样本用 x x x表示
【patchcore: Towards Total Recall in Indus】label定义:0是正常样本(),1是异常样本() 。y x ∈ { 0 , 1 } y_x \in \{ 0 , 1\} yx?∈{0,1}
训练阶段使用正常样本 :? x ∈ X N : y x = 0 {\} x \in X_N : y_x=0 ?x∈XN?:yx?=0
测试阶段样本:? x ∈ X T : y x ∈ { 0 , 1 } {\ x \in X_T : y_x \in \{0 ,1\}} ?x∈XT?:yx?∈{0,1}
使用在上的预训练网络,用符号 ? \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层 map
本文使用最终输出的的第 j ∈ { 1 , 2 , 3 , 4 } j\in \{ 1,2,3,4\} j∈{1,2,3,4}层
采用网络最后几层输出会出现的问题:
, it loses more[14].As the types ofat test time are not known a , thisto the.very deep andinarethe task ofimage , which has onlywith the cold-starttask and thedata at hand.
本文采用abankM M M(在 patch level),避免过多的偏向
记第 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)

patchcore: Towards Total Recall in Indus

文章插图
each patch-on a large
field size toforto local.
本文采用感受野更大的patch(而不是特征图上的点)
Thisa localwhen
each patch-leveltofield size andto smallorofmaps.
记点 ( h , w ) (h,w) (h,w)周围的点集为:
这个公式可以理解为 以 ( h , w ) (h,w) (h,w)为中心,以 p p p为直径的正方形包围住的点
那么围绕这些点计算的特征图上的点为
aware patch-可以表示为:
其中: s
最后bank
可以理解为 所有训练集的图片上所有的点 ( h , w ) (h,w) (h,w)
patchcore: Towards Total Recall in Indus

文章插图
以这个点为中心计算它的邻居点集,得到的特征值
这些特征值的集合作为bank
- patch-bank
根据上面计算的bank直接用是不现实的,因为太大了 。所以需要计算一个 M C M_C MC?(小一点的)d代替 M M M
什么样的子集能代替原来的集合呢?
首先取任意一个子集 M C M_C MC?
具体的算法
with
对于测试图片 x t e s t x^{test} xtest,计算测试图片的patch- 得到 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
解释
计算分数
N ( m ) N(m) N(m)是指 m ? m^* m?的最近邻点集,这里实际上是计算了 一个