基于ViT的无监督工业异常检测模型汇总

论文1:VT-ADL: A Vision Transformer Network for Image Anomaly Detection and Localization(2021)

1.1 主要思想

所提出的模型结合了传统的基于重建的方法和基于补丁的方法的优势。输入图像被细分为块,并使用 Vision Transformer 进行编码。然后将生成的特征馈送到解码器中以重建原始图像,从而使网络学习代表正常图像方面的特征(网络训练的唯一数据)。同时,高斯混合密度网络对 transformer 编码特征的分布进行建模,以估计该潜在空间中正常数据的分布。使用此模型检测异常会自动允许其定位,因为 transformer 编码的特征与位置信息相关联。

1.2 系统框架

在这里插入图片描述
使用基于重建的方法在全局级别检测到异常,通过应用于编码图像块的高斯混合模型进行定位。

论文2:Inpainting Transformer for Anomaly Detection(2021)

2.1 主要思想

区别与CNN,该论文作者采取基于自注意力机制的纯Transformer结构,将异常检测问题转换为图像覆盖修补问题。其解决方案实质上是基于图像重构的,其创新点在于采取自注意力机制进行全局的图像重建,重建后的图像与原图进行对比,差异部分就是异常部分。关于如何重建,还是由仅通过正常样本的训练得到的重建网络做到的。

2.2 模型架构

在这里插入图片描述

  • 每个Transformer块的输入输出都是一个序列(左侧)
  • inmatic 网络架构由一些简单的 Transformer 块堆栈组成。每个Transformer 由 MFSA 和多层感知器 (MLP) 组成。(右侧)
  • 对最后一个Transformer块的输出序列进行了平均,得到了一个向量,该向量用于通过映射得到扁平化的补丁像素空间。

对这些Transformer块进行训练,可以根据相邻的补丁对覆盖的图像块进行很好的修复。

推理和检测部分的实施过程是先生成完整的修复图像,然后使用重建后的图像和原始之间的差异来计算像素级异常图。

论文3:UTRAD: Anomaly Detection and Localization with U-Transformer(2022)

3.1 主要思想

该篇论文的解决方案实质上还是基于图像重构的方式,针对重建方式的不稳定和调整困难,以及采用大数据集预训练网络特征空间泛化能力差的问题,研究者采用了一些新颖的思想去改进:

  • 为避免预训练模型特征表示的不稳定性,在训练时采用冻结骨干网进行训练;
  • 为更好的估计深度特征,采用特征级别进行重建(重要结论:正常样本和异常样本在特征空间中更容易区分);
  • 构建了一个基于Transformer的多级自动编码器作为重建网络,利用提取到的正常样本的特征进行了训练;
    • 加入了Transformer注意力模块,全局信息可以得到很好聚合,模型更具泛化能力;
    • 考虑网络性能,降低计算成本,在构建时采用U型的Transfo
### 基于ViT视觉变换器的异常检测 #### ViT异常检测中的优势 Vision Transformers (ViTs) 的引入为计算机视觉带来了新的视角,特别是在处理复杂场景下的任务时表现出色。对于异常检测而言,ViTs 提供了强大的表征学习能力,可以捕捉到输入数据的空间依赖关系和全局上下文信息[^1]。 #### 异常检测的具体实现方法 一种常见的基于ViT异常检测框架如下: 1. **特征提取** 使用预训练好的ViT作为骨干网络来获取图像序列或单张图片的深层特征表示。通过移除分类头并保留Transformer编码层,可以直接获得用于后续分析的有效特征向量。 2. **重建损失计算** 构建自编码结构,在此基础上加入额外模块如注意力机制增强模型对正常样本的学习效果;利用重构误差衡量测试实例与已知类别之间的差异程度,以此判断是否存在异常情况。 3. **阈值设定** 根据历史数据统计特性确定合理的决策边界,当新观测超出此范围则视为潜在风险事件触发预警信号。 ```python import torch.nn as nn from transformers import ViTModel class AnomalyDetector(nn.Module): def __init__(self, pretrained_model_name='google/vit-base-patch16-224-in21k'): super(AnomalyDetector, self).__init__() # Load pre-trained Vision Transformer model without classification head self.backbone = ViTModel.from_pretrained(pretrained_model_name).encoder # Define reconstruction layers or other anomaly scoring mechanisms here... def forward(self, x): features = self.backbone(x)[-1] # Get last hidden state output from the encoder # Implement further processing steps such as autoencoding loss computation ... return scores ``` 该代码片段展示了如何初始化一个简单的基于ViT异常检测类`AnomalyDetector`,其中包含了加载去掉顶部全连接层后的ViT模型以及定义前向传播过程的基础逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值