扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

视觉异常检测的 13 种常用方法

03/17 23:04
405
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

什么是视觉异常检测?

视觉异常检测是一种计算机视觉技术,它通过模型学习物体或场景的正常外观,然后检测任何与正常模式显著偏离的情况。简而言之,它回答的问题是:“与正常示例相比,这幅图像的任何部分看起来是否异常?”

现代视觉异常检测系统通常会生成一个异常分数来显示图像的异常程度,并生成一个异常图或热图来显示异常区域的位置。

视觉异常检测系统的成功与否取决于它对“正常”图像的学习程度。在异常检测研究中,“正常”数据指的是系统应该视为有效、预期且非异常的样本集合。

这意味着数据采集不仅仅是收集大量图像,而是要收集正确的正常图像。数据集应该捕捉到合格产品在实际运行条件下的真实变化,包括纹理、光照、位置、方向和表面外观的细微差别。如果训练数据中缺少这些正常变化,模型之后可能会将其错误地标记为异常。

实际上,定义正常状态首先要使用与部署过程中相同的相机设置和环境拍摄图像。背景、光照、距离、角度和产品摆放位置应尽可能保持一致,因为视觉异常检测对并非实际缺陷的变化非常敏感。此外,收集不同批次、不同时间和不同操作条件下的正常样本也至关重要,这样模型才能学习到真实的正常变化,而不是过于精确的、过于狭隘的正常状态。

正常状态的定义始终取决于具体任务。在许多工业异常检测场景中,正常数据由无缺陷或无异常的样本构成。这也是广泛使用的基准测试的构建方式。MVTec AD使用无缺陷图像进行训练,而异常样本则在测试阶段出现。MVTec 3D-AD和MVTec AD 2也遵循相同的模式,使用无缺陷的训练集和验证集。因此,在工厂检测中,“正常”状态往往与“良好”状态非常接近。

但研究并未将正态分布局限于单一的完美类别。在异常检测中,只要符合预期的内点分布,正态数据也可以包含多个有效类别。关键问题不在于“这个样本是否完美?”,而在于“这个样本是否属于模型预期接受的有效数据分布?”

“正常”不仅指视觉上无缺陷的表面,也指构图上有效的场景。在诸如MVTec LOCO AD 之类的数据集中,训练图像本身没有异常,但测试集中的异常可能并非仅仅源于表面缺陷,而是源于对象数量、位置或组合的无效性。在这种情况下,“正常”要求各个组成部分及其空间或逻辑关系都正确无误。

从概念上讲,这是机器视觉领域一次引人入胜的转变。传统的检测方法判断物体是否损坏,而 LOCO AD 则判断物体的配置是否合理。这种差异促使异常检测更接近结构化推理,因此许多近期论文将 LOCO AD 视为工业检测和更高层次场景理解之间的桥梁。

目标是教会系统“正常”并非指一张精确的图像,而是指一系列可接受的外观范围。因此,一个好的数据集应该包含所有可接受的产品示例,即使它们之间存在细微的自然差异。一旦模型学习到这个正常基线,就可以将新图像与之进行比较,并识别出超出预期范围的区域。

视觉异常的类型

并非所有异常情况都相同。您遇到的异常情况类型决定了您应该使用哪种方法。研究界和标准基准区分了几个类别。

结构异常:结构异常是指改变物体表面或形状的物理缺陷。例如划痕、凹痕、裂缝、孔洞、污染、污渍或缺口。这些异常通常是局部的,仅影响图像的一小部分区域。

逻辑异常:逻辑异常是指组件之间的排列方式不正确,即使每个组件外观看起来都正常。例如,缺少电缆、组件放置错误、顺序错误或存在额外的物体。这类异常更难检测,因为问题在于组件之间的关系,而非表面缺陷。

纹理异常:纹理异常是指表面图案或材料中存在的细微偏差,例如织物纹理不规则、木纹变化、涂层不一致或颜色偏移。这些异常难以察觉,因为与正常纹理的差异可能非常小。

语义或场景级异常:当整个场景包含意想不到的东西时,就会出现语义或场景级异常,例如生产线上的产品错误、限制区域内的人或视野中的异物。

层级异常与补丁级/实体级:异常也可能出现在不同的粒度级别。补丁级异常影响图像中的小区域,例如划痕或弯曲的图钉。实体级异常涉及不属于该区域的完整对象,例如传送带上的错误产品。

实际上,许多实际系统都会遇到多种类型的异常。因此,现代检测流程通常会将局部补丁分析与全局推理方法相结合。

异常检测的主要方法

视觉异常检测并非单一技术,而是一系列方法的统称。以下列表汇总了视觉异常检测中常用的学习策略、模型类型和数据设置。

1. 全监督

在完全监督学习模式下,正常样本和缺陷样本都会被标注。根据任务的不同,这些标注可以是图像级标签、边界框或像素级掩码。这种模式能够提供关于已知缺陷的最丰富的语义信息,并且在缺陷类型已知、稳定且在训练数据中得到充分体现时,通常能获得最高的准确率。但缺点是标注成本最高,并且对新的、未见过的缺陷类型的泛化能力有限。

在工业检测领域,诸如RF-DETR SOTA检测与分割等模型最为常用,因为它们兼具速度和精度,适用于实时应用。这些模型广泛应用于全监督式工业异常或缺陷检测流程中。

2. 弱监督

弱监督方法仍然使用异常样本,但监督信息较为粗略而非精确。模型可能只拥有图像级别的标签,例如“缺陷”、粗略的边界框或不完整的标注,而不是完整的缺陷掩码。其主要目标是在降低标注成本的同时,仍然为模型提供足够的信息来学习异常模式。WeakREST 就是一个很好的例子,它将异常定位问题重新表述为一个更弱的块级分类问题,使其能够在有限的监督下工作。

3. 半监督

半监督方法通常结合大量正常样本和少量异常样本。这使得它们成为缺陷样本数量较少但不足以训练一个强大的全监督检测器时的理想折中方案。MemSeg 就是一个典型的例子,它引入了模拟异常样本和内存特征,在半监督框架下检测工业表面缺陷。

4. 自监督

自监督方法无需人工标注缺陷。相反,它们利用掩蔽、重建、对比学习或合成异常生成等任务,从正常图像或未标注图像中创建自身的学习信号。这有助于模型学习正常视觉模式的强表征,这些表征随后可用于在推理过程中检测异常区域。

当异常样本稀少但正常图像易于采集时,这些方法非常有用。模型并非学习特定的缺陷类别,而是学习正常数据的结构,从而使偏差能够被识别为异常。常见的例子包括PatchSVDD、CutPaste和基于掩码的方法。

5. 无监督

在无监督视觉异常检测(VAD)中,模型通常仅使用正常样本进行训练,然后在测试时标记偏差。当异常数据稀少、成本高昂或未知时,这是一种标准设置。模型并不学习缺陷类别,而是学习正常性。MambaAD 就是一个近期的无监督示例,它从无异常图像中学习正常的视觉模式,然后检测偏离学习到的正常模式的区域。它使用状态空间建模来捕捉图像中的局部细节和长程关系。

6. 基于重建的方法

基于重建的方法训练模型来重建正常图像,然后将重建误差作为异常信号。其基本思想很简单:如果模型只学习了正常图像的外观,那么它应该能够很好地重建正常样本,而对异常区域的重建效果较差。这些方法直观易懂,至今仍广泛应用于工业表面检测。DRAEM 就是一个很好的例子,它将重建与判别式学习相结合,因此可以直接定位异常,而无需仅仅依赖原始的重建误差。

7. 记忆库和最近邻方法

记忆库方法存储具有代表性的正常图像块特征,并将每个测试图像块与存储的特征进行比较。如果一个图像块与所有已记忆的正常图像块相差甚远,则其异常得分较高。这些方法对于局部缺陷(例如划痕、凹痕或细小的纹理断裂)尤其有效。最著名的例子是PatchCore,它使用预训练的图像块特征、核心集子采样记忆库和最近邻搜索来生成图像级异常得分和像素级热图。

8. 分布建模方法

分布建模方法学习正常特征的统计分布,而不是显式地存储所有特征。在推理过程中,模型会衡量测试样本与学习到的分布之间的偏差程度。当需要比完整内存更紧凑的正态性表示时,这种方法非常有用。PaDiM 就是此类方法的一个例子,它使用多元高斯分布对样本嵌入进行建模,并使用马氏距离进行异常评分和定位。

9. 知识蒸馏方法

知识蒸馏方法采用师生架构。教师网络生成正常的特征表示,学生网络则被训练成在无异常图像上模仿这些特征表示。在测试阶段,当学生网络无法匹配教师网络时,就会检测到异常。这类方法的优势在于其准确性和速度兼备。EfficientAD 就是一个很好的例子,它将轻量级的师生架构与辅助自编码器分支相结合,实现了极低延迟的异常检测。

10. 基于流量和密度估计的方法

基于流的方法明确地对正常特征的概率分布进行建模。如果测试样本在该分布下的似然性较低,则将其标记为异常。这些方法是“这个特征有多正常? ”这一概念的更简洁的概率版本。一个著名的例子是FastFlow,它使用二维归一化流处理深度特征,并高效地支持异常检测和定位。

11. 少样本异常检测

当目标产品或类别只有少量正常参考图像可用时,少样本异常检测方法即可发挥作用。该模型无需从大型训练集中学习,而是利用这些少量样本构建正常外观的基线,然后检查新图像是否偏离该基线。

当新产品线数据非常有限,但仍需快速启动检测时,这种设置非常有用。少样本检测的例子包括UniVAD、DictAS和最近推出的SubspaceAD。它是一种无需训练的少样本视觉异常检测方法,在测试时仅使用少量正常参考图像,并结合组件聚类、图像块匹配和基于图的组件建模来检测工业、逻辑和医疗异常。

12. 零样本异常检测

零样本异常检测旨在不使用目标类别中的参考正常样本,检测新类别中的异常。由于没有特定类别的训练数据,这些方法依赖于外部知识,最常用的是预训练的多模态视觉语言模型,例如CLIP。零样本异常检测的优秀示例包括AnomalyCLIP、CLIP-AD、AnoCLIP和WinCLIP。

WinCLIP 使用预训练的 CLIP 模型,并将图像内容与正常和异常的文本提示进行比较,从而生成异常评分。它并非仅使用单一的全局图像嵌入,而是提取并聚合图像级、窗口级和图像块级的特征,这有助于它判断图像是否异常并定位异常位置。

13. 基于VLM和基础模型的方法

近期的一些方法利用视觉语言模型和基础模型,以更广泛的语义理解来检测异常。当异常不仅仅是微小的表面缺陷,而是涉及逻辑、关系或场景层面的问题时,这些方法尤其有效。AnomalyGPT 就是一个很好的例子,它使用大型视觉语言模型来检测异常、定位异常,并回答图像中存在的问题。

—THE END—

相关推荐