【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框架区别:
-
去噪扩散概率模型(DDPM):
- 包含两个过程:正向扩散过程和逆向去噪过程。
- 正向扩散过程通过逐步添加高斯噪声来生成噪声样本。
- 逆向去噪过程从添加了噪声的样本开始,通过模型预测的噪声分布来重建原始数据。
- 模型通过最小化预测噪声和实际噪声之间的差异来训练。
-
潜在扩散模型(LDM):
- 专注于低维潜在空间,并引入条件机制。
- 由预训练的自动编码器模型和去噪U-Net网络组成,后者基于注意力机制。
- 在潜在表示空间中进行扩散和去噪操作,然后通过解码器重建图像。
- 训练目标是最小化预测噪声和实际噪声之间的差异,同时考虑条件机制,如文本或图像。
-
DiAD框架的方法:
- 使用预训练的编码器将输入图像编码为潜在空间表示。
- 向潜在表示中添加噪声,然后使用与SG网络连接的SD去噪网络进行去噪处理。
- 去噪过程重复与扩散过程相同的时间步。
- 重建的潜在表示通过预训练的解码器恢复到原始图像水平。
- 在异常检测和定位方面,输入和重建图像被送入同一个预训练模型以提取不同尺度的特征并计算特征差异。
2、Method
DiAD框架通过结合像素空间的自动编码器、潜在空间的语义引导网络和特征空间的预训练特征提取器,实现了对异常区域的有效重建和检测。SFF块的引入进一步提高了模型在不同尺度上的特征融合能力,从而提高了异常检测的准确性。

DiAD框架的设计:
-
DiAD框架的组成:
- 像素空间自动编码器:用于将输入图像编码和解码。
- 潜在空间语义引导(SG)网络:与稳定扩散(SD)去噪网络相连,用于重建异常区域并保留原始图像的语义信息。
- 特征空间预训练特征提取器:用于从输入和重建图像中提取特征并生成异常图。
-
SG网络的设计:
- 为了解决多类别异常检测中的问题,SG网络被提出以改善LDM在重建异常区域时保留输入图像语义信息的能力。
- 输入图像首先被编码为潜在空间表示,然后通过添加噪声进行正向扩散过程。
- 在逆向去噪过程中,SG网络和SD去噪网络共同工作,以重建图像并恢复其原始结构。
-
空间感知特征融合(SFF)块:
- 为了同时保留原始样本的正常信息和重建大规模异常区域,提出了SFF块。
- SFF块通过整合不同尺度的特征来增强模型在不同场景下的重建能力,无论是细节纹理还是大面积缺陷。
-
异常检测和定位:
- 在推理阶段,通过扩散和去噪过程获得重建图像。
- 使用预训练的特征提取器从输入图像和重建图像中提取特征,并计算不同尺度特征图上的差异,以生成异常图。
- 通过计算特征图之间的余弦相似性来得到异常分数,从而实现异常检测和定位。
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 当前主流的三种异常检测方法: 基于合成的方法:在正常图像上合成异常,通过训练模型识别这些合成的异常来提高检测和定位能力。基于嵌入的方法ÿ…...
三相继电保护机 继电器保护校验仪 微机继电保护测试仪
性能特点 电压电流输出灵活组合 输出达4相电压3相电流,可各种组合实现常规4相电压3相电流型输出模式,既可兼容传统的各种试验方式,也可方便地进行三相变压器差动试验和厂用电快切和备自投试验。 操作方式装置直接外接笔记本电脑或台式机进行…...
MyEclipse中讲解Git使用——结合GitLab
1、什么是Git Git是分布式版本控制系统 Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 2、在myeclipse安装Git插件 下载该文件,将egit.zip解压放入 myeclipse安装路径>dropins>下重新启动myeclipse EGit -…...
pdf转为txt文本格式并使用base64加密输出数据
第一步,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. 属性加载优先级 那是否还有其他的配置方式呢? 3. 知识小结 二、开发环境中使用临时属性 1. 如何操作 2. 知识小结 3. 思考 三、配置文件分类 1. 简介 2. 4个级别 3. 为什么设计多种配置文件? 一个典型的应…...
MySQL定时异机备份
场景:将A机器MySQL数据库部分表每日定时备份到B机器上 (只适用于Linux) 实现方式算是比简单了,就是用mysqldump生成文件,使用scp命令传输到另一台机器上。 1. 编写备份shell脚本 在A机器新建脚本 (当然没有vim的话vi…...
MMA: Multi-Modal Adapter for Vision-Language Models
两个观察 图1所示。各种基于transformer的CLIP模型中不同层的数据集级识别精度。这个实验是为了确定样本属于哪个数据集。我们用不同的种子运行了三次,并报告了每层识别精度的平均值和标准差。 X E m b e d XEmbed XEmbed是指变压器块之前的文本或图像嵌入层&#x…...
uniapp通过id获取div的宽度,高度,位置等(应该是 任意平台都通用 )
uniapp通过id获取div的宽度,高度,位置等(应该是 任意平台都通用 ) <template><view class"" id"domId"></view> </template>// 如果获取的dome高度等不对,还需要加上延迟…...
Python Transformer 模型的基本原理:BERT 和 GPT 以及它们在情感分析中的应用
Transformer 模型的基本原理:BERT 和 GPT 以及它们在情感分析中的应用 近年来,Transformer 模型在自然语言处理(NLP)领域取得了巨大成功,为任务如翻译、生成文本、问答和情感分析带来了显著的性能提升。本文将介绍 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个关键点(由于篇幅限制,这里调整为10个,但实际操作中可能涉及更多细节)如下: 1. 创建时间序列数据 时间序列数据是指在多个时间点上形成的数值序列。在Pandas中,可以使用t…...
使用 Mermaid 语言描述 AGI 系统架构图
使用Mermaid语言描述AGI系统架构图 一、整体架构概述 以下是一个简化的AGI(Artificial General Intelligence,通用人工智能)系统架构的Mermaid描述。该系统主要包括数据收集与预处理、模型训练、推理与决策以及交互接口等模块,各…...
绘制线性可分支持向量机决策边界图 代码解析
### 绘制线性可分支持向量机决策边界图 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
本文全面且深入地探讨了文件上传漏洞相关知识。从基础概念出发,清晰地阐述了文件上传漏洞的定义及其产生的本质原因,同时列出了该漏洞成立的必要条件。详细说明了文件上传漏洞可能对服务器控制权、网站安全以及业务运营带来的严重危害。 文中还深入解析了…...
EasyPlayer.js网页播放器,支持FLV、HLS、WebSocket、WebRTC、H.264/H.265、MP4、ts各种音视频流播放
EasyPlayer.js功能: 1、支持解码H.264视频(Baseline, Main, High Profile全支持,支持解码B帧视频) 2、支持解码H.265视频(flv id 12) 3、支持解码AAC音频(LC,HE,HEv2 Profile全支持) 4、支持解码MP3音频以及Speex音频格式 5、可…...
WPF数据绑定的五大模式
WPF(Windows Presentation Foundation)是微软推出的一种用于构建Windows用户界面的UI框架。它支持数据绑定,允许开发者将UI元素与数据源绑定,从而实现数据和界面的自动同步。WPF数据绑定有几种不同的模式, 以下是五种…...
从零到一:大学新生编程入门攻略与成长指南
文章目录 每日一句正能量前言编程语言选择:为大学新生量身定制Python:简单而强大的选择JavaScript:Web开发的基石Java:面向对象的经典C#:微软的全能选手 学习资源推荐:编程学习的宝藏在线课程教程和文档书籍…...
详细分析Pytorch中的transpose基本知识(附Demo)| 对比 permute
目录 前言1. 基本知识2. Demo 前言 原先的permute推荐阅读:详细分析Pytorch中的permute基本知识(附Demo) 1. 基本知识 transpose 是 PyTorch 中用于交换张量维度的函数,特别是用于二维张量(矩阵)的转置操…...
初识WebGL
思路: 构建<canvas>画布节点,获取其的实例。使用getWebGLContext() 拿到画布上下文。拿到上下文用clearColor() 设置背景颜色。最后清空canvas画布,是为了清除颜色缓冲区。 html结构: <!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地址小…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...
