论文题目:PANDA: Adapting Pretrained Features for Anomaly Detection and Segmentation
文章地址:https://arxiv.org/abs/2010.05903
代码地址:https://github.com/talreiss/PANDA
一、论文简介
1.1论文主要贡献
-
在图像异常检测和分割任务上,证明了一个简单的基线优于目前所有的方法(论文发表于21年)。
-
确定流行的SOTA方法(DeepSVDD)在OCC特征适应方面并不优于线性白化(白化的目的是去除输入数据的冗余信息)。
-
提出了三种有效的防止模型坍塌的方案。
1.2主要任务:
-
异常检测:训练过程中只有正常样本,检测异常样本。
-
异常分割:训练过程中只有正常样本,检测所包含的异常像素,如下图。
-
离群值暴露(Outlier Exposure):训练过程中包含一个辅助的异常数据集。
二、异常检测和分割的一般框架和简单基线
2.1异常检测和分割的一般框架
模型的总体框架(基本步骤):
-
Initial feature extractor初始特征提取器(预训练)
-
Feature adaptation特征自适应(微调)
-
Anomaly scoring异常得分
2.2简单基线
基于作者的模型框架,提出两个简单基线,跳过框架步骤2,只利用一个预训练的模型(例如在ImageNet上预训练的ResNet),不微调,直接将这个模型作为特征提取器,然后结合简单的KNN算法判断样本的正常/异常类别,就能超过许多SOTA的模型。
异常检测的简单基线 Deep Nearest Neighbors(DN2)
特点:
-
预训练模型是ImageNet数据集训练好的大型ResNet(resnet18、resnet34、resnet50….)
-
不微调
-
对于每个测试图像,将得到的特征向量通过kNN算法进行类别预测,计算AUC
下图是DN2在不同数据集上的实验结果
从表3可以看出,自监督方法在小数据集上的表现并不好,因为这种方法需要大量的正态样本来学习强特征。另一方面,Imagenet预训练的特征得到了非常强的结果。
异常分割的简单基线 Semantic Pyramid Anomaly Detection (SPADE)
- 预训练模型是ImageNet数据集训练好的的大型ResNet来提取逐像素特征。并且把预训练模型中多个神经层的feature进行了拼接(目的在于得到low-level的feature以及high-level的feature)
- 不微调
- 对于每个测试图像,将得到的特征向量用KNN distance来判断某个像素的正常/异常类别
下图是SPADE与一些基线模型的对比实验结果
三、异常检测的特征自适应
虽然两个简单实现的基线DN2和SPADE取得了非常强的结果,但我们想知道特征适应(微调)是否可以进一步改进它们。首先回顾了现有的两种用于异常检测的特征自适应方法,并提出了论文的方法PANDA。
3.1 背景:现有的特征自适应方法
Deep SVDD
在正常样本上训练一个Autoencoder,然后将Autoencoder中Encoder部分作为微调阶段模型,将所有训练数据通过该模型获取的表示向量求均值代表圆心。
在微调阶段,DeepSVDD利用loss function使得样本的表示尽可能接近于中心点 。
缺点是可能会造成超球坍塌:
在DeepSVDD神经网络中,偏置项bias要保持为0,否则可能会导致超球坍塌。
例如:y=w*x+b
若偏置像b不设置为0,则w可以都学习为0,b等于超球圆心c,那么所有样本都映射到c点,导致区分不出正常和异常样本,也就是超球坍塌。
(DeepSVDD中特征的自适应效果并不优于简单的特征白化,如下图所示)
Joint optimization
在DeepSVDD基础上加上预训练任务中的分类loss,W代表分类的线性层,y是真实标签,α是超参数加权的值。
目的:既要保证分类的效果,又要所有样本都靠近圆心。
该方法有两个主要缺点:
1)它需要保留大量的原始训练图像,微调时需要用预训练数据集;
2)联合训练两个任务可能会降低异常检测任务的准确性,很难同时达到最优。
3.2 PANDA模型:pretrained Anomaly Detection Adaptation
PANDA模型同样使用compactness loss,但是没有用DeepSVDD中偏置设为0或者JO中在Loss中加入外部数据,而是直接为处理模型坍塌提出三种方法:
1.PANDA-Early
2.PANDA-SES
3.PANDA-EWC
1.Simple early stopping (PANDA-Early)
是在一定次数的迭代后停止训练(例如CIFAR10上的15个epoch),把epoch当成超参数,把epoch设置在模型坍塌之前。
缺点:遇到新数据集必须自己调参数。
2.Sample-wise early stopping (PANDA-SES)
在训练阶段,每间隔固定周期(5次epoch)存储一个模型权重模型。
对于每个模型,计算训练样本到中心点的平均距离记为train。
对于每个模型,计算测试样本到中心点的距离记为normal或anomal。
然后,除以train对其标准化,记为r。
最后,将r最大的作为这个测试样本的异常分数,通过这种方式大致确定最佳分离正常和异常样本的模型。
3.Continual Learning (PANDA-EWC)
EWC: Elastic Weight Consolidation 可塑权重巩固
持续学习的任务是在不忘记以前学过的东西的情况下学习新的任务。防止特征崩溃的一个简单解决方案是对特征提取器权重值的变化进行正则化。
然而,这个解决方案是有问题的,因为神经网络不同的权重的重要性不一样,因此加入费雪矩阵Fθ改善,强调重要的参数。
3.3 Outlier Exposure(离群值曝光)
对典型图像异常检测任务的扩展,在ResNet最后加入一个线性分类层。
假设存在一个图像辅助数据集D_OE,该数据集比正常数据更接近异常。正常数据标签为0,D_OE数据标签为1,利用BCELoss训练分类层:
四、实验结果分析
直接用预训练+kNN的DN2模型就已经比基线模型要好,PANDA模型(PANDA-EWC)优势更明显,并且OE效果也较好。
作者也探究了PANDA的三种变体:PANDA-Early,PANDA-SES以及PANDA-EWC的对比效果。实验发现这三种方法都优于Joint Optimization (JO)方法,且PANDA-EWC整体而言更优。此外,作者还发现如果将fisher information matrix设为等权,EWC方法将会退化为early stopping方法
五、论文总结
-
验证了直接用预训练模型提取的特征可以直接做异常检测,并且论文所提出的模型优于基线的方法。
-
提出的PANDA-EWC可以有效地解决模型坍塌的问题,但PANDA-Early和PANDA-SES两种方式并没有从根本上解决模型坍塌的问题,更像是调参数的操作。
-
代码库中作者只提供了Resnet152对应的费雪矩阵,因此想要换别的Resnet模型需要自己下载Imagnet数据去求解费雪矩阵。
常检测,并且论文所提出的模型优于基线的方法。
-
提出的PANDA-EWC可以有效地解决模型坍塌的问题,但PANDA-Early和PANDA-SES两种方式并没有从根本上解决模型坍塌的问题,更像是调参数的操作。
-
代码库中作者只提供了Resnet152对应的费雪矩阵,因此想要换别的Resnet模型需要自己下载Imagnet数据去求解费雪矩阵。