在异常检测这个方向上,绝大多数的算法都是基于无监督学习的,这些算法认为,只能获得正常品而无法获取异常样本。但实际的情况往往是少量的异常样本是可以获取的,那么这些无监督算法就不能够利用到这些已知异常的特征。
于是一少部分的异常检测算法针对这种极少量异常暴露的情况展开了研究,其中《Catching Both Gray and Black Swans: Open-set Supervised Anomaly Detection》是比较有代表性的,它提出了模型DRA(disentangled representations of abnormalities)将异常分为三类:已经见过的异常、近似于人工生成异常的异常和未见过的异常。模型通过在一个CNN特征提取器上增加三个独立的异常检测头,分比用于检测这三种异常。
1. Abnormality Learning with Seen Anomalies
作者认为,异常图像中的大多数patch的特征与正常图像是一致的,仅有少量特征属于异常特征,因此,top-K multiple-instance-learning (MIL) -based method被采用,仅对异常分数最高的特征计算损失。这里的yx是图像的标注,gs在文章中没有明确说明,应该是与这篇文章《Explainable deep few-shot anomaly detection with deviation networks.》所设定的一致。
在这里我有一点疑问,当我的异常图像数量很少的时候,我能够对这个头进行充分的训练吗?
2. Abnormality Learning with Pseudo Anomalies
在这一部分,作者通过《Cutmix: Regularization strategy to train strong classifiers with localizable features》中的cut-mix的方法生成了一系列的伪异常,同样是基于监督学习的方式训练这个头。
这部分就有很多的类似方式了,有一系列的异常检测算法就是通过生成伪缺陷图像进行训练的,我觉得这里也可以换成其他的类似方式。
3. Abnormality Learning with Latent Residual Anomalies.
这个头使用reference samples和已知异常及伪异常训练。经过特征提取器后,将特征与reference samples得到的特征相减。这里我有另一个疑问,特征图直接按位置相减是否合适?这样的作法是否会影响到特征的平移不变性?
4. 正常样本头
上述的三个头专注于学习各种异常的特征表示,对正常样本的特征没有很好的建模,因此引入了第四个头,在这里,所有的特征都被用于计算损失,因为正常样本中的所有特征都表达了“正常”这一特性
综合:在训练过程中,已知异常被送入head1和head3, 生成异常被送入head2和head3,正常样本被送入head1,head2,head3,head4,经过训练后,我的理解是,head1输出一个样本属于已知异常的分数,head2输出该样本为合成异常的分数,head3输出该样本为异常的分数(通过与参考样本做差得到的残差特征),head4输出该样本为合格样本的分数。将前3个头的分数相加,减去最后一个头的分数,得到最终的分数。头的结构很简单,特征提取器输出是512维的特征,头对该特征进行1x1的卷积,就得到了每个patch的异常分数,经过2层全连接,就得到了图像的异常分。
理解:这个模型类似于训练了4个图像分类网络,区别在于它的特征提取部分是共享权重的。