中科院自动化所等《图像异常检测研究现状》综述论文
图像异常检测是计算机视觉领域的一个热门研究课题, 其目标是在不使用真实异常样本的情况下, 利用现有的正 常样本构建模型以检测可能出现的各种异常图像, 在工业外观缺陷检测, 医学图像分析, 高光谱图像处理等领域有较高的研 究意义和应用价值. 本文首先介绍了异常的定义以及常见的异常类型. 然后, 本文根据在模型构建过程中有无神经网络的参 与, 将图像异常检测方法分为基于传统方法和基于深度学习两大类型, 并分别对相应的检测方法的设计思路、优点和局限性 进行了综述与分析. 其次, 梳理了图像异常检测任务中面临的主要挑战. 最后, 对该领域未来可能的研究方向进行了展望.
http://www.aas.net.cn/cn/article/doi/10.16383/j.aas.c200956
异常检测是机器学习领域中一项重要的研究内容. 它是一种利用无标注样本或者正常样本构建检测模型[1], 检测与期望模式存在差异的异常样本的方法. 异常检测在各种领域中都有广泛的应用, 如网络入侵检测, 信号处理, 工业大数据分析, 异常行为检测和图像与视频处理等.
早期的异常检测算法大多应用于数据挖掘领域, 而近年来随着计算机视觉和深度学习等相关技术的发展, 许多相关工作将异常检测引入到图像处理领域来解决样本匮乏情况下的目标检测问题.
传统的目标检测算法中很大一部分方法属于监督学习的范畴, 即需要收集足够的目标类别样本并进行精确的标注, 比如图像的类别、图像中目标的位置以及每一个像素点的类别信息等[2, 3]. 然而, 在许多应用场景下, 很难收集到足够数量的样本. 例如, 在表面缺陷检测任务当中, 实际收集到的图像大部分属于正常的无缺陷样本, 仅有少部分属于缺陷样本, 而需要检测的缺陷类型又十分多样, 这就使得可供训练的缺陷样本的数量十分有限[4]. 又比如在安检任务当中, 不断会有新的异常物品出现[5]. 而对于医学图像中病变区域的识别任务, 不仅带有病变区域的样本十分稀少, 对样本进行手工标注也十分耗时[6]. 在这些情况下, 由于目标类别样本的缺乏, 传统的目标检测和图像分割的方法已不再适用.
而异常检测无需任何标注样本就能构建检测模型的特点, 使得其十分适用于上述几种情况[7]. 在图像异常检测当中, 收集正常图像的难度要远低于收集异常图像的难度, 能显著减少检测算法在实际应用中的时间和人力成本. 而且, 在异常检测中模型是通过分析与正常样本之间的差异来检测异常样本, 这使得异常检测算法对各种类型甚至是全新的异常样本都具有检测能力. 虽然标注样本的缺失给图像异常检测带来了许多问题和挑战, 不过由于上述各种优点, 如表1所示, 已经有许多方法将图像异常检测应用在各种领域中.因此, 图像异常检测问题具有较高的研究价值和实际应用价值.
随着对异常检测研究的深入, 大量研究成果不断涌现, 也有许多学者开展了一些综述性工作. 如Ehret等[20]根据不同的图像背景, 对大量图像异常检测方法进行了综述, 不过对基于深度学习的方法还缺乏一定的梳理. Pang等[21]和Chalapathy[22]等则是从更为广阔的角度对基于深度学习的异常检测方法进行了梳理, 不过由于数据类型的多样性, 这些工作对异常检测在图像中的应用还缺乏针对性. 陶显等[23]对异常检测在工业外观缺陷检测中的应用进行了一些总结, 不过重心落在有监督的检测任务上, 对无监督的异常检测方法欠缺一定的整理和归纳. 而本文则针对无监督的图像异常检测任务, 以工业、医学和高光谱图像作为具体应用领域, 对传统和基于深度学习的两大类方法进行梳理. 上述三种应用领域都有相同的特点即可使用的带标注异常样本数量稀少, 因此有许多工作针对这几个领域内的异常目标检测问题开展了研究. 本文整体结构安排如下: 第1节将介绍异常的定义以及常见的形态. 第2节根据模型构建过程中有无神经网络的参与, 将现有的图像异常检测算法分为传统方法和基于深度学习两大类并分别进行综述与分析. 第3节将介绍图像异常检测中常用的数据集. 第4节将介绍在图像异常检测当中面临的主要挑战. 第5节将综合图像异常检测的研究现状对未来可能的发展方向进行展望. 最后第6节将对本文内容进行总结.
异常, 又被称为离群值, 是一个在数据挖掘领域中常见的概念[24], 已经有不少的工作尝试对异常数据进行定义[25, 26]. Hawkins等[25]将异常定义为与其余观测结果完全不同, 以至于怀疑其是由不同机制产生的观测值. 一般情况下, 会将常见的异常样本分为三个类别[1]: 点异常、上下文异常和集群异常. 点异常一般表现为某些严重偏离正常数据分布范围的观测值, 如图1(a)所示的二维数据点, 其中偏离了正常样本点的分布区域(N1, N2)的点(O1, O2和O3)即为异常点。
图像数据中每一个像素点上的像素值就对应着一个观测结果. 由于图像内像素值的多样性, 仅仅分析某一个点的像素值很难判断其是否属于异常. 所以在大部分图像异常检测任务中, 需要联合分析图像背景以及周围像素信息来进行分类, 检测的异常也大多属于上下文或者模式异常. 当然, 这三种异常类型之间并没有非常严格的界限. 例如, 有一部分方法就提取图像的各类特征[27], 并将其与正常图像的特征进行比较以判断是否属于异常, 这就将原始图像空间内模式异常的检测转换到了特征空间内点异常的检测. 图像异常检测任务根据异常的形态可以分为定性异常的分类和定量异常的定位两个类别. 定性异常的分类, 类似于传统图像识别任务中的图像分类任务, 即整体地给出是否异常的判断, 无需准确定位异常的位置. 如图2左上图所示, 左侧代表正常图像, 右侧代表异常图像, 在第一行中, 模型仅使用服饰数据集(Fashion mixed national institute of standards and technology database, Fashion-MNIST)[28]中衣服类型的样本进行训练, 则其他类别的样本图像(鞋子等)对模型来说都是需要检测的异常样本, 因为他们在纹理、结构和语义信息等方面都不相同. 又或者如第二行所示, 异常图像中的三极管与正常图像之间只是出现了整体的偏移, 而三极管表面并不存在任何局部的异常区域, 难以准确地定义出现异常的位置, 更适合整体地进行异常与否的分类.
一般情况下图像异常检测的目标是通过无监督或者半监督学习的方式, 检测与正常图像不同的异常图像或者局部异常区域. 近年来传统机器学习方法已经在图像异常检测领域有了较多的应用, 而随着深度学习技术的发展, 越来越多的方法尝试结合神经网络来实现图像异常检测. 根据在模型构建阶段有无神经网络的参与, 现有的图像异常检测方法可以分为基于传统方法和基于深度学习的方法两大类别. 如图3所示, 基于传统方法的异常检测技术大致包含六个类别: 基于模板匹配、基于统计模型、基于图像分解、基于频域分析、基于稀疏编码重构和基于分类面构建的异常检测方法. 而基于深度学习的方法大致包含四个类别: 基于距离度量、基于分类面构建、基于图像重构和结合传统方法的异常检测方法.
本文根据检测原理将传统图像异常检测方法分类为以下类别: 基于模板匹配、基于统计模型、基于图像分解、基于频域分析、 基于稀疏编码重构和基于分类面构建的异常检测方法. 传统的图像异常检测算法大多会学习一个模型来描述正常图像, 随后在检测阶段根据待检图像与现有模型之间的匹配程度来进行异常检测.
近年来, 深度学习在计算机视觉中的各个领域内都得到了长足的发展. 相比于传统的方法, 深度学习由于其无需人工设计特征, 算法通用性更高等优点, 已经被广泛引入到了图像异常检测任务当中. 现有的方法大致可以分为以下几类: 基于距离度量的方法、基于分类面构建的方法、基于图像重构的方法和与传统方法相结合的方法.
图像异常检测相关的研究方兴未艾, 目前有许多识别定性异常的相关文章是在传统图像分类数据集上开展的, 诸如MNIST[89], Fashion-MNIST[28], CIFAR-10[90]等等. 而对于定量异常的检测任务, 所使用的数据集就与具体的应用领域相关, 如表4所示.
本文对近年来图像异常检测方法的发展状况进行了回顾, 可以看到针对这一问题已经有了一定数量的研究. 关于未来可能的研究方向, 我们认为可以从以下几个角度进行考虑:
1) 构建更为高效的异常检测算法. 对于异常检测而言, 不仅仅需要对待检图像进行正常与否的判断, 往往还需要对异常区域进行定位. 比如工业图像表面的缺陷检测, 医学图像中病变区域的定位等等. 然而, 由于在训练阶段没有任何关于异常区域的标注信息, 传统的目标检测或者图像分割的方法无法直接应用到异常检测任务中. 因此, 现有的方法大多采用的是将待检图像切分成一系列的图像块, 然后分块进行异常与否的二分类来进行异常区域的定位. 而且, 为了获得异常区域的准确轮廓, 这种切分的步长一般较小, 会显著影响算法的效率. 现有的一些方法比如频谱分析虽然能够同时处理整张图像以实现高效的定位, 但该方法对于图像有一定的要求. 而基于深度学习的图像重构方法虽然没有上述约束, 但重构图像中残留的异常区域会影响后续的检测. 因此, 如何兼顾检测精度和实时性仍需进一步的探索.
2) 小样本/半监督学习. 现阶段的异常检测方法大部分仅利用正常样本来训练模型. 但是在实际检测任务中, 并不是完全无法获取真实的异常样本. 比如在工业外观检测任务中, 少量的缺陷样本是可以获取的. 而且对几张缺陷图像进行标注并不会显著地增加训练成本. 而且相关文献[96]初步尝试了在训练过程中引入一张真实异常图像并且获得了一定的效果提升. 因此可以考虑结合小样本学习的方法, 利用大量正常样本和几张真实的异常样本来进行模型训练以提高性能. 而有些异常检测任务面临的是严格无监督的环境[98], 连所用样本是否属于正常样本也不可预知, 此时训练样本中存在的少量异常样本就会对模型的训练产生性能上的影响, 如果采用半监督的训练方式, 对少量正常和异常样本进行标注, 可以有效提升模型对潜在异常样本的检测能力. 但是这种方法还是会面临一些问题, 比如采集到的异常样本显然不可能囊括所有类别, 如何让模型兼顾对已知类型和未知类型异常样本的检测能力, 也是一个待研究的任务.
3) 更自适应的样本合成方法. 在许多相关的文献中[105, 108, 110]都已经证明了在模型训练阶段, 引入各种人工构造的异常图像能有效地提升检测性能. 即便构造的异常图像与真实的异常图像并不相同, 额外增加的异常图像可以提升分类面的贴合度或者背景重构的稳定度, 这都可以增加模型对潜在异常图像的检测能力. 但相关文献表明这些额外的异常样本越接近与正常样本模型的性能越好[105]. 然而, 相关方法中额外使用的异常图像大多是采集自别的数据集, 这些图像一般与正常样本的分布之间存在较为明显的差异. 虽然有方法尝试采用梯度上升的方式合成异常图像, 但该方法在更为复杂的图像上的结果还有待论证. 因此, 如何针对各种正常图像自适应地合成异常样本也是一个有待解决的问题.
4) 轻量化网络设计. 基于深度学习的异常检测方法得益于神经网络强大的学习能力往往能得到比传统方法更优秀的性能, 但代价是需要更多的计算量和更长的处理时间. 对于一张待测图像, 需要利用深层神经网络提取特征向量以区分正常和异常样本, 而且重构类的方法还需要再次经过第二个深层神经网络来重构输入图像. 因此, 更为轻量化的网络设计能够减少方法的运行时间. 此外, 大多数方法在验证时硬件条件较好, 而实际生产现场要部署同等算力的设备会需要较高的成本, 因此, 轻量化的网络设计在减少计算量的同时, 还能降低对硬件设备的需求, 降低在实际应用中的成本. 针对这一问题, 现阶段常用的有两类方法: 1)轻量模型设计, 设计更为高效的网络计算方法以实现减小模型体积的同时保持性能不变, 例如MobileNet[175]等. 也可以采用知识蒸馏的方式, 用复杂网络的输出作为目标来训练一个更为简单的网络; 2)模型压缩, 有通过剪枝的方式剔除冗余的权重以减小模型大小, 也有通过网络量化的方式, 以牺牲一定精度为代价减小网络参数所占空间, 其中二值化模型具有突出的压缩性能, 更利于模型部署.
5) 更高精度的异常定位方法. 对于异常定位任务, 现有的方法大多会采用滑窗的方式将原始图像分解成一系列小的图像区域, 然后再利用异常分类的方式对每一个区域进行异常与否的分析. 这种分块分析的方式无法精准地定位异常区域, 处于异常纹理与正常纹理的交界处的图像区域也很有可能被误判为异常. 而对于能直接定位异常的图像重构类方法, 又会因自身重构精度的限制, 在正常纹理区域也会出现差异, 这也会影响对一些微弱异常区域的定位效果. 在医学和工业等领域内异常目标的检测中, 不仅要关注召回率, 异常检测的精准率也十分重要. 但从现有方法的效果看, 许多方法主要在召回率方面性能优异, 因为在实际应用领域中漏检的危害性远高于误检. 但如果能够在保证召回率的同时提高精准率, 尽可能减少后续人工或者算法的二次处理, 异常检测方法将能更广泛地应用在相关领域中. 因此, 如何精准定位异常区域并减少对正常图像区域的误判情况, 同样也是一个值得研究的问题.