CFA【异常检测:Embedding_based】

前言

排名第二(这是papers with code统计的发表在MVTec数据集的论文排名。)

模型原理

思想:以往采用的记忆库的方式做异常检测都采用预训练网络,CFA也是,但同时也会有针对正常数据集的训练,这样可以避免预训练网络范化性太强带来的偏差。还提出了一种记忆库的制作方法,可拓展到任意大小的记忆库。

耦合超球体的含义可以从这篇论文中理解到,相当于那种电子原子结构,原子是记忆库,电子是训练集或测试集。

迁移学习:ResNet是在大的自然数据集上训练出来的,具备了先验知识,可以提取得到图像的先验特征。就是个预训练网络提取特征,叫迁移学习是做个包装罢了。

文中出现的量按官方给的取,比如张量,CNN的选择等,这样想着能好理解一些。

Patch descriptor及之前的操作

之前的操作

正常图像数据集经ResNet网络提取特征,形成三个张量[4,64,56,56],[4,128,28,28],[4,256,14,14],每个张量经平均池化,后两个张量再经上采样,三个张量合并后形成张量[4,448,56,56]。

Patch descriptor

构建两个张量xx/yy:[4,1,56,56],内部数值(0~55)如下,yy张量相当于xx的转置。再将内部的每个数值除55乘2减1,合并到张量[4,448,56,56]形成[4,450,56,56]。经卷积形成张量[4,448,56,56],取名为A1

Compression-->Memory bank

一个batch为4,可以形成A1,将所有的A1求平均形成张量[1,448,56,56],再转化为张量[448,3136],取名为B1

上面是源码中的一个方法,原论文还介绍了一种数据库更新方法,也在源码中有体现,但默认没使用。

NN Search

A1张量转化形状[4,3136,448]后,其中每个值求平方再在维度层面相加形成张量A2[4,3136,1];B1张量每个值求平方再在维度层面相加形成张量B2[1,3136]。A2与B2相乘再乘2(可以想象一下两个矩阵的相乘,相当于每张图的像素值与总体图的像素值乘了一下。)形成张量C1[4,3136,3136],A2与B2相加(以矩阵相乘的形式相加)形成张量C2。

C2-C1形成D1,D1求根号以行为方向每个像素位置处返回最小的K(3)个值(形成超球),通过softmin为这三个值加权,再取第一个值形成张量D2[4,3136,1],形成分数图S[4,1,56,56]。

损失函数

上面的操作返回6个,选前3个 使用损失函数(Euclidean distance)\pounds_{att},选后3个使用损失函数(Hard negative features)\pounds_{rep}

用两个损失函数,一个从圈(超参数r)外让超球逼近r,一个从圈内让超球逼近r,两者结合再利用超参数\alpha限制一下,达到训练效果。

在一个像素位置会产生许多超球,这里只是选择最小的三个值构成超球,在这三个值中,任何一个都可能在后三个超球里,这样不就在检测异常区域时使得该区域检测不稳定了,所以加入后三个值的训练使这个模糊的值也限制住(理解的,不一定对...)。

实验

对比实验:在MVTec和RD-MVTec(数据增强后的)数据集上用不同模型做实验。

消融实验:使用不同损失函数/不同的记忆库大小/不同的backbone。

补充

PatchCore/PaDiM/SPADE(采用类似的记忆库的方法。)

问题(请教请教啊,搞不懂--_--)

Patch descriptor 里的维度增加了两个由448到500,那个操作是为了什么呢?

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值