《Learning Unsupervised Metaformer for Anomaly Detection》论文阅读笔记

作者:Jhih-Ciang Wu1,2, Ding-Jie Chen1, Chiou-Shann Fuh2, and Tyng-Luh Liu1

出自:ICCV 

Abstract:

        核心是一个无监督的通用模型,称为Metaformer,它利用元学习模型参数来实现高模型适应能力和实例感知注意力来强调焦点区域以定位异常区域,作者设计了一个元学习策略,使我们的通用广告模型能够得到微调,只有少数异常自由的支持例子,以处理一个新的类别。

Introduction

        我们学习与一个无监督metatraining策略的模型参数。即培训由无数few-shot图像重建任务获得通用模型的参数,可以快速调整使用一些anomaly-free自身测试每个底层小说类的例子。我们注意到meta-training阶段没有获得任何自身测试阶段,测试中使用的图像/推理小说分类阶段。我们引入instance-aware注意调整autoencoder (AE)关注实例区而重建图像。我们首先建立基于显著预测实例之前,然后通过一个注意力机制进行AE正规化。

       这个 方法是第一个通过采用自适应实例感知重建方法来解决图像AD任务的方法。我们采用模型Model-Agnostic Meta-Learning (MAML)

 Method:

        引入Metaformer来解决模型自适应和重建间隙的问题,对图像级异常进行分类并定位像素级异常区域。利用元学习策略来学习单个Metaformer模型,该策略包括元训练元测试两个步骤。无监督元训练被用于学习通用变形元以捕获通用类别独立实例感知图像重建的概念元训练模型的快速自适应调整能力使得能够在元测试步骤中利用该类别的几个无异常示例快速地精细调整通用元形成器。

        元任务是指学习模型需要完成的应用,我们将元任务定义为少镜头图像重建。作者使用MAML算法来执行元训练步骤和元测试步骤,而在元学习步骤中,考虑使用无监督聚类来采样元任务,同时学习通用Metaformer。

        元任务在我们的元学习中,每个元任务模拟一个少镜头图像重建。无监督元训练使用大量的少镜头图像重建元任务来训练模型以捕获一般的类别无关图像重建概念。首先使用ResNet 18 [16]提取特征,并在特征空间上执行k-means算法以将Dmeta分成N个粗略组。然后根据与中间特征的结构相似性形成精细图像组Gi,对于处理一个特定图像类别的元任务Ti = {Mθ, Gi ⊂ Dmeta}

        元训练旨在学习具有高适应能力的通用AD模型,无监督元训练采用许多少镜头图像重建作为元任务以捕获重建的一般概念,其中用于对应元任务的每个图像组由无监督图像聚类产生。给定元形成器Mθ,元训练过程适应关于大量元任务Ti的Mθ。直观地,图像重建损失是从重建图像I=Mθ(I)和输入图像I之间的差导出的。然后我们将元任务损失L(Ti)定义为

最小化其重构损失以检索最佳θ

 

跨元任务的元训练优化和模型参数因此被更新为

 元测试:

        

我们将损失函数定义为均方误差lmse和结构相似性损失lssim

 Metaformer设计为基于变换器的实例感知自动编码器,由三个模块组成:自动编码器、实例先验生成器和转换器。

 Autoencoder:模型在编码器和解码器中均为五层对称。自动编码器A首先将输入图像I编码成潜在表示,然后将潜在表示Z解码成中间图像I。

Instance-prior Generator:先验生成器P使用视觉效果GAN内的生成器部分,其包括生成器、编辑器和鉴别器,我们将从该模块生成的响应图R表示为R = P(I)一旦视觉效果GAN被训练,我们直接使用它的生成器作为我们的实例先验生成器,而不需要任何参数微调。

Transformer:变换器的注意机制通过关注解码器的输入来重新表达编码器的输入的特征表示,因此使得编码器的输入能够模拟解码器的输入所拥有的特征表示。我们将由该模生成的重构实例先验R ′表示为R ′ = T(R)

通过I ^和I之间的差异确定异常区域。

实验:

         通过使用MSRA10K数据集[9]作为Dmeta和MVTec AD数据集[4]作为DAD来制定元任务

        数据集:MVTec AD,MTD

        

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用PyTorch实现DFF的示例代码。这里假设你已经定义了多个卷积神经网络进行特征提取,并且每个网络的输出为一个特征张量。我们将使用全局平均池化层将每个特征张量转换为一个特征向量,然后将这些特征向量拼接在一起,最终使用一个全连接层将全局特征向量映射到一个低维空间。 ```python import torch import torch.nn as nn import torch.nn.functional as F class DFF(nn.Module): def __init__(self, num_networks, input_dim, hidden_dim, output_dim): super(DFF, self).__init__() self.num_networks = num_networks self.input_dim = input_dim self.hidden_dim = hidden_dim self.output_dim = output_dim # 定义卷积神经网络和全局平均池化层 self.networks = nn.ModuleList([nn.Conv2d(in_channels=input_dim[i], out_channels=hidden_dim[i], kernel_size=3, padding=1) for i in range(num_networks)]) self.avg_pool = nn.AdaptiveAvgPool2d((1, 1)) # 全局平均池化层 # 定义全连接层 self.fc = nn.Linear(num_networks * hidden_dim[-1], output_dim) def forward(self, x): # 对每个卷积神经网络进行特征提取并全局平均池化 features = [] for i in range(self.num_networks): f = self.networks[i](x[i]) f = F.relu(f) f = self.avg_pool(f) f = f.view(f.size(0), -1) # 将特征张量转换为特征向量 features.append(f) # 将所有特征向量拼接在一起 global_feature = torch.cat(features, dim=1) # 使用全连接层将全局特征向量映射到一个低维空间 output = self.fc(global_feature) return output ``` 在上面的代码中,我们定义了一个DFF类,其中包含了多个卷积神经网络、全局平均池化层和全连接层。在forward函数中,我们对每个卷积神经网络进行特征提取并全局平均池化,然后将所有特征向量拼接在一起,最终使用全连接层将全局特征向量映射到一个低维空间。 需要注意的是,这里的代码仅供参考,实际实现可能会因为具体的输入数据形状、网络结构等因素而有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值