在上一篇博客异常检测经典论文:《Catching Both Gray and Black Swans: Open-set Supervised Anomaly Detection》阅读笔记-1_explainable deep fewshot anomaly detection with de-CSDN博客中介绍了一种名为DRA的网络结构(disentangled representations of abnormalities),将异常分为三类:已经见过的异常、近似于人工生成异常的异常和未见过的异常。模型通过在一个CNN特征提取器上增加三个独立的异常检测头,分比用于检测这三种异常。
其中的已见异常和人工异常训练过程中的损失函数是如下定义的,在异常图像的所有patch中,选择其中异常分数最高的k个patch进行损失计算。这样做的原因是,异常图像中的多数patch也是与正常图像的特征一致的,也就是说,有问题的异常区域只是图像的一部分。
这里的异常分数作者没有详细的说明,其来源于《Explainable Deep Few-shot Anomaly Detection with Deviation Networks》,这篇文章的核心就是训练一个异常评分网络,为每个输入的patch生成一个标量的异常分。其提出的网络名为DevNet.
异常评分网络的训练之前,首先要对异常分数进行指导,(或者说是进行数据的标注),这篇文章中提出了一个“参考分数生成器”,通过对随机选择的一些样本的异常分数进行统计,获得异常分数的均值方差,然后对异常评分网络进行优化,使正常patch的异常分数接近于平均值,使异常patch的分数更显著的高于正常值。因为所提出的异常分评分网络是完全可微的,所以异常分可以反向传播到原始像素,用以指出哪些像素是异常的主要因素。
DevNet这篇文章我没有仔细研读了,也没有测试其代码。毕竟是21年的文章了,有些老了。其基于统计分布的思想和用异常分数替代异常特征的做法也被后续的文章证明了不是最佳的方案。 DRA网络可以看作是对DevNet的一个优化,其四个异常检测头中的“已知异常检测头”与DevNet作用接近。
效果测试:在我的这篇博客所提出的数据集上测试了DRA网络的得分,Win11+docker+vscode配置anomalib并训练自己的数据(3)_anomalib训练自己的数据集-CSDN博客,其分数为0.88,与EfficientAD接近(经典无监督模型),这些暴露的异常样本并未能帮助模型取得更高的分数。