精华内容
下载资源
问答
  • anomaly detection
    2022-06-08 20:46:16

    Time-Series Anomaly Detection Service at Microsoft

    前言

    论文原文:Time-Series Anomaly Detection Service at Microsoft,KDD 2019

    「异常检测」旨在发现数据中的意外事件或罕见项目。它在许多工业应用中非常流行,是数据挖掘中的一个重要研究领域。

    为了解决时间序列异常检测的问题,作者提出了一种基于 谱残差(SR) 以及 卷积神经网络(CNN) 的新算法。首次尝试将 SR 模型从视觉显著性检测领域借用到时间序列异常检测中。此外,作者创新性地将 SRCNN 结合起来,以提高 SR 模型的性能。

    主要用于微软一个时间序列异常检测服务,帮助客户连续监测时间序列,并及时提醒潜在的事件。

    INTRODUCTION

    Challenge

    1. 缺乏标签。序列标注成本高。为了为单个业务场景提供异常检测服务,系统必须同时处理数百万个时间序列。此外,时间序列的数据分布是不断变化的,这需要系统识别异常情况,即使以前没有出现过类似的模式。
    2. 泛化能力。需要监控来自不同业务场景的各种时间序列,目前没有很好的通用解决方法。
    3. 效率。在业务应用程序中,监控系统必须接近实时地处理数百万个,甚至数十亿个时间序列,并且实时性要求高。

    CONTRIBUTIONS

    {% note success no-icon %}

    1. 在异常检测领域中,首次采用了视觉显著性检测技术来检测时间序列数据中的异常。
    2. 结合了 SR 模型和 CNN 模型,以提高时间序列异常检测的精度。
    3. 从实际角度来看,该方案具有较好的通用性和效率。它可以很容易地与在线监控系统集成,从而为重要的在线指标提供快速警报。

    {% endnote %}

    SR (Spectral Residual)

    Spectral Residual(光谱残差)是一种基于快速傅里叶变换的方法,是一种无监督方法。

    Spectral Residual 原理:

    自然图像的统计特性具有变换不变性:即将图像从原来的空间坐标变换到频率坐标系中,图像在空间中具有的统计特性在频域中仍然保留,这种不变性恰好保证了采用能量谱来刻画自然图像空间相关性的可靠性。

    从信息论的角度出发,一张图像信息可以如下表示:

    H ( Image ) = H ( Innovation ) + H ( PriorKnowledge ) H(\text{Image})=H(\text{Innovation}) + H(\text{PriorKnowledge}) H(Image)=H(Innovation)+H(PriorKnowledge)

    H ( Innovation ) H(\text{Innovation}) H(Innovation)表示新奇的部分, H ( PriorKnowledge ) H(\text{PriorKnowledge}) H(PriorKnowledge)表示冗余部分。因此在进行检测时,应该首先去掉冗余部分。

    SR 模型所做的事情也就是去除冗余部分,保留新奇部分。

    Log spectrum representation

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h8QnsyxW-1654692356174)(https://static.emoryhuang.cn/webp/4100034120-sr-0.webp)]

    在自然图像统计的不变因子中,尺度不变性是最著名和研究最广泛的性质,它也被称为 1/f 定律。它表明,自然图像集合的平均傅里叶光谱的振幅 A ( f ) \mathcal{A}(f) A(f)服从一个分布:

    E { A ( f ) } ∝ 1 / f E\{\mathcal{A}(f)\} \propto 1/f E{A(f)}1/f

    基于上述事实,作者首先通过对图像进行傅里叶变换,将其从空间域转到频域,对幅值取对数后得到 l o g log log 谱,由于 l o g log log 曲线满足局部线性条件,所以用局部平均滤波器对其进行平滑,获得平均频谱。

    数学解释

    A ( f ) = A m p l i t u d e ( F [ I ( x ) ] ) P ( f ) = P h r a s e ( F [ I ( x ) ] ) L ( f ) = log ⁡ ( A ( f ) ) R ( f ) = L ( f ) − h n ( f ) ∗ L ( f ) S ( x ) = ∥ F − 1 ( exp ⁡ ( R ( f ) + i R ( f ) ) ) ∥ \begin{aligned} \mathcal{A}(f) &= Amplitude \left ( \mathfrak{F}[\mathcal{I(x)}] \right ) \\ \mathcal{P}(f) &= Phrase \left ( \mathfrak{F}[\mathcal{I(x)}] \right ) \\ \mathcal{L}(f) &= \log \left (\mathcal{A}(f) \right ) \\ \mathcal{R}(f) &= \mathcal{L}(f) - h_n(f) * \mathcal{L}(f) \\ \mathcal{S}(x) &= \Vert \mathfrak{F}^{-1}(\exp(\mathcal{R}(f) + i\mathcal{R}(f))) \Vert \\ \end{aligned} A(f)P(f)L(f)R(f)S(x)=Amplitude(F[I(x)])=Phrase(F[I(x)])=log(A(f))=L(f)hn(f)L(f)=F1(exp(R(f)+iR(f)))

    其中 F , F − 1 \mathfrak{F}, \mathfrak{F}^{-1} F,F1分别表示傅里叶变化和傅里叶反变化; I ( x ) \mathcal{I}(x) I(x)表示原图像; A m p l i t u d e ( . ) , P h r a s e ( . ) Amplitude(.), Phrase(.) Amplitude(.),Phrase(.)分别表示振幅和相位; h n ( f ) h_n(f) hn(f) n × n n \times n n×n大小的滤波器。

    SR in time series

    微软主要提出和比较了 SRSR+CNN 方法在时序数据异常检测上的效果,其中 SR 算法唯一的差别是输入变成了时序数据。

    如下图所示,得到了 saliency map 之后,很容易利用一个简单的规则来注释异常点。可以采用一个简单的阈值 τ \tau τ 来注释异常点。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kqhcZrFY-1654692356175)(https://static.emoryhuang.cn/webp/4100034120-sr-1.webp)]

    另外也可以采用动态阈值方法,详见:【论文阅读】Dynamic Error Thresholds

    细节问题

    一般来讲都是采用「滑动窗口」进行异常点检测的,往往我们需要检测的点都是位于一段序列的末端,而 SR 算法当检测的点位于序列中央的时候效果会比较好,因此在进行 SR 计算之前需要对序列进行简单的预测进而延长序列,下面是论文中采用的延长算法:

    g ˉ = 1 m ∑ i = 1 m g ( x n , x n − i ) x n + 1 = x n − m + 1 + g ˉ ⋅ m \bar{g} = \frac{1}{m} \sum_{i=1}^{m} g(x_n, x_{n-i}) \\ x_{n+1} = x_{n-m+1} + \bar{g} \cdot m gˉ=m1i=1mg(xn,xni)xn+1=xnm+1+gˉm

    SR-CNN

    异常注入

    由于 SR 方法是通过简单的手动设置阈值进行分类的,因此可以使用 CNN 这种更加强大的分类器进行分类。但是 CNN 分类的话需要有明确的标签,因此可以通过异常注入的方法来制造标签:

    x = ( x ˉ + m e a n ) ( 1 + v a r ) ⋅ r + x x = (\bar{x} + mean)(1 + var) \cdot r + x x=(xˉ+mean)(1+var)r+x

    在一个实验中,作者收集了具有合成异常的生产时间序列作为训练数据。其优点是,该检测器可以自适应时间序列分布的变化,而不需要手动标记的数据。

    model architecture

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NiXeaFFG-1654692356176)(https://static.emoryhuang.cn/webp/4100034120-sr-2.webp)]

    SR-CNN 网络由两个一维卷积层(滤波器大小等于滑动窗口大小 ω \omega ω)和两个完全连接的层组成。第一个卷积层的信道大小等于 ω \omega ω;而第二个卷积层的信道大小增加了一倍。在 sigmoid 输出之前堆叠了两个完全连接的层。采用交叉熵作为损失函数,在训练过程中采用 SGD 优化器。

    EXPERIMENTS

    Datasets

    • KPI 竞赛数据集。该数据集由多个 KPI 曲线组成,是国内一个比赛的数据集,大部分的数据采集的频率都是一分钟,也有一部分是 5 分钟的。
    • Yahoo 数据集。雅虎是由雅虎实验室发布的异常检测的开放数据集。部分时间序列曲线是合成的(即模拟的);而另一部分则来自于雅虎服务的实际流量。
    • 微软内部数据集。时间序列包括不同的 kpi,包括收入、活跃用户、页面浏览量等。

    实验结果

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QY7sJlUM-1654692356176)(https://static.emoryhuang.cn/webp/4100034120-sr-3.webp)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xO8CHruN-1654692356176)(https://static.emoryhuang.cn/webp/4100034120-sr-4.webp)]

    SR+DNN

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xBLkI3CQ-1654692356177)(https://static.emoryhuang.cn/webp/4100034120-sr-6.webp)]

    Python 实现

    notebook: SpectralResidual

    {% folding SpectralResidual.py %}

    import numpy as np
    
    
    class SpectralResidual:
        def __init__(self, series_window_size, mag_window_size, score_window_size) -> None:
            self.EPS = 1e-8
            self.series_window_size = series_window_size
            self.mag_window_size = mag_window_size
            self.score_window_size = score_window_size
    
        def detect(self, values):
            result = np.array([])
            for i in range(0, len(values), self.series_window_size):
                if i + self.series_window_size > len(values):
                    seg = values[i:len(values)]
                else:
                    seg = values[i:i + self.series_window_size]
                anomaly = self.__detect_core(seg)
                result = np.concatenate((result, anomaly), axis=0)
            return result
    
        def __detect_core(self, values):
    
            extended_series = SpectralResidual.extend_series(values)
            mags = self.spectral_residual_transform(extended_series)
            anomaly_scores = self.generate_spectral_score(mags)
            return anomaly_scores[:len(values)]
    
        def generate_spectral_score(self, mags):
            ave_mag = average_filter(mags, n=self.score_window_size)
            safeDivisors = np.clip(ave_mag, self.EPS, ave_mag.max())
    
            raw_scores = np.abs(mags - ave_mag) / safeDivisors
            scores = np.clip(raw_scores / 10.0, 0, 1.0)
    
            return scores
    
        def spectral_residual_transform(self, values):
            """
            This method transform a time series into spectral residual series
            :param values: list.
                a list of float values.
            :return: mag: list.
                a list of float values as the spectral residual values
            """
    
            trans = np.fft.fft(values)
            mag = np.sqrt(trans.real**2 + trans.imag**2)
            eps_index = np.where(mag <= self.EPS)[0]
            mag[eps_index] = self.EPS
    
            mag_log = np.log(mag)
            mag_log[eps_index] = 0
    
            spectral = np.exp(mag_log - average_filter(mag_log, n=self.mag_window_size))
    
            trans.real = trans.real * spectral / mag
            trans.imag = trans.imag * spectral / mag
            trans.real[eps_index] = 0
            trans.imag[eps_index] = 0
    
            wave_r = np.fft.ifft(trans)
            mag = np.sqrt(wave_r.real**2 + wave_r.imag**2)
            return mag
    
        @staticmethod
        def predict_next(values):
            """
            Predicts the next value by sum up the slope of the last value with previous values.
            Mathematically, g = 1/m * sum_{i=1}^{m} g(x_n, x_{n-i}), x_{n+1} = x_{n-m+1} + g * m,
            where g(x_i,x_j) = (x_i - x_j) / (i - j)
            :param values: list.
                a list of float numbers.
            :return : float.
                the predicted next value.
            """
    
            if len(values) <= 1:
                raise ValueError(f'data should contain at least 2 numbers')
    
            v_last = values[-1]
            n = len(values)
    
            slopes = [(v_last - v) / (n - 1 - i) for i, v in enumerate(values[:-1])]
    
            return values[1] + sum(slopes)
    
        @staticmethod
        def extend_series(values, extend_num=5, look_ahead=5):
            """
            extend the array data by the predicted next value
            :param values: list.
                a list of float numbers.
            :param extend_num: int, default 5.
                number of values added to the back of data.
            :param look_ahead: int, default 5.
                number of previous values used in prediction.
            :return: list.
                The result array.
            """
    
            if look_ahead < 1:
                raise ValueError('look_ahead must be at least 1')
    
            extension = [SpectralResidual.predict_next(values[-look_ahead - 2:-1])
                         ] * extend_num
            return np.concatenate((values, extension), axis=0)
    
    
    def average_filter(values, n=3):
        """
        Calculate the sliding window average for the give time series.
        Mathematically, res[i] = sum_{j=i-t+1}^{i} values[j] / t, where t = min(n, i+1)
        :param values: list.
            a list of float numbers
        :param n: int, default 3.
            window size.
        :return res: list.
            a list of value after the average_filter process.
        """
    
        if n >= len(values):
            n = len(values)
    
        res = np.cumsum(values, dtype=float)
        res[n:] = res[n:] - res[:-n]
        res[n:] = res[n:] / n
    
        for i in range(1, n):
            res[i] /= (i + 1)
    
        return res
    

    {% endfolding %}

    参考资料

    更多相关内容
  • Anomaly Detection using Edge Computing in Video Surveillance System Review.pdf
  • Anomaly Detection_A Survey

    2018-05-02 16:41:16
    异常检测的综述:Anomaly detection is an important problem that has been researched within diverse research areas and application domains. Many anomaly detection techniques have been specifically ...
  • Alibaba user behavior data from Taobao's goods recommendation system for anomaly detection.
  • 2021异常检测论文ppt
  • 本书详细介绍了机器学习在异常检测领域的应用的关键技术。
  • 68573-autonomous-anomaly-detection-algorithm.zip,AAD.zip
  • Abstract—Due to the high spectral resolution, anomaly detection from hyperspectral images provides a new way to locate potential targets in a scene, especially those targets that are spectrally ...
  • Title: Anomaly Detection as a Service: Challenges, Advances, and Opportunities Author(s): Salvatore J. Stolfo, Danfeng (Daphne) Yao, Xiaokui Shu, Long Cheng Series: Synthesis Lectures on Information...
  • Anomaly detection plays an important role in remotely sensed hyperspectral image (HSI) processing. Recently, compressive sensing technology has been widely used in hyperspectral imaging. However, the ...
  • Anomaly Detection Monitoring

    2019-01-10 11:10:22
    Monitoring is currently undergoing a significant change. Until two or three years ago, the main focus of monitoring tools was to provide more and better data. Interpretation and visualization has too ...
  • 计算机视觉Github开源论文
  • Collaborative Contextual Anomaly Detection for Industrial Equipment Groups
  • 2.Deep Learning for Anomaly Detection A Review 论文分享(中).pdf
  • Deep Learning for Anomaly Detection A Review.pdf
  • 腾讯的研究论文,摘要:Time series anomaly detection is usually formulated as finding outlier data points relative to some usual data, which is also an important problem in industry and academia....
  • 异常检测(Anomaly Detection)综述

    千次阅读 2021-07-05 01:00:08
    通常情况下,在我们阅读论文的过程中,异常检测(Anomaly Detection)也被叫做,Novelty Detection,Outlier Detection,Forgery Detection,Out-of-distribution Detection。在阅读论文的情况,这些名词也有轻微的...

    点击上方“小白学视觉”,选择加"星标"或“置顶

    重磅干货,第一时间送达
    
    

    本文转自|计算机视觉life

    导读

     

    异常检测是一个发现“少数派”的过程,本文将目前深度学习的异常检测的热门研究方向进行了分类,并列举了对应的文章,并推荐了值得一读的8篇新颖论文,帮助大家理解学习异常检测这一领域。

       一、简介

    异常检测一直是机器学习中一个非常重要的子分支,在各种人工智能落地应用例如计算机视觉、数据挖掘、NLP中,异常检测算法都是很热门的研究方向,特别是大数据时代,人工处理数据的速度已经远远赶不上机器了,所以更快地检测数据中的异常情况成为了我们当下非常重要的任务。在深度学习广泛的推广之前,传统的异常检测算法有很多,例如高斯拟合,半监督学习等等,而在深度学习大火之后,人们也开始研究将深度学习应用于各种异常任务中(也就是Deep Anomaly Detection,以下统称DAD),并取得了很大的成功,本文将把当下该方向热门的研究方向分类并列举了对应的文章,希望能帮助大家更好地理解此方向的研究。

       二、异常检测的概念

    异常检测,从定义而言就是一种识别不正常情况与挖掘非逻辑数据的技术,也叫outliers。例如在计算机视觉的应用中,有人在抖音发表一个视屏,在边骑车边打电话,那这就是个不符合规范的视屏,我们能否采用一些方式来将其检测出来,再例如在数据挖掘领域中,那异常检测的应用就更广泛了,比如信用卡盗刷,超大金额支出等等。通常情况下,在我们阅读论文的过程中,异常检测(Anomaly Detection)也被叫做,Novelty Detection,Outlier Detection,Forgery Detection,Out-of-distribution Detection。在阅读论文的情况,这些名词也有轻微的区别,以计算机视觉为例,如下图所示。

    在计算机视觉的基本任务——图像分类中,单分类与多分类问题,将几种概念的细微区别基本阐述清楚了。Anomaly Detection指在不属于该分类的数据集中,而Novelty是检测可能属于该分类但却没见过(Unseen)也就是Novel的数据集,而OOD(out-of-distribution)则是多分类中不同目标的分布,这些任务在接下来的论文中,也经常有人进行相应的研究。

       三、异常检测相关工作与方向

    首先根据查阅异常检测方向综述的文章,我将基于深度学习的异常检测应用方向论文,按照主要的逻辑结构列举在了下面,我相信这可以更加方便地向你展示异常检测方向你应该怎样去研究你的论文。

    1. DAD研究的主要元素

    (1) 异常数据集

    • 点集

    • 连续集

    • 团队集

    (2) 异常检测模型

    • 无监督学习、AutoEncoder、GAN、矩阵因子分解

    • 半监督学习、强化学习

    • Hybrid(混种)、特征提取+传统算法

    • 单分类神经网络

    (3) 异常检测应用

    • 诈骗检测

    • 网络侵入检测

    • 医学异常检测

    • 传感器网络异常检测

    • 视屏监督

    • 物联网大数据异常检测

    • 日志异常检测

    • 工业危害检测

    2. 异常检测论文分类

    下面也是我根据参考文献,把异常检测论文分成几个当前研究方向,相当于列出了一个目录在这里,可供之后方便查看,关于论文分类的一些概念,我会在下面的介绍中详细提及。

    (1) 数据的连续性

    (2) 数据标签的可用性

    • 监督学习Supervised Learning

    • 半监督学习Semi-supervised Learning

    • 无监督学习Unsupervised Learning

    (3) 基于训练对象的模型

    • 深度混种模型Deep Hybrid Model(DHM)

    • 单分类神经网络One-Class Neural Networks(OC-NN)

    (4) 数据异常类型

    • 点集Point

    • 连续集Contextual

    • 团队集Collective or Group

    (5) 异常检测输出类型

    • 异常分数Anomaly Score

    • 标签Lable

    (6) 异常检测应用

    有将近十种异常检测相关的应用,由于目前对该部分研究较浅,所以之后会考虑单独写篇文章来总结异常检测方面的应用型论文。

       四、原始数据的连续性Nature of Input Data

    在DAD问题中选择怎样的网络结构很大部分取自于原始数据(raw/input data)的类型,原始数据在广义上我们可以分为连续型(Sequential)与非连续型(Non-sequential),如何选择相应的模型,我列举在下表中。

    原始数据类型

    举例

    DAD模型选择




    连续型Sequential

    视屏,DNA序列,自然语言文本

    CNN,RNN,LSTM

    非连续型Non-sequential

    图片,传感器

    CNN,AE及其变种

    DAD在未降维的高维原始数据中表现优异,成功提取大规模数据的关系,通常情况下,网络越深,提取效果越好,这个部分感兴趣的话可以参考下面这篇文章。

    • Yann LeCun, Yoshua Bengio, and Geoffrey Hinton. Deep learning. nature, 521(7553):436, 2015.

       五、数据标签的可用性Availability of Labels

    数据标签是非常重要的事情,标签代表着正常(normal)数据或是未见过(unseen/novel)的数据,对于标签内容的使用同样是现在异常检测方向论文重点考虑的事情。异常检测的模型也可以根据数据标签的内容广义的分为三类,监督,半监督和无监督。

    1. 监督Supervised DAD

    基于监督学习的DAD文章,整理了两篇医学方向的,由于监督学习对于标签内容的依赖度过重,所以他对于异常检测的问题并不是那么合适,所以它并不如半监督和无监督应用地那么广泛。

    • Raghavendra Chalapathy, Ehsan Zare Borzeshi, and Massimo Piccardi. An investigation of recurrent neural architectures for drug name recognition. arXiv preprint arXiv:1609.07585, 2016a.

    • Raghavendra Chalapathy, Ehsan Zare Borzeshi, and Massimo Piccardi. Bidirectional lstm-crf for clinical concept extraction. arXiv preprint arXiv:1611.08373, 2016b.

    2. 半监督Semi-supervised DAD

    由于正常数据集比异常数据集更好获得,所以半监督学习DAD方法被非常广泛的使用,拥有了足够的数据集,我们能更好地标出正常数据,异常数据,新数据的界限,半监督学习模型列举三篇论文。

    • Drausin Wulsin, Justin Blanco, Ram Mani, and Brian Litt. Semi-supervised anomaly detection for eeg waveforms using deep belief nets. In Machine Learning and Applications (ICMLA), 2010 Ninth International Conference on, pages 436–441. IEEE, 2010.

    • Mutahir Nadeem, Ochaun Marshall, Sarbjit Singh, Xing Fang, and Xiaohong Yuan. Semi-supervised deep neural network for network intrusion detection. 2016.

    • Hongchao Song, Zhuqing Jiang, Aidong Men, and Bo Yang. A hybrid semi-supervised anomaly detection model for high-dimensional data. Computational intelligence and neuroscience, 2017.

    3. 无监督Unsupervised DAD

    传统机器学习算法其实我感觉更倾向于直接从数据集中让机器去学习一些东西,然后直接用参数的方式表示出来,异常检测问题同样我们也用自动标签的方式去检测是否异常,因为有时候可能数据难以获取。自动解码器是无监督DAD的核心,所以这里深度学习的一些神经网络大有可为,例如RNN,LSTM等等。我们这里只列举了一种采用变种半监督学习方法的论文,应用于异常数据降维,表现效果超越很多传统降维算法,如PCA,Isolation等等。

    • Aaron Tuor, Samuel Kaplan, Brian Hutchinson, Nicole Nichols, and Sean Robinson. Deep learning for unsupervised insider threat detection in structured cybersecurity data streams. arXiv preprint arXiv:1710.00811, 2017.

       六、基于训练对象的模型

    按照训练对象的区别,我们把训练模型单独划分为两类,变种模型与单分类神经网络。

    1. 深度变种模型Deep Hybrid Models(DHM)

    • Jerone TA Andrews, Edward J Morton, and Lewis D Griffin. Detecting anomalous data using auto-encoders. International Journal of Machine Learning and Computing, 6(1):21, 2016a.

    • Tolga Ergen, Ali Hassan Mirza, and Suleyman Serdar Kozat. Unsupervised and semi-supervised anomaly detection with lstm neural networks. arXiv preprint arXiv:1710.09207, 2017.

    2. 单分类神经网络One-Class Neural Networks(OC-NN)

    • Raghavendra Chalapathy, Aditya Krishna Menon, and Sanjay Chawla. Anomaly detection using one-class neural networks. arXiv preprint arXiv:1802.06360, 2018a.


       七、数据异常类型

    1. 点集Point

    举信用卡盗刷的例子,点集异常就是指单笔交易大金额支出,比如你都花1块2块的钱,突然有一天消费了1k,那可能就出现了异常情况,但这个方向好像没有人单独发过文章。

    2. 连续集Contextual or Conditional

    连续集就是指上下文相关的连续数据,某一个中间数据出现了异常情况,可能引起了梯度消失爆炸等等问题。

    • Xiuyao Song, Mingxi Wu, Christopher Jermaine, and Sanjay Ranka. Conditional anomaly detection. IEEE Transactions on Knowledge and Data Engineering, 19(5):631–645, 2007.

    3. 团队集Collective or Group

    还是信用卡盗刷的例子,如果某天你的信用卡突然短时间内不停地消费50元,那机器可能会发现,这些团队数据集的消费出现了异常,这种情况我们也在其他场合经常遇到。

    • Raghavendra Chalapathy, Edward Toth, and Sanjay Chawla. Group anomaly detection using deep generative models. arXiv preprint arXiv:1804.04876, 2018b.

    • Lo¨ıc Bontemps, James McDermott, Nhien-An Le-Khac, et al. Collective anomaly detection based on long short-term memory recurrent neural networks. In International Conference on Future Data and Security Engineering, pages 141–152. Springer, 2016.

    • Daniel B Araya, Katarina Grolinger, Hany F ElYamany, Miriam AM Capretz, and G Bitsuamlak. Collective contextual anomaly detection framework for smart buildings. In Neural Networks (IJCNN), 2016 International Joint Conference on, pages 511–518. IEEE, 2016.

    • Naifan Zhuang, Tuoerhongjiang Yusufu, Jun Ye, and Kien A Hua. Group activity recognition with differential recurrent convolutional neural networks. In Automatic Face & Gesture Recognition (FG 2017), 2017 12th IEEE International Conference on, pages 526–531. IEEE, 2017.

       八、idea新颖的论文

    这里我再给大家推荐8篇idea比较新颖的论文,可供大家阅读与交流。

    [1] Liu W, Luo W, Lian D, et al. Future frame prediction for anomaly detection–a new baseline[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 6536-6545.

    [2] Gong D, Liu L, Le V, et al. Memorizing normality to detect anomaly: Memory-augmented deep autoencoder for unsupervised anomaly detection[C]//Proceedings of the IEEE International Conference on Computer Vision. 2019: 1705-1714.

    [3] Park H, Noh J, Ham B. Learning Memory-guided Normality for Anomaly Detection[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2020: 14372-14381.

    [4] Zhao Y, Deng B, Shen C, et al. Spatio-temporal autoencoder for video anomaly detection[C]//Proceedings of the 25th ACM international conference on Multimedia. 2017: 1933-1941.

    [5] Ionescu R T, Khan F S, Georgescu M I, et al. Object-centric auto-encoders and dummy anomalies for abnormal event detection in video[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019: 7842-7851.

    [6] Liu W, Luo W, Li Z, et al. Margin Learning Embedded Prediction for Video Anomaly Detection with A Few Anomalies[C]//IJCAI. 2019: 3023-3030.

    [7] Sultani W, Chen C, Shah M. Real-world anomaly detection in surveillance videos[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 6479-6488.

    [8] Luo W, Liu W, Gao S. A revisit of sparse coding based anomaly detection in stacked rnn framework[C]//Proceedings of the IEEE International Conference on Computer Vision. 2017: 341-349.

    —完—
    

    下载1:OpenCV-Contrib扩展模块中文版教程

    在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

    下载2:Python视觉实战项目52讲

    在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

    下载3:OpenCV实战项目20讲

    在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

    交流群

    欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

    展开全文
  • Voila: Visual Anomaly Detection and Monitoring with Streaming Spatiotemporal Data
  • Abstract—In this letter, a novel anomaly detection framework with transferred deep convolutional neural network (CNN) is proposed. The framework is designed by considering the following facts: 1) a ...
  • Registration based Few-Shot Anomaly Detection paper:https://arxiv.org/abs/2207.07361 code:https://github.com/MediaBrain-SJTU/RegAD 摘要 目前为止,现有的FSAD研究遵循标准AD使用的每类别一个模型的学习范式...

    Registration based Few-Shot Anomaly Detection

    paper:https://arxiv.org/abs/2207.07361
    code:https://github.com/MediaBrain-SJTU/RegAD

    摘要

    目前为止,现有的FSAD研究遵循标准AD使用的每类别一个模型的学习范式,并且尚未探索类别间的共性。受人类如何检测异常的启发,通常将图像与正常图像进行比较,利用配准来训练类别无关的异常检测模型。测试时通过比较测试图像的配准特征和正常图像来识别异常。本文是第一个FSAD方法,训练单个可推广模型,不需要对新类别进行重新训练或微调。比目前方法AUC高3%~8%。

    介绍

    异常检测具有广泛的应用,由于异常的定义不明确,不可能用一组详尽的异常样本进行训练。
    大多数现有的AD方法都集中于为每个类别训练专用模型。然而,在缺陷检测等现实场景中,鉴于要处理数百种工业产品,为每种产品收集大量培训集并不划算。
    在这里插入图片描述
    异常检测的少镜头学习已通过减少对训练样本需求的策略来实现,例如使用多重变换进行激进数据扩充,或使用更轻的正态分布估计估计器。然而,这种方法仍然遵循每类一个模型的学习范式,无法利用类间的共性。

    在这里插入图片描述
    本文旨在探索一种新的FSAD范式,通过学习多个类别之间共享的通用模型,也可推广到新类别,并受到人类如何检测异常的启发。当要求人类搜索图像中的异常时,一种简单的策略是将样本与正常样本进行比较,以找出差异。只要知道如何比较两个图像,图像的实际语义就不再重要。为了实现这种类似人类的比较过程,我们求助于配准,将不同图像转换为一个坐标系以进行更好的比较。

    为了训练一个类别无关的异常检测模型,我们利用配准任务,使用具有三个空间变换网络块的孪生神经网络进行配准。为了获得更好的鲁棒性,没有像典型的配准方法对像素配准,而是通过最大化同一类的余弦相似性,在特征级进行配准。
    在这里插入图片描述
    在这里插入图片描述

    测试时,为样本提供由正常样本组成的支持集,使用基于统计的分布估计器估计目标的配准特征的正态分布,超出统计正态分布的测试样本被视为异常。这样,模型通过简单估计其正态特征分布而无需任何参数微调,从而快速适应新类别。
    本文的贡献主要如下:

    • 引入特征配准作为少样本异常检测(FSAD)的一种类别无关方法。据我们所知,这是第一种FSAD方法,可以训练单一的可推广模型,并且不需要对新类别进行再训练或参数微调。
    • 在最近的基准数据集上进行的大量实验表明,所提出的RegAD在异常检测和异常定位任务上都优于最先进的FSAD方法。

    相关工作

    异常检测

    少样本学习

    少样本异常检测

    FSAD旨在指示只有少数正常样本作为目标类别支持图像的异常。TDG[36]提出了一种分层生成模型,用于捕获每个支持图像的多尺度补丁分布。他们使用多个图像变换并优化鉴别器来区分真实和虚假的面片,以及应用于面片的不同变换。通过聚集正确变换的基于补丁的投票来获得异常得分。DiffNet[29]利用卷积神经网络提取的特征的描述性,使用归一化流估计其密度,这是一种非常适合从几个支持样本估计分布的工具。Metaformer[39]可以应用于FSAD,尽管在其整个元训练过程中(参数预训练之外)应使用额外的大规模数据集MSRA10K[7],以及额外的像素级注释。在本文中,我们设计了基于配准的FSAD来学习类别无关特征配准,使模型能够在给定一些正常图像的情况下检测新类别中的异常,而无需进行微调。

    问题设置

    对于FSAD,我们尝试仅使用少数正常图像作为支持集,从看不见/新类别的测试样本中检测异常。关键挑战在于:

    1. Ttrain只能访问来自多个已知类别(例如,不同对象或纹理)的正常样本,而没有任何图像级或像素级注释
    2. 测试数据来自一个看不见/新颖类别
    3. 只有来自目标类别ct的少数正常样本可用,使得难以估计目标类别ct的正态分布。

    方法

    在训练过程中,我们利用无异常特征配准网络学习类别无关特征配准。在测试过程中,给定几个正态图像的支持集,使用基于统计的分布估计器估计目标类别的配准特征的正态分布。超出学习的统计正态分布的测试样本被视为异常。

    特征配准网络

    给定从训练集Ttrain的同一类别中随机选择的一对图像Ia和Ib,利用ResNet型卷积网络作为特征提取器。具体而言,如图2所示,采用ResNet的前三个卷积残差块C1、C2和C3,并丢弃ResNet原始设计中的最后一个卷积块,以确保最终特征仍保留空间信息。空间变换网络(STN)作为特征变换模块插入每个块中,以使模型能够灵活地学习特征配准。具体而言,变换函数Si(i=1,2,3)应用于输入特征f-Si:
    在这里插入图片描述
    其中(xti,yti)是输出特征f ti的目标坐标,(xsi,ysi)是输入特征f si的源坐标中的相同点,Ai是仿射变换矩阵。模块Si用于从卷积块Ci的特征中学习映射。
    给定成对提取的特征ft3a和ft3b作为最终变换输出,我们将特征编码器设计为孪生网络。孪生网络是应用于多输入的参数共享神经网络。特征ft3a和ft3b由相同的编码器网络E处理,然后在一个分支上应用预测头P,在另一个分支上停止梯度操作,防止此类崩溃。
    表示pa≜ P(E(f3,a))和zb≜ 应用负余弦相似性损失:
    在这里插入图片描述
    最后特征配准损失定义为:
    在这里插入图片描述

    正态分布估计

    由于孪生网络的两个分支完全相同,因此仅使用一个分支特征进行正态分布估计。在获得配准特征后,使用基于统计的估计器来估计目标类别特征的正态分布,该估计器使用多元高斯分布来获得正态类的概率表示。
    假设图像被划分为(i,j)的网格∈ [1,W]×[1,H]位置,其中W×H是用于估计正态分布的特征的分辨率。在每个贴片位置(i,j),设Fij={f kij,k∈ [1,N]}是来自N个增强支持图像的注册特征。fij是贴片位置(i,j)处的聚合特征,通过将相应位置处的三个STN输出与上采样操作连接以匹配其大小来实现。假设Fij由N(µij,∑ij)生成,样本协方差为:
    在这里插入图片描述
    其中µij是Fij的样本均值,正则化项ϵI使样本协方差矩阵满秩且可逆。最后,每个可能的面片位置都与多元高斯分布相关联。
    在本文中,我们强调数据扩充在扩展支持集方面起着非常重要的作用,这有利于正态分布估计。具体而言,我们对支持集St中的每个图像采用了增强,包括旋转、平移、翻转和灰度化。

    推理

    在推断过程中,超出正态分布的测试样本被视为异常。对于Ttest中的每个测试图像,我们使用马氏距离M(fij)为位置(i,j)的贴片给出异常分数,其中:
    在这里插入图片描述
    马氏距离矩阵M=(M(fij))形成异常图。对该异常图应用对应于三个STN模块的三个逆仿射变换,以获得与原始图像对齐的最终异常得分图。该图中的高分表示异常区域。整个图像的最终异常分数是异常图的最大值。

    实验

    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

    在MVTec和MPDD数据集上进行k-shot异常检测和定位的消融研究。“A”、“F”和“S”模块分别表示支持集、特征注册聚合训练和空间变换网络(STN)的增强。在10次运行的每个数据集中,结果以所有类别的宏观平均AUC%列出。表现最好的方法是粗体。
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    结论

    本文提出了一种FSAD方法,利用配准实现跨类别概括特征,我们使用聚合数据训练类别无关的特征配准网络,可以直接推广到新类别,无需重新训练或参数微调,通过比较测试图像及其对应的支持图像的配准特征来识别异常。对于异常检测和异常定位,该方法显示出了竞争力。

    展开全文
  • Robust and Unsupervised KPI Anomaly Detection Based on Conditional Variational Autoencoder
  • Robust and Rapid Clustering of KPIs for Large-Scale Anomaly Detection
  • 高光谱异常检测算法。其中RX异常检测算法是最基础的一种。
  • 该站点提供了基于隔离的异常检测(iNNE)的源代码。 ... and Wells,JR,2018.基于隔离使用最近邻集合进行异常检测。 计算智能,34(4),第968-998页。
  • 关于系统异常检测相关话题的探讨,系统开发必须面对的课题。 by Preetam Jinka and Baron Schwartz Copyright © O’Reilly Media, Inc 值得一读!
  • ANOMALOUS: A Joint Modeling Approach for Anomaly Detection on Attributed Networks.
  • Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker DiscoveryUnsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery
  • ANOMALY DETECTION IN MATLAB FOR HYPERSPECTRAL DATA
  • Pixel-wise Anomaly Detection in Complex Driving Scenes CVPR2021 Code: https://github.com/giandbt/SynBoost 摘要 最先进的语义分割方法无法检测异常实例,这阻碍了它们在安全关键和复杂应用中的部署,例如...

    Pixel-wise Anomaly Detection in Complex Driving Scenes
    在这里插入图片描述
    CVPR2021

    Code:
    https://github.com/giandbt/SynBoost

    摘要

    最先进的语义分割方法无法检测异常实例,这阻碍了它们在安全关键和复杂应用中的部署,例如自动驾驶。最近的方法集中在利用分割不确定性来识别异常区域或从语义标签图中重新合成图像以发现与输入图像的不同之处。在这项工作中,我们证明了这两种方法包含互补信息,并且可以结合起来为异常分割产生稳健的预测。我们提出了一个像素级异常检测框架,该框架使用不确定性图来改进现有的重新合成方法,以发现输入图像和生成图像之间的差异。我们的方法作为一个围绕已经训练好的分割网络的通用框架,可确保异常检测而不影响分割精度,同时显着优于所有类似方法。在一系列不同异常数据集上的 Top-2 性能显示了我们处理不同异常实例的方法的稳健性。

    1. 介绍

    通过这项工作,我们关注现有语义分割模型无法定位异常实例,以及这种限制如何阻碍它们在安全关键的野外场景中部署。 考虑使用语义分割模型的自动驾驶汽车的情况。 如果代理遇到异常物体(即马路中间的木箱),模型可能会错误地将这个物体归类为道路的一部分并导致车辆撞车。

    为了检测输入中的此类异常,我们将我们的方法建立在两组已建立的方法之上。 第一组使用不确定性估计来检测异常。 他们的直觉是,低置信度的预测很可能是异常情况。 然而,不确定性估计方法本身仍然嘈杂且不准确。 以前的工作 [24, 4] 表明这些模型无法检测到许多意想不到的物体。 示例失败案例如图 1(顶部和底部)所示,其中异常对象被检测到但未分类或未检测到并与背景混合。 在这两种情况下,分割网络对其预测都过于自信,因此估计的不确定性(softmax entropy)很低。
    在这里插入图片描述
    图 1. 异常情况概述。 当分割网络遇到异常实例时,有三种可能的结果。 首先,异常实例被正确分割并分类为训练类之一(即鸟被混淆为人)(顶部)。 其次,异常实例被多个类过度分割(即狗被检测为人、植被和地形类的组合)(中)。 第三,异常实例与背景混合,未检测到(即框与街道分割混合)(底部)。 我们提出的方法对所有场景都产生了鲁棒的预测,而以前的方法至少不能处理其中一个。

    第二组侧重于从预测的语义图重新合成输入图像,然后比较两个图像(输入和生成)以发现异常。 这些模型在处理分割过度自信时显示出有希望的结果,但在分割输出未知对象的噪声预测时失败,如图 1(中)所示。 这种失败的原因是合成模型无法重建语义图的噪声块,这使得查找输入图像和合成图像之间的差异变得复杂。

    在本文中,我们提出了一种新颖的像素级异常框架,该框架结合了不确定性和重新合成方法,以便对不同的异常场景产生稳健的预测。我们的实验表明,不确定性和重新综合方法是相互补充的,当分割网络遇到异常时,它们一起涵盖了不同的结果。

    我们的框架建立在以前的重新合成方法 [24,12,38] 的基础上,将分割未知类的问题重新表述为从预测的语义图中识别输入图像和重新合成图像之间的差异之一。

    我们通过集成不同的不确定性度量来改进这些框架,例如 softmax 熵 [10, 21]、softmax 差异 [31] 和感知差异 [16, 8],以帮助差异网络区分输入和生成的图像。

    所提出的框架成功地推广到所有异常场景,如图 1 所示,只需最少的额外计算工作,并且无需重新训练网络,这是其他异常检测器的一个常见缺陷 [3 , 26, 27]。除了保持最先进的分割性能外,消除重新训练的需要还降低了向未来分割网络添加异常检测器的复杂性,因为训练这些网络并非易事。

    我们在异常检测的公共基准测试中评估我们的框架,在其中我们与类似于我们的不影响分割准确性的方法以及需要完全重新训练的方法进行比较。我们还证明了我们的框架能够推广到不同的分割和合成网络,即使这些模型的性能较低。我们用更轻的架构替换分割和合成模型,以便在自动驾驶等时间关键型场景中优先考虑速度。总之,我们的贡献如下:
    – 我们提出了一种新颖的逐像素异常检测框架,该框架利用了现有不确定性和重新合成方法的最佳特征。
    – 我们的方法对不同的异常场景具有鲁棒性,在 Fishyscapes 基准上实现最先进的性能,同时保持最先进的分割精度。
    – 我们提出的框架能够推广到不同的分割和合成网络,作为现有分割pipline的包装方法。

    2. 相关工作

    在分布外(OoD)检测和异常分割领域内研究了在语义分割中定位异常实例的任务。
    在本节中,我们回顾了可用于逐像素异常检测的方法,并排除了只能应用于图像级 OoD 分类的方法。

    2.1. Anomaly Segmentation via Uncertainty Estimation

    估计给定输入模型不确定性的方法可能会估计非异常输入的高不确定性,例如由于高输入噪声。无论这种差异和其他差异如何,异常检测都是不确定性估计的常用基准方法,基于异常输入应该具有比任何训练数据更高的不确定性的假设。

    早期的方法从预测的 softmax 分布中测量不确定性,并通过使用简单的统计数据将样本分类为 OoD [14、22、23]。虽然这些方法是图像级 OoD 分类的良好基准,但它们通常在异常分割中失败。具体来说,估计的(偶然的)不确定性在对象边界处通常很高,其中没有一个标签可以确定地分配,而不是在异常情况下如所期望的那样。 [31] 通过聚合不同的色散测量(例如,熵和 softmax 概率的差异),然后预测分割中潜在的高误差区域来缓解这一缺点。然后,[28] 证明这些高误差区域可用于通过视觉特征差异来定位异常。

    替代方法使用带有 MC dropout 的贝叶斯 NN 来估计像素不确定性 [18、27、21]。 这些方法区分了偶然性(观察中固有的噪声)和认知不确定性(模型中的不确定性),因此减轻了对象边界的问题,但仍然无法准确地检测像素级别的异常。 如 [24] 所示,它们产生了许多false positive预测,以及异常实例和不确定区域之间的不匹配。

    2.2. Anomaly Segmentation via Outlier Exposure

    异常分割也可以通过训练网络来完成,通过使用异常值的辅助数据集 [15] 来区分异常值和未见过的样本。 [2] 是使用 ImageNet [32] 作为 OoD 数据集使用异常值曝光进行密集预测的首批方法之一。 然后,[3] 通过修改分割网络来预测语义图和异常值图,以此方法为基础。 请注意,这需要将分割网络重新训练为多任务模型,这导致性能下降 [36]。 这些方法的最大缺点是它们从 OoD 样本中进行训练,这可能会损害它们泛化到所有可能异常的能力。

    2.3. Anomaly Segmentation via Image Re-synthesis

    最近有希望的方法遵循使用生成模型重建输入图像的方法。 这种方法背后的直觉是,生成的图像将相对于存在异常的输入图像产生外观差异,因为模型无法处理这些实例。 该子领域的早期工作使用自动编码器重新合成原始图像 [1, 7]。 然而,这些方法大多生成输入图像的低质量版本 [24]。 最近的方法 [38, 12, 24] 使用生成对抗网络从预测的语义图中重新合成输入图像。 然后通过差异或比较模块将照片般逼真的图像与原始图像进行比较,以定位异常实例。

    这些方法受益于不需要重新训练分割网络,因为它们作为包装方法工作。 此外,它们不需要 OoD 样本,这有助于它们泛化到从未见过的异常实例。 然而,这些方法的性能受到差异模块区分输入和生成图像中特征的能力的限制,这对于复杂的驾驶场景可能具有挑战性。 通过我们的工作,我们证明了将场景的不确定性信息提供给差异网络可以显着提高模块检测异常的能力。

    方法

    我们提出了一个用于分割异常实例的检测框架。 我们的框架受到最近的重新合成方法 [24, 38] 的启发,同时将它们扩展到包括不确定性估计方法的好处 [28, 31]。 我们首先介绍我们的框架及其各自的模块(第 3.1 节)。 接下来,我们将描述如何训练模块以更好地处理不同的异常情况(第 3.2 节)。 最后,我们将框架的输出与计算的不确定性图相结合,形成最终的集成方法,以减少预测中的false positives和过度自信(第 3.3 节)。

    3.1. Pixel-wise Anomaly Detection Framework

    我们提出的框架遵循与 [24] 和 [12] 相同的基本结构,其中输入图像被分割,从分割图合成重建,并且相异模块通过比较输入图像和合成图像来检测异常。 然而,我们扩展了每个组件来预测和/或使用不确定性测量来改进最终的异常预测。 图 2 显示了我们框架。
    在这里插入图片描述
    图 2.异常分割框架。 我们首先将输入图像通过一个分割网络,该网络将输出一个语义图和两个不确定性图。 然后由合成网络处理预测的语义图以生成照片般逼真的图像。 然后通过比较输入图像和生成图像之间的特征来计算感知差异。 最后,所有预测图像和输入都被发送到空间感知相异性模块以产生异常预测。

    3.1.1 Segmentation Module

    分割模块获取输入图像并将其馈送到分割网络,例如 [42] 或 [40],以获得语义图。 除了语义图,我们还计算了两个离散度量来量化语义图预测中的不确定性。 这两个色散测量是 softmax 熵 H [ 10 , 21 ] H[10,21] H[10,21] 和 softmax 距离 D D D(即两个最大 softmax 值之间的差异),这已证明有助于理解分割中的错误 [31] . 对于每个像素 x x x,这两个测量值计算如下:
    H x = − ∑ c ∈  classes  p ( c ) log ⁡ 2 p ( c ) H_{x}=-\sum_{c \in \text { classes }} p(c) \log _{2} p(c) Hx=c classes p(c)log2p(c)
    D x = 1 − max ⁡ c ∈  classes  p ( c ) + max ⁡ c ′ ∈  classes  \ ( arg ⁡ max ⁡ c p ( c ) ) p ( c ′ ) D_{x}=1-\max _{c \in \text { classes }} p(c)+\max _{c^{\prime} \in \text { classes } \backslash\left(\arg \max _{c} p(c)\right)} p\left(c^{\prime}\right) Dx=1c classes maxp(c)+c classes \(argmaxcp(c))maxp(c)
    其中 p ( c ) p(c) p(c) c c c 类的 softmax 概率。 我们将这两个数量标准化为 [ 0 , 1 ] [0,1] [0,1]

    3.1.2 Synthesis Module

    合成模块从给定的语义映射中生成具有像素到像素对应关系的逼真图像。它被训练为条件生成对抗网络(cGAN)[37, 25],以将生成分布拟合到来自语义模型的输入图像的分布。虽然合成模块经过训练可以生成逼真的图像,并且能够很好地生成逼真的汽车、建筑物或行人,但语义图会遗漏颜色或外观等基本信息,以便进行直接的像素值比较。因此,我们计算原始图像和合成图像之间的感知差异 V。这种新颖的特征图的灵感来自 [16] 和 [8] 中提出的感知损失,这通常用于 cGANs 方法。这个想法是使用 ImageNet [32] 预训练的 VGG 作为特征提取器 [33] 来找到具有最不同特征表示的像素。这些表示的差异使我们能够根据对象的图像内容和空间结构来比较对象,而不是像颜色和纹理这样的低级特征。如果未检测到异常对象或错误分类,则合成图像将生成错误的特征表示,因此感知差异应检测与输入图像的这些差异。
    对于输入图像的每个像素 x x x和合成图像的对应像素 r r r,感知差异计算如下:
    V ( x , r ) = ∑ i = 1 N 1 M i ∥ F ( i ) ( x ) − F ( i ) ( r ) ∥ 1 V(x, r)=\sum_{i=1}^{N} \frac{1}{M_{i}}\left\|F^{(i)}(x)-F^{(i) }(r)\right\|_{1} V(x,r)=i=1NMi1F(i)(x)F(i)(r)1
    其中 F ( i ) F^{(i)} F(i) 表示VGG网络具有 $M_{i}个元素的第 i i i 层$ 和N层。 为了保持一致性,这些分散度量也在 [0, 1] 之间进行了归一化。

    3.1.3 Dissimilarity Module

    相异性模块将原始图像、生成图像和语义图以及在前面步骤中计算的不确定性图(softmax 熵、softmax 距离、感知差异)作为输入。 然后,网络结合这些特征来预测异常分割图。 如图 3 所示,相异模块分为三个组件(编码器、融合模块和解码器)。实现细节可在附录 A.1 中找到。

    编码器。 每个图像都通过一个编码器来提取特征。与 [24] 类似,我们对原始和重新合成的图像使用预训练的 VGG [33] 网络以及简单的 CNN 来处理语义图。我们还添加了另一个简单的 CNN 来编码不确定性图,它们都是连接的。

    融合模块。 在特征金字塔的每一层,我们将输入、合成和语义特征图连接起来,并通过一个 1×1 的卷积传递它们。通过这第一步,我们正在训练网络以区分原始图像和生成的图像,因为这在重新合成方法中很常见。此外,我们使用生成的特征图并与不确定性特征图执行逐点相关。这一步引导网络关注特征图中的高不确定性区域。

    解码器。 然后我们解码每个特征图并将其与金字塔中相应的更高级别连接起来,直到我们得到我们的异常分割预测。请注意,解码器块使用语义图作为输入,因为它使用了 [29] 中提出的空间感知归一化。这种标准化用于确保语义信​​息在解码过程中不会被冲走。

    在这里插入图片描述
    图 3. 相异性模块结构。 给定输入、合成、语义和不确定性图像,我们使用 CNN 为每个图像提取高级到低级特征。 对于每个级别,我们将输入(蓝色)、合成(黄色)和语义(红色)特征连接起来,并将它们与 1x1 卷积融合。 生成的map用于计算与不确定性map(绿色)中特征的相关性。 然后将融合模块的输出(紫色)馈送到解码器以产生预测的异常分割。 请注意,语义图用于解码器块中,以通过使用 SPADE 归一化 [29] 来确保空间感知预测。

    3.2. Training Procedure

    根据定义,异常实例包括任何不属于训练类的对象。因此,确保所提出的方法能够检测任何异常并且不会过度拟合来自 OoD 数据集的特定对象,这一点至关重要。此外,训练需要通用以涵盖图 1 的所有三个异常场景。

    分割和合成模块仅在内部分割数据集上进行训练。因此,这没有对异常的任何假设,并且还确保了分割模块仅针对分割任务进行训练,而无需平衡任何其他因素。

    为了训练相异性模块,[24] 通过生成合成数据来模拟存在异常的分割图,解决了没有 OoD 数据集的问题。该方法将gt语义图中的随机选择对象实例类替换为替代随机类。然后,这些改变的语义图被合成(使用已经训练的模块),在真实图像和生成图像之间产生视觉差异。差异网络使用这些差异来训练和检测差异。尽管这种方法不需要在训练期间看到 OoD 对象,但它无法训练完全鲁棒的逐像素异常检测。首先,该训练数据生成器仅涵盖一种异常情况(图 1 - 顶部),但缺少其他两种情况的示例。其次,这种方法使用gt语义图训练相异网络,但在推理过程中,它使用预测图。这种分布变化会对网络检测异常的性能产生负面影响。最后,具体到 Sec3.1 中介绍的方法 ,改变的实例不会与不确定的区域相关联。因此,这些训练示例无法利用来自不确定性地图的信息。

    我们通过添加第二个训练数据源来扩展训练数据生成器。 具体来说,我们将gt语义图中 void 类中的对象标记为异常。 void 类通常用于分割数据集 [6] 以覆盖不属于任何训练类的对象,这属于异常的定义。 这种额外的标签来源帮助我们克服了以前数据生成器的挑战。 首先,这些空白区域中的预测语义图将与推理过程中看到的三种异常情况密切匹配(图 1),而不仅仅是一个。 其次,相异性网络将使用预测的语义图进行训练,而不是使用gt进行训练,这会阻止推理过程中的任何域适应。 最后,空白区域通常与高不确定性像素匹配,这些像素引导相异性网络使用不确定性信息。

    请注意,通过将这些 void 类对象添加为异常,我们失去了在训练期间不需要 OoD 数据的好处。 然而,通过使用这两种方法,我们提出的方法仍然能够推广到看不见的对象,如 Sec. 4.2.

    3.3. Predictions Ensemble

    到目前为止,我们已经使用计算出的不确定性映射(即 softmax 熵、softmax 距离和感知差异)作为相异模块中的注意机制。 然而,如 [31] 和 [28] 所示,这些不确定性map本身已经是异常预测。 因此,我们可以利用不确定性估计来补充相异网络的输出,以检测所有异常情况。 通过这个集合,我们减轻了对相异网络的任何可能的过度自信,这是深度学习模型中的一个常见问题,如 [11] 所述。 我们使用加权平均来集成这些预测,其中权重是通过网格搜索选择的。 此外,我们测试了在不同网络的端到端训练中学习集成权重。 这些结果并不令人满意,因为网络仍然会产生过度自信的预测。 有关端到端训练的更多详细信息,请参见附录 A.4。

    实验

    表格

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 异常检测阅读笔记《Inpainting Transformer for Anomaly Detection》 CVPR 2021 来源:2021年的CVPR,原文论链接: 论文的方向是图像方面的异常检测,本质上还是重构之后与原图像对比来得出异常的归类于基于重构的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,814
精华内容 2,325
关键字:

anomaly detection