当前位置: 首页 > news >正文

【2023工业图像异常检测文献】DiAD: 基于扩散模型的多类异常检测方法

DiAD: A Diffusion-based Framework for Multi-class Anomaly Detection

1、Background

当前主流的三种异常检测方法:

  • 基于合成的方法:在正常图像上合成异常,通过训练模型识别这些合成的异常来提高检测和定位能力。
  • 基于嵌入的方法:将图像信息编码到特征空间中,使用预训练的网络提取特征,并计算特征的相似性作为异常分数。
  • 基于重建的方法:训练模型在正常数据集上学习模式和特征,然后在测试阶段重建异常图像,通过比较重建图像和输入图像来定位异常。

最近,扩散模型展示了它们强大的图像生成能力。然而,直接使用当前主流的扩散模型无法有效解决多类别异常检测问题。

在这里插入图片描述

1)对于图1(a)中的去噪扩散概率模型(DDPM)(Ho、Jain和Abbeel,2020年),在执行多类别设置时,这种方法可能会遇到生成图像类别错误分类的问题。原因是在向输入图像添加T个时间步的噪声后,图像失去了其原始类别信息。在推理过程中,基于这种高斯噪声类分布进行去噪,可能会生成属于不同类别的样本。

2)潜在扩散模型(LDM)(Rombach等人,2022年)具有作为类别条件的嵌入器,如图1-(b)所示,它不存在DDPM中发现的类别错误分类问题。然而,LDM仍然无法解决生成图像中语义信息丢失的问题。LDM无法同时保留输入图像的语义信息和重建异常区域。例如,它们可能无法在螺丝和榛子等对象的方向上保持与输入图像的一致性,并且在纹理类别图像上与原始图像有显著差异。

为了解决上述问题,我们提出了一个基于扩散的框架DiAD,用于多类别异常检测和定位,如图2所示,包括三个组件:像素空间自动编码器、潜在空间去噪网络和特征空间ImageNet预训练模型。

为了在重建异常区域的同时有效地保持与原始图像一致的语义信息,我们提出了与稳定扩散(SD)去噪网络在LDM中连接的语义引导(SG)网络。

为了进一步提高保留原始图像细节和重建大规模缺陷的能力,我们提出了空间感知特征融合(SFF)块,以整合不同尺度的特征。

最后,通过预训练的模型传递重建和输入图像,以提取不同尺度的特征并计算异常分数。

supplements

去噪扩散概率模型(Denoising Diffusion Probabilistic Model, DDPM)、潜在扩散模型(Latent Diffusion Model, LDM)DiAD框架区别:

  1. 去噪扩散概率模型(DDPM)

    • 包含两个过程:正向扩散过程和逆向去噪过程。
    • 正向扩散过程通过逐步添加高斯噪声来生成噪声样本。
    • 逆向去噪过程从添加了噪声的样本开始,通过模型预测的噪声分布来重建原始数据。
    • 模型通过最小化预测噪声和实际噪声之间的差异来训练。
  2. 潜在扩散模型(LDM)

    • 专注于低维潜在空间,并引入条件机制。
    • 由预训练的自动编码器模型和去噪U-Net网络组成,后者基于注意力机制。
    • 在潜在表示空间中进行扩散和去噪操作,然后通过解码器重建图像。
    • 训练目标是最小化预测噪声和实际噪声之间的差异,同时考虑条件机制,如文本或图像。
  3. DiAD框架的方法

    • 使用预训练的编码器将输入图像编码为潜在空间表示。
    • 向潜在表示中添加噪声,然后使用与SG网络连接的SD去噪网络进行去噪处理。
    • 去噪过程重复与扩散过程相同的时间步。
    • 重建的潜在表示通过预训练的解码器恢复到原始图像水平。
    • 在异常检测和定位方面,输入和重建图像被送入同一个预训练模型以提取不同尺度的特征并计算特征差异。

2、Method

DiAD框架通过结合像素空间的自动编码器、潜在空间的语义引导网络和特征空间的预训练特征提取器,实现了对异常区域的有效重建和检测。SFF块的引入进一步提高了模型在不同尺度上的特征融合能力,从而提高了异常检测的准确性。

在这里插入图片描述

DiAD框架的设计:

  1. DiAD框架的组成

    • 像素空间自动编码器:用于将输入图像编码和解码。
    • 潜在空间语义引导(SG)网络:与稳定扩散(SD)去噪网络相连,用于重建异常区域并保留原始图像的语义信息。
    • 特征空间预训练特征提取器:用于从输入和重建图像中提取特征并生成异常图。
  2. SG网络的设计

    • 为了解决多类别异常检测中的问题,SG网络被提出以改善LDM在重建异常区域时保留输入图像语义信息的能力。
    • 输入图像首先被编码为潜在空间表示,然后通过添加噪声进行正向扩散过程。
    • 在逆向去噪过程中,SG网络和SD去噪网络共同工作,以重建图像并恢复其原始结构。
  3. 空间感知特征融合(SFF)块

    • 为了同时保留原始样本的正常信息和重建大规模异常区域,提出了SFF块。
    • SFF块通过整合不同尺度的特征来增强模型在不同场景下的重建能力,无论是细节纹理还是大面积缺陷。
  4. 异常检测和定位

    • 在推理阶段,通过扩散和去噪过程获得重建图像。
    • 使用预训练的特征提取器从输入图像和重建图像中提取特征,并计算不同尺度特征图上的差异,以生成异常图。
    • 通过计算特征图之间的余弦相似性来得到异常分数,从而实现异常检测和定位。

pseudo-code

import torch
import torch.nn as nn
from torchvision import models# 假设我们有一个预训练的自动编码器,它由编码器E和解码器D组成
class AutoEncoder(nn.Module):def __init__(self):super(AutoEncoder, self).__init__()self.encoder = ...self.decoder = ...def forward(self, x):encoded = self.encoder(x)decoded = self.decoder(encoded)return decoded# 假设我们有一个预训练的特征提取器
class FeatureExtractor(nn.Module):def __init__(self):super(FeatureExtractor, self).__init__()# 通常使用预训练的模型,如ResNetself.model = models.resnet50(pretrained=True)# 冻结所有层,只使用特征提取部分for param in self.model.parameters():param.requires_grad = Falsedef forward(self, x):return self.model(x)# 假设我们有一个语义引导网络SG和稳定扩散网络SD
class SGNetwork(nn.Module):def __init__(self):super(SGNetwork, self).__init__()# 定义SG网络的结构...def forward(self, z):# SG网络的前向传播...class SDNetwork(nn.Module):def __init__(self):super(SDNetwork, self).__init__()# 定义SD网络的结构...def forward(self, z_noisy):# SD网络的前向传播...# 异常检测的主要流程
def anomaly_detection(input_image):# 步骤1: 使用自动编码器的编码器部分将输入图像编码为潜在表示latent_representation = autoencoder.encoder(input_image)# 步骤2: 使用SG网络和SD网络重建潜在表示reconstructed_latent = sg_network(latent_representation)reconstructed_latent = sd_network(reconstructed_latent)# 步骤3: 使用自动编码器的解码器部分重建图像reconstructed_image = autoencoder.decoder(reconstructed_latent)# 步骤4: 使用预训练的特征提取器提取输入图像和重建图像的特征features_input = feature_extractor(input_image)features_reconstructed = feature_extractor(reconstructed_image)# 步骤5: 计算特征之间的差异,得到异常分数anomaly_score = calculate_anomaly_score(features_input, features_reconstructed)return anomaly_score# 辅助函数:计算异常分数
def calculate_anomaly_score(features_input, features_reconstructed):# 这里简化为使用余弦相似度作为异常分数的计算方式anomaly_score = 1 - nn.CosineSimilarity(dim=1)(features_input, features_reconstructed)return anomaly_score# 初始化模型
autoencoder = AutoEncoder()
feature_extractor = FeatureExtractor()
sg_network = SGNetwork()
sd_network = SDNetwork()# 假设input_image是已经预处理的输入图像张量
input_image = ...# 执行异常检测
anomaly_score = anomaly_detection(input_image)

3、Experiments

🐂🐎。。。

在这里插入图片描述

在这里插入图片描述

4、Conclusion

  • 提出了一个新颖的基于扩散的框架DiAD,用于多类别异常检测,首先解决了现有扩散方法的去噪网络无法正确重建异常的问题。
  • 构建了一个连接到SD去噪网络的SG网络,以保持一致的语义信息并重建异常。
  • 提出了一个SFF块,整合不同尺度的特征,进一步提高异常重建能力。

相关文章:

【2023工业图像异常检测文献】DiAD: 基于扩散模型的多类异常检测方法

DiAD: A Diffusion-based Framework for Multi-class Anomaly Detection 1、Background 当前主流的三种异常检测方法: 基于合成的方法:在正常图像上合成异常,通过训练模型识别这些合成的异常来提高检测和定位能力。基于嵌入的方法&#xff…...

三相继电保护机 继电器保护校验仪 微机继电保护测试仪

性能特点 电压电流输出灵活组合 输出达4相电压3相电流,可各种组合实现常规4相电压3相电流型输出模式,既可兼容传统的各种试验方式,也可方便地进行三相变压器差动试验和厂用电快切和备自投试验。 操作方式装置直接外接笔记本电脑或台式机进行…...

MyEclipse中讲解Git使用——结合GitLab

1、什么是Git Git是分布式版本控制系统 Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 2、在myeclipse安装Git插件 下载该文件,将egit.zip解压放入 myeclipse安装路径>dropins>下重新启动myeclipse EGit -…...

pdf转为txt文本格式并使用base64加密输出数据

第一步&#xff0c;pom.xml中引入jar包 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version></dependency> 第二步 package org.example.test.example.changefile;…...

SpringBoot篇(运维实用篇 - 临时属性)

目录 一、临时属性设置 1. 简介 2. 属性加载优先级 那是否还有其他的配置方式呢&#xff1f; 3. 知识小结 二、开发环境中使用临时属性 1. 如何操作 2. 知识小结 3. 思考 三、配置文件分类 1. 简介 2. 4个级别 3. 为什么设计多种配置文件&#xff1f; 一个典型的应…...

MySQL定时异机备份

场景&#xff1a;将A机器MySQL数据库部分表每日定时备份到B机器上 &#xff08;只适用于Linux&#xff09; 实现方式算是比简单了&#xff0c;就是用mysqldump生成文件&#xff0c;使用scp命令传输到另一台机器上。 1. 编写备份shell脚本 在A机器新建脚本 (当然没有vim的话vi…...

MMA: Multi-Modal Adapter for Vision-Language Models

两个观察 图1所示。各种基于transformer的CLIP模型中不同层的数据集级识别精度。这个实验是为了确定样本属于哪个数据集。我们用不同的种子运行了三次&#xff0c;并报告了每层识别精度的平均值和标准差。 X E m b e d XEmbed XEmbed是指变压器块之前的文本或图像嵌入层&#x…...

uniapp通过id获取div的宽度,高度,位置等(应该是 任意平台都通用 )

uniapp通过id获取div的宽度&#xff0c;高度&#xff0c;位置等&#xff08;应该是 任意平台都通用 &#xff09; <template><view class"" id"domId"></view> </template>// 如果获取的dome高度等不对&#xff0c;还需要加上延迟…...

Python Transformer 模型的基本原理:BERT 和 GPT 以及它们在情感分析中的应用

Transformer 模型的基本原理&#xff1a;BERT 和 GPT 以及它们在情感分析中的应用 近年来&#xff0c;Transformer 模型在自然语言处理&#xff08;NLP&#xff09;领域取得了巨大成功&#xff0c;为任务如翻译、生成文本、问答和情感分析带来了显著的性能提升。本文将介绍 Tr…...

【云原生】Kubernets1.29部署StorageClass-NFS作为存储类,动态创建pvc(已存在NFS服务端)

文章目录 在写redis集群搭建的时候,有提到过使用nfs做storageclass,那时候kubernetes是1.20版本,https://dongweizhen.blog.csdn.net/article/details/130651727 现在使用的是kubernetes 1.29版本,根据之前的修改方式并未生效,反而提示:Error: invalid argument "Re…...

使用 Pandas 进行时间序列分析的 10个关键点

使用Pandas进行时间序列分析的10个关键点&#xff08;由于篇幅限制&#xff0c;这里调整为10个&#xff0c;但实际操作中可能涉及更多细节&#xff09;如下&#xff1a; 1. 创建时间序列数据 时间序列数据是指在多个时间点上形成的数值序列。在Pandas中&#xff0c;可以使用t…...

使用 Mermaid 语言描述 AGI 系统架构图

使用Mermaid语言描述AGI系统架构图 一、整体架构概述 以下是一个简化的AGI&#xff08;Artificial General Intelligence&#xff0c;通用人工智能&#xff09;系统架构的Mermaid描述。该系统主要包括数据收集与预处理、模型训练、推理与决策以及交互接口等模块&#xff0c;各…...

绘制线性可分支持向量机决策边界图 代码解析

### 绘制线性可分支持向量机决策边界图 def plot_classifer(model, X, y):# 超参数边界x_min -7x_max 12y_min -12y_max -1step 0.05# meshgridxx, yy np.meshgrid(np.arange(x_min, x_max, step),np.arange(y_min, y_max, step))# 模型预测z model.predict(np.c_[xx.ra…...

No.23 笔记 | WEB安全 - 任意文件漏洞 part 5

本文全面且深入地探讨了文件上传漏洞相关知识。从基础概念出发&#xff0c;清晰地阐述了文件上传漏洞的定义及其产生的本质原因&#xff0c;同时列出了该漏洞成立的必要条件。详细说明了文件上传漏洞可能对服务器控制权、网站安全以及业务运营带来的严重危害。 文中还深入解析了…...

EasyPlayer.js网页播放器,支持FLV、HLS、WebSocket、WebRTC、H.264/H.265、MP4、ts各种音视频流播放

EasyPlayer.js功能&#xff1a; 1、支持解码H.264视频(Baseline, Main, High Profile全支持&#xff0c;支持解码B帧视频) 2、支持解码H.265视频&#xff08;flv id 12&#xff09; 3、支持解码AAC音频(LC,HE,HEv2 Profile全支持) 4、支持解码MP3音频以及Speex音频格式 5、可…...

WPF数据绑定的五大模式

WPF&#xff08;Windows Presentation Foundation&#xff09;是微软推出的一种用于构建Windows用户界面的UI框架。它支持数据绑定&#xff0c;允许开发者将UI元素与数据源绑定&#xff0c;从而实现数据和界面的自动同步。WPF数据绑定有几种不同的模式&#xff0c; 以下是五种…...

从零到一:大学新生编程入门攻略与成长指南

文章目录 每日一句正能量前言编程语言选择&#xff1a;为大学新生量身定制Python&#xff1a;简单而强大的选择JavaScript&#xff1a;Web开发的基石Java&#xff1a;面向对象的经典C#&#xff1a;微软的全能选手 学习资源推荐&#xff1a;编程学习的宝藏在线课程教程和文档书籍…...

详细分析Pytorch中的transpose基本知识(附Demo)| 对比 permute

目录 前言1. 基本知识2. Demo 前言 原先的permute推荐阅读&#xff1a;详细分析Pytorch中的permute基本知识&#xff08;附Demo&#xff09; 1. 基本知识 transpose 是 PyTorch 中用于交换张量维度的函数&#xff0c;特别是用于二维张量&#xff08;矩阵&#xff09;的转置操…...

初识WebGL

思路&#xff1a; 构建<canvas>画布节点&#xff0c;获取其的实例。使用getWebGLContext() 拿到画布上下文。拿到上下文用clearColor() 设置背景颜色。最后清空canvas画布,是为了清除颜色缓冲区。 html结构&#xff1a; <!DOCTYPE html> <html lang"en&…...

【力扣】Go语言回溯算法详细实现与方法论提炼

文章目录 一、引言二、回溯算法的核心概念三、组合问题1. LeetCode 77. 组合2. LeetCode 216. 组合总和III3. LeetCode 17. 电话号码的字母组合4. LeetCode 39. 组合总和5. LeetCode 40. 组合总和 II小结 四、分割问题6. LeetCode 131. 分割回文串7. LeetCode 93. 复原IP地址小…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...