最近,我阅读了Learning Memory-guided Normality for Anomaly Detection一文,对其中的Feature compactness和Separateness losses两种更新Memory的方法有了一些自己的看法,具体如下:
(注:以下内容仅做科学研究)
在进行异常检测时,通常会面临在大量数据中判断出少部分的异常信息,因此异常检测被认为是一种无监督学习。
在本篇文章中,整个框架包括编码器、存储模块、解码器,文章主要通过CNN,对输入视频帧进行重建,并将得到的结果进行下一步测试。在测试中,如果具有较大的重建误差的视频帧则会被认为是异常视频帧。
在进行视频帧的重建时,文章引入了两种办法,分别为Feature compactness和Separateness losses。通过上述两种办法对特征进行进一步处理,进而提高正确样本的多样性和判别异常的能力。
在对视频帧进行测试时,文章提出了一种新的Memory更新方式,确保更新的特征是正确的。
在视频的检测中,正常情况是多种多样的,因此单一的原型特征是无法表示所有的正常情况,因此需要输入多个原型特征对正常情况进行更新。在一个原型视频帧中会存在多个特征,本篇文章在识别异常行为时,引入了一个Memory模块。Memory中的每一个项目对应一个原型视频帧中的特征。Feature compactness就是将新输入的正常视频帧中的特征与内存模块中现有的与其最接近的项目相融合,从而简化CNN的工作量,进一步提高内存中项目的容量。
(注:可结合下文公式进行理解。)
为了解决Feature compactness中所需要的新输入特征与其最接近特征相融合,文章采取了Separateness losses的办法。根据计算各特征之间的L2距离,可以保证特征与其最接近项目的距离最小化,同时使得与其第二接近的项目距离最大化,从而降低对融合干扰性最强的项目的影响。将Memory中的单个项目分开,增强特征和记忆项目的辨别能力。
(注:可结合下文公式进行理解。)
为了防止将异常视频帧中的特征与原有特征相融合,文章引入了一种判断是否存在异常情况的加权分数,当加权分数高于阈值时,该视频帧会被判断为异常视频帧,从而不会对Memory中的项目产生影响。
文章为了区分正常视频帧与异常视频帧,引入了一种评分规则,利用 Reconstruction, Feature compactness,Feature separateness losses来计算最终得分。具体公式如下:
Reconstruction loss通过计算解码器输出的视频帧与原始视频帧的L2距离,视频帧的总时间为T,将所有视频帧的L2距离累加,得到Reconstruction loss分数。具体公式如下:
Feature compactness loss通过计算输出视频帧中的特征与Memory中已有项目的L2距离,并累加计算出最终的Feature compactness loss分数。具体公式如下:
其中p为查询索引。具体公式如下:
公式中argmax是对函数求参数(集合)的函数,即得到所有与当前特征匹配概率最大的原型特征,进而可以计算他们之间的L2距离。
类似的特征应该被分配到与其最相似的Memory项目中,以减少项目的数量和大小。为了更精准的分配特征,应该将Memory中的项目尽可能彼此相距够远。因此文章提出了Feature separateness loss,将重构视频帧中的特征与其最接近的项目L2距离最近,与第二接近的项目L2距离最远,以达到降低对其特征融合的影响。具体公式如下:
其中n与上文中的p类似。具体公式如下:
公式中针对m设定为不等于p,因此表示为与其第二接近的Memory项目。
当解码器输出重建视频帧帧后,会对其进行异常得分计算,异常得分的公式如下:
文章将异常得分分为了两个部分,一部分为PSNR值,另一部分为输入视频帧与Memory项目的相似程度,之后将两个得分进行归一化处理,得到最终结果。下面具体介绍这两种计算方法:
具体公式如下:
公式的输入为重构视频帧与原型视频帧,输出为该视频帧的PSNR值。公式中N代表视频帧的像素数,当重构视频帧为异常视频帧时,PSNR数值较低,反之亦然。
具体公式如下:
公式的输入为重构视频帧的特征以及Memory中的原型特征,通过计算他们之间的加权L2距离,如果其特征为异常特征,则得分较高,反之亦然。
具体公式如下:
将上述两种得分作为输入,输出的结果为每个误差在[0,1]范围内的归一化,方便进行运算。
1.文章使用多个原型特征代表正常情况的多种情况,并对输入视频帧进行无监督的异常检测,因此引入Memory模块,在模块中添加多个项目记录正常视频帧的特征。
2.文章提出Feature compactness和Separateness loss来训练Memory模块,以实现项目的多样性和辨别异常的能力。在测试阶段,提出了异常得分,通过计算距离和PSNR值,判断重构视频帧是否为异常视频帧。
可参考:
可参考:模型介绍
可参考:代码解析