第一弹 多分辨率知识蒸馏的异常检测

939 阅读2分钟
  • 作者:陈亦新(欢迎交流共同进步)

  • 联系方式:微信cyx645016617

  • Multiresolution Knowledge Distillation for Anomaly Detection [TOC]

1 概述

当前无监督表示学习Unsupervised representation learning已经成为当前图像异常检测/定位的重要部分,这种学习表示法具有两方面的挑战:

  1. 样本量通常不够大,无法通过传统技术学习到丰富的可泛化表示(a rich generalizable representation);
  2. 虽然训练中只有正常样本,但是需要学习到的特征应该可以区分正常和异常样本(be discriminative of normal and anomalous samples).

研究方法提出,基于以上的情况,作者提出使用在ImageNet上预训练的专家网络VGG16的各个层的特征distillation蒸馏到一个更简单的克隆网络中解决这两个问题。作者使用给定输入数据的专家和克隆网络的中间激活值之间的差异来检测和定位异常。

那么如何在没有异常数据的情况下,来识别到异常样本呢?其实这里用了一个trick。整个训练是一个从source network向cloner network蒸馏的过程。source network是一个imagenet预训练的模型,而cloner network是一个完全随机初始化的模型。现在我们用正常样本进行蒸馏学习,这样cloner network在正常样本上与source network的认知是一致的。那么假设来了一个异常样本,source network因为看到的图像更多,经验更丰富,所以对于异常样本的反应,肯定与cloner network(一个只见过正常样本的模型)的反应不同。因此这个时候,通过观测两者的激活值的不同,就可以确认出异常的区域位置。

2 损失函数

损失函数包含两个部分:

其中第一部分如下:

LvalL_{val}的目标是最小化source network和cloner network的激活函数值的欧式距离。CP表示critical layer。

相当于每一个关键层都进行蒸馏的学习模仿。(student 模仿 teacher)

第二部分LdirL_{dir}来增加activation vectors的directional similarity,因为相同欧式距离的两个向量可能会产生不同的行为在后续的神经元影响下。作者还举了一个简单的例子:

总之第二部分损失函数公式为:

这里留一个问题:vec()这个函数是把特征图转化1-D特征的方法。论文中没有具体说明,这个如何实现要从代码中来学习。