【2023工业图像异常检测文献】GRAD: 基于异常生成和重权密集对比模式的异常检测方法

Generating and Reweighting Dense Contrastive Patterns for Unsupervised Anomaly Detection

1、Background

图像异常检测在各个领域扮演着至关重要的角色,包括工业产品缺陷检测、医学图像病变检测、使用X光图像的安全检查以及视频监控。

然而,由于无法覆盖足够多样化的潜在异常模式范围,获取用于训练的真实世界异常数据通常是具有挑战性和稀缺的。因此,一类学习设置,即仅使用正常样本进行模型训练,已被证明更适合大多数工业异常检测任务。

近年来,许多高准确率的工业异常检测方法严重依赖于在辅助数据集上预训练的特征提取器,例如ImageNet。然而,这种依赖可能会限制它们在ImageNet预训练特征信息不足的场景中的泛化能力,或者在其他类型的图像数据上。

此外,一些方法在不使用预训练特征提取器的情况下,在MVTec AD上取得了不错的结果。这些方法使用人工选择的外部非分布内(OOD)数据集或精心设计的异常模拟数据来采样异常模式。

然而,以前的异常获取策略可以被认为是依赖于先验或测试图像的视觉检查的临时解决方案,例如在MVTec AD中,大多数异常是低级结构异常(例如,划痕、凹陷和污染)。这种依赖可能导致这些策略在检测其他类型的异常时失败,例如最近在MVTec LOCO中提出的逻辑异常。这些逻辑异常被表示为图像中逻辑约束的违反,这不仅挑战了基于异常模拟的方法,也挑战了辅助数据集的预训练表示。

因此,有必要设计独立于预训练的Imagenet特征提取器和临时异常获取策略的图像异常检测技术。在本文中,我们引入了一个名为GRAD(生成和重权密集对比模式以进行无监督异常检测)的新颖框架,它在异常检测准确性和推理运行时间方面均实现了最先进的性能。

我们首先提出了一个新颖的异常生成范式:保留每个小图像块内的结构信息,同时忽略整个图像的全局结构信息。基于这个范式,我们设计了一个名为PatchDiff的异常生成器。该生成器对扩散模型的感受野大小施加了约束,并去除了DDPM中使用的自注意力层,从而确保只保留每个块内的局部结构,同时丢弃全局结构。通过设置不同大小的感受野,PatchDiff可以生成多样化的密集对比模式,涵盖MVTec LOCO中提出的结构和逻辑异常等异常类型。随后,我们期望利用生成的局部异常模式来学习块级异常检测器。然而,由PatchDiff生成的对比模式也可能是正常的,我们无法为它们提供逐块的真实标签。因此,生成的对比模式是未标记的。

此外,正常和生成数据中的局部模式通常是长尾的。考虑到前两点,我们引入了一个自监督重权机制来减轻假异常块(没有有效异常模式的块)和不平衡分布的负面影响。该机制利用检测器在训练阶段提取的特征的密度信息,为对比块分配不同的权重。它过滤掉假异常块,并重新平衡对比块的分布。

最后,为了获得更适合实际工业场景的高吞吐量异常检测模型,我们设计了一个轻量级的基于全卷积网络(FCN)的块级检测器,它仅包含8个卷积层,但与更大的模型在工业异常检测中的表现相当。此外,为了处理涉及混合级别异常的任务,我们还可以集成具有不同感受野的多个检测器。我们的经验发现,单级检测器足以在MVTec AD数据集上实现竞争性准确性,而三个检测器可以集成以处理MVTec LOCO中的结构和逻辑异常。

2、Method

GRAD方法是主要可以分为两个阶段:

(1)基于我们新提出的异常生成范式生成多样化的对比图像,以覆盖感兴趣的异常模式。

(2)使用我们提出的重权机制训练轻量级块级检测器,充分利用未标记和长尾生成的对比模式

异常图像生成

PatchDiff如何通过限制U-Net的感受野来生成只包含局部结构的对比模式,这些模式可以用来训练异常检测模型,以识别和定位图像中的各种异常。通过调整感受野的大小,PatchDiff能够生成不同级别的对比模式,从而帮助模型捕捉从简单到复杂的多种异常类型。

在这里插入图片描述

  1. PatchDiff与常规扩散模型的对比

    • 与常规的扩散模型(如DDPM)相比,PatchDiff在去噪过程中对U-Net的感受野进行了限制。这意味着PatchDiff在生成图像时只保留了局部结构信息,而忽略了全局结构信息。
  2. 局部结构的保留

    • PatchDiff的设计目的是在去噪过程中只关注局部结构,而不是整个图像的全局结构。这种设计使得PatchDiff能够生成包含局部异常模式的图像,这些模式可以用于训练异常检测模型。
  3. 生成更高级别的视觉结构

    • 通过重组特定级别的局部结构,PatchDiff能够有效地产生更高级别的新颖视觉结构。这些结构可能包含在正常图像中不存在的异常模式,有助于异常检测模型学习识别这些异常。
  4. 多级密集对比模式的生成

    • PatchDiff可以通过使用不同大小的感受野来生成多级密集对比模式。这些对比模式有助于暴露不同级别的异常,例如MVTec LOCO数据集中的结构异常和逻辑异常。
  5. 多级异常的检测

    • 结构异常通常指的是图像中的物理损坏或变形,而逻辑异常则是指违反图像中逻辑约束的异常。PatchDiff能够生成包含这些不同级别异常的对比模式,使得异常检测模型能够同时检测结构异常和逻辑异常。

异常图像判别

训练块级检测器时主要涉及的两个组件:训练集的组成和重权机制

在这里插入图片描述

  • 训练集组成(Training Set):训练集由一种类型的正样本(positive patch)和两种类型的负样本(negative patches)组成。
    • 正样本:这些是来自正常图像的补丁,被认为是没有异常的样本。
    • 负样本:这些是来自生成的对比图像的补丁,可能包含异常模式。负样本有两种类型:
      • 一种是直接从生成样本中裁剪出来的补丁,这些补丁可能包含真实的异常模式。
      • 另一种是来自正常样本但与错误的坐标映射结合的补丁,这些补丁被认为包含“假”的异常模式,因为它们破坏了补丁内容和位置之间的正常依赖关系。
  • 重权机制(Reweighting Mechanism):重权机制包含两个部分,用于处理训练数据中的假异常模式和长尾分布问题。
    • 过滤假异常模式(Mechanism (a)):这个机制的目的是要识别并减少那些不包含有效异常信息的负样本(即“假”异常模式)对训练过程的影响。这是通过比较负样本的特征与正样本特征集的相似度来实现的,如果负样本的特征与正样本特征集过于接近,则会降低其权重。
    • 重新平衡长尾训练数据(Mechanism (b)):这个机制旨在解决训练数据中某些特征过于常见而其他特征很少见的问题,即长尾分布问题。通过降低高密度区域样本的权重,并增加低密度区域样本的权重,可以使模型不会忽视那些罕见但重要的异常模式。

总的来说,训练块级检测器时,先处理训练样本,并通过重权机制来提高模型对异常模式的识别能力,同时减少假阳性的影响,并平衡训练数据的分布,以便更有效地学习异常检测任务。

pseudo-code

# 导入必要的库
import torch
import torch.nn as nn
import torch.optim as optim# 定义PatchDiff模型,用于生成对比模式
class PatchDiff(nn.Module):def __init__(self):super(PatchDiff, self).__init__()# 初始化U-Net模型,限制感受野大小,移除自注意力层# ...(此处省略U-Net的具体实现)def forward(self, x):# 前向传播,生成对比模式# ...(此处省略具体实现)return contrastive_pattern# 定义块级检测器
class PatchLevelDetector(nn.Module):def __init__(self):super(PatchLevelDetector, self).__init__()# 初始化全卷积网络(FCN)# ...(此处省略FCN的具体实现)def forward(self, x):# 前向传播,输出异常分数# ...(此处省略具体实现)return anomaly_score# 定义重权机制
def reweighting_mechanism(features, positive_features, negative_features):# 根据特征密度信息,为对比补丁分配不同的权重# ...(此处省略具体实现)return reweighted_features# 训练PatchDiff模型
def train_patch_diff(model, dataloader, epochs):optimizer = optim.Adam(model.parameters(), lr=1e-3)for epoch in range(epochs):for data in dataloader:# 生成对比模式contrastive_pattern = model(data)# ...(此处省略训练步骤)# 训练块级检测器
def train_detector(detector, dataloader, epochs):optimizer = optim.Adam(detector.parameters(), lr=1e-3)for epoch in range(epochs):for data, contrastive_data in dataloader:# 计算异常分数anomaly_score = detector(data)# 应用重权机制reweighted_features = reweighting_mechanism(detector.features, detector.positive_features, detector.negative_features)# ...(此处省略损失计算和优化步骤)# 主函数
def main():# 初始化模型patch_diff_model = PatchDiff()detector_model = PatchLevelDetector()# 训练PatchDiff模型train_patch_diff(patch_diff_model, train_dataloader, epochs=10000)# 生成对比模式contrastive_patterns = patch_diff_model(test_data)# 训练块级检测器train_detector(detector_model, train_dataloader, epochs=2000)# 评估模型性能# ...(此处省略评估步骤)if __name__ == "__main__":main()

3、Experiments

在这里插入图片描述

4、Conclusion

  • 提出了一个新颖的无监督异常检测框架GRAD,通过生成和重权密集对比模式。
  • 提出的生成方法PatchDiff能够生成多级对比模式,暴露出一系列局部异常模式。
  • 提出的重权策略充分利用了未标记和长尾的对比模式,帮助块级异常检测器更好地学习暴露出的局部异常模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/7760.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计Hadoop+Spark大模型微博情感分析 微博舆情分析 微博爬虫 微博可视化 微博大数据分析 微博大数据 大数据毕业设计 Hive数据仓库

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

原型设计软件Axure RP 11 现已发布,更快、更实用的原型设计丨附下载

Axure RP是一套专门为网站或应用程序所设计的快速原型设计工具, 可以让应用网站策划人员或网站功能界面设计师更加快速方便的建立Web AP和Website的线框图、流程图、原型和规格。Axure RP 11(下载试用) 现已发布,更快、更实用的原…

数据结构-IndexTree结构解析(一)

1.IndexTree IndexTree解决的问题是什么呢?可以从求前缀和入手这个问题。 1.1前缀和数组 简单封装一个前缀和数组: package com.xinghai.arr;import java.util.Arrays;/*** 前缀和数组*/ public class PrefixSumArr {// 存储前缀和数据private int[] p…

外汇EA如何进行历史数据回测?

很多人在下载EA后,直接将其投入实盘交易,而忽略了EA策略的优缺点以及其历史表现。尽管外汇平台提供的历史数据可能不完全准确,但为了确保资金安全和了解EA的真实效果,强烈建议在实盘交易前,先进行充分的历史回测。通过…

聚观早报 | 一加Ace5配置细节曝光;OpenAI重启机器人团队

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 11月7日消息 一加Ace5配置细节曝光 OpenAI重启机器人团队 红魔10 Pro首发搭载悟空屏 华为MatePad 11.5正式发布 …

天融信运维审计系统 download 任意文件读取漏洞复现

0x01 产品描述: 天融信运维审计系统(TopSAG)是基于自主知识产权的NGTOS安全操作系统平台和多年网络安全防护经验积累研发而成,以4A管理理念为基础、安全代理为核心,提供事前预防、事中监控、事后审计的全方位运维安全解…

centos7安装java

1、首先从官网下载linux的java安装包 2、解压 tar -zxvf jdk-8u231-linux-x64.tar.gz3、修改配置文件 vim /etc/profile添加环境变量 保存后退出 4、刷新配置文件 source /etc/profile

变压吸附制氧设备的型号解析

变压吸附制氧设备(PSA制氧设备)是一种能够在常温常压条件下,利用PSA专用分子筛选择性吸附空气中的氮气、二氧化碳和水等杂质,从而取得纯度较高的氧气(一般为93%2)的设备。关于变压吸附制氧设备的型号,由于市场上存在众多品牌和制造商&#xf…

创新材料科技:铜冷却壁助力高炉节能降耗

高炉用铜冷却壁是高炉内部的一种构件,通常用于高炉的炉身部分。它的主要功能是在高炉冶炼过程中冷却炉壁,以防止炉壁过热。铜冷却壁通常由铜制成,因为铜具有良好的导热性和耐腐蚀性,能够有效地将热量从高炉内部传导到外部&#xf…

【数据集】【YOLO】【目标检测】电动车佩戴头盔检测数据集 5448 张,YOLO/VOC格式标注!

数据集介绍 【数据集】电动车头盔检测数据集 5448 张,目标检测,包含YOLO/VOC格式标注。数据集中包含3种分类,包含两轮电动车、戴头盔、不戴头盔。数据集来自国内外监控摄像头截图。检测范围电动车、摩托车、双轮非自行车。 一、数据概述 佩戴…

VBA11-row和rows的区别

一、row row返回单元格所在的行号; 如果是区域,就返回这个区域的首行的行号。 示例: 二、rows rows代表行的集合,返回range对象。 示例: Sub rowsTest02() 所有的行都会被选中Rows.Select第一行被选中Sheets(1).…

互联网技术人表达力提升:3个珍藏方法,快速见效!

在技术的世界中,逻辑是至高无上的法则;而在现实中,表达力则是成功的关键。 互联网技术人员在与他人沟通时,常常听到被戏称为“说人话”或“听不懂”。这种现象反映出他们在表达中使用了过多的技术术语和专业痕迹,而又缺…

【canal 中间件】canal 常见的启动方式

文章目录 一、安装 canal-admin1.1 拉取镜像1.2 启动 canal-admin 容器(使用脚本)1.2.1 下载脚本1.2.2 执行脚本1.2.3 初始化元数据库(可选) 1.3 启动 canal-admin 容器(直接使用 Docker 命令)1.3.1 启动容器1.3.2 查看启动日志 1.4 访问页面 二、 安装 canal-server2.1 拉取镜…

AIDOVECL数据集:包含超过15000张AI生成的车辆图像数据集,目的解决旨在解决眼水平分类和定位问题。

2024-11-01,由伊利诺伊大学厄巴纳-香槟分校的研究团队创建的AIDOVECL数据集,通过AI生成的车辆图像,显著减少了手动标注工作,为自动驾驶、城市规划和环境监测等领域提供了丰富的眼水平车辆图像资源。 数据集地址:AIDOV…

React 前端通过组件实现 “下载 Excel模板” 和 “上传 Excel 文件读取内容生成对象数组”

文章目录 一、Excel 模板下载01、代码示例 二、Excel 文件上传01、文件展示02、示例代码03、前端样式展示04、数据结果展示 三、完整代码 本文的业务需求是建立在批量导入数据的情况下,普通组件只能少量导入,数据较多的情况都会选择 Excel 数据导入&…

二、初识C语言(2)

1.修正 VS 下"scanf"的警告 VS-2010中调用scanf,会出现以下警告: 1>e:\c\projects\test\test\test.c(6): warning C4996: scanf: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use …

使用swagger3.0踩过的坑

1.出现这个错误: 原因是: 改成: 就可以了 2.参数框框里面输入不了值 点击try it out ,就可以输入了

产品的四个生命周期,产品经理需深刻理解

在产品管理的世界里,产品就像有生命的个体,经历着从诞生到消亡的过程。作为产品经理,深刻理解产品的四个生命周期 —— 引入期、成长期、成熟期和衰退期,是打造成功产品的关键。 引入期:破局的起点 对于 B 端产品而言&…

基于ADC12DJ5200 采样率10.4GS/s的AD子卡设计方案

FMC AD 子卡 12bit 2 通道 5.2GS/s 或单通道 10.4GS/s,是一款高分辨率、高采样率 ADC FMC 子板。它提 供 2 路 12 位 5.2GS/s 或 1 路 10.4GS/s 的 A/D 通 道 , 全功率模拟 -3dB 输入带宽可达 8GHz。本产品是基于 TI 公司ADC12DJ5200 模数转换芯片而设计…

SAP ABAP开发学习——WDA 六 控件与上下文数据编程

目录 控制器就是一个class 钩子方法(hook method) 组件控制器的hookmethod 普通方法的三种类型 控制器的属性 对参照使用的控制器的引用 访问数据节点 访问节点中的元素 小结1 访问单个节点的属性 取得集合中所有节点的属性 更改单个节点属性…