【2020工业图像异常检测文献】SPADE

devtools/2024/9/25 18:45:50/

Sub-Image Anomaly Detection with Deep Pyramid Correspondences

1、Background

利用深度预训练特征的最近邻( kNN )方法在应用于整个图像时表现出非常强的异常检测性能。kNN 方法的一个局限性是缺乏描述图像中异常位置的分割图。

为了解决这一问题,提出了语义金字塔异常检测(SPADE)方法 使用基于多分辨率特征金字塔的对应关系。

SPADE 方法包括的 3 个阶段:

(1)使用预训练的深度神经网络(例如 ImageNet 训练的 ResNet)提取图像特征

(2)最近的 K 个正常图像到目标的最近邻检索

(3)在目标和正常图像之间找到密集的像素级对应关系,在检索到的正常图像中没有近匹配的目标图像区域被标记为异常。

2、Method

SPADE 方法主要由 3 个部分组成:

  • 图像特征提取
    • 使用一个在大量图像上预训练过的深度神经网络(例如ResNet)来提取图像的特征。这些特征能够捕捉图像的重要信息,比如形状、纹理等。
  • K最近邻正常图像检索
    • 使用欧几里得距离等度量方法来计算目标图像与数据库中每张正常图像之间的距离。
    • 从数据库中检索与目标图像特征向量距离最近的 K 张图像。这些图像被认为是与目标图像最相似的正常图像。
  • 具有深度特征金字塔对应的像素对齐
    • 在目标图像和找到的正常图像之间建立像素级的对应关系。这意味着算法会逐像素地比较图像之间的差异,寻找那些在正常图像中找不到对应物的像素点。
    • 如果目标图像的某个像素在正常图像中找不到相似的对应像素,那么这个像素就可能属于异常区域。通过这种方式,算法不仅能判断一张图像是否包含异常,还能精确地指出异常发生在图像的哪个部分。
    • 为了更准确地建立像素间的对应关系,SPADE采用了一种叫做“特征金字塔”的技术。这涉及到使用不同层次的特征,从细节到全局,来描述每个像素。这样可以确保即使在图像的很小一部分中,也能准确地找到异常。

pseudo-code

# 伪代码:Semantic Pyramid Anomaly Detection (SPADE)# 输入:
# images - 包含所有图像的集合(正常图像和待检测图像)
# model - 预训练的深度学习模型(如ResNet)
# k - 最近邻检索的数量
# kappa - 像素级最近邻检索的数量
# threshold_distance - 用于确定异常的阈值# 输出:
# anomaly_maps - 包含每个图像异常区域的分割图def extract_features(model, images):# 使用预训练模型提取图像特征features = []for image in images:feature = model.extract_features(image)features.append(feature)return featuresdef find_k_nearest_neighbors(features, target_feature, k):# 找到目标特征的k个最近邻distances = [euclidean_distance(target_feature, feature) for feature in features]nearest_neighbors = sort_by_distance(distances)[:k]return nearest_neighborsdef compute_anomaly_score(model, target_image, neighbors, kappa):# 计算每个像素的异常得分anomaly_scores = []for p in target_image.pixels():target_pixel_feature = model.extract_pixel_features(target_image, p)neighbor_features = [model.extract_pixel_features(neighbor, p) for neighbor in neighbors]distances = [euclidean_distance(target_pixel_feature, neighbor_feature) for neighbor_feature in neighbor_features]average_distance = average(distances)anomaly_score = 1 if average_distance > threshold_distance else 0anomaly_scores.append(anomaly_score)return anomaly_scoresdef detect_anomalies(features, k, kappa, threshold_distance):anomaly_maps = {}for i, feature in enumerate(features):target_feature = featurenearest_neighbors = find_k_nearest_neighbors(features, target_feature, k)anomaly_score = compute_anomaly_score(model, images[i], nearest_neighbors, kappa)anomaly_maps[images[i]] = anomaly_scorereturn anomaly_maps# 主流程
features = extract_features(model, images)
anomaly_maps = detect_anomalies(features, k, kappa, threshold_distance)# 将异常得分转换为分割图
segmentation_maps = convert_scores_to_segmentation(anomaly_maps)return segmentation_maps

3、Experiments

只有GOOD。。。

在这里插入图片描述

在这里插入图片描述

4、Conclusion

  1. 提出了一种新的基于对齐的方法 SPADE,用于检测和分割图像中的异常。
  2. SPADE 方法依赖于通过预训练的深度特征提取的像素级特征金字塔的K个最近邻。
  3. SPADE 方法由两个阶段组成,旨在实现高精度和合理的计算复杂度。(阶段一:使用预先训练的深度神经网络进行图像特征提取,阶段二:对距离目标最近的K个正常图像进行最近邻居检索,在检索到的正常图像中不具有接近匹配的目标图像区域被标记为异常。)

[COPY]
Sub-Image Anomaly Detection with DeepPyramid Correspondences 基于深金字塔对应的子图像异常检测(KNN)


http://www.ppmy.cn/devtools/117116.html

相关文章

【教程】鸿蒙ARKTS 打造数据驾驶舱---前序

鸿蒙ARKTS 打造数据驾驶舱 ​ 前面2章我介绍了如何通过定义View绘制箭头以及圆形进度,初步了解了鸿蒙如何进行自定义View。接下来我将通过我最近在带的一个VUE的项目,简单实现了几个鸿蒙原生页面。帮助大家快速上手纯血鸿蒙开发. 本项目基于Api11Stage模…

响应迅捷:IT运维团队的核心诉求与运维产品选择策略

在信息技术高速发展的今天,运维行业正面临着前所未有的挑战。随着业务规模的不断扩大和技术的持续演进,运维团队需要管理的设备数量激增,数据规模庞大。在这样的背景下,如何快速响应问题,确保运维系统的稳定性和高可用…

IIS中配置HTTPS证书的详细步骤

在IIS(Internet Information Services)中导入HTTPS证书的步骤主要包括下载证书、导入证书和为网站绑定证书几个环节。以下是详细的步骤说明: 一、下载SSL证书 首先,确保你已经从证书颁发机构(CA)下载了适…

为什么 ECB 模式不安全

我们先来简单了解下 ECB 模式是如何工作的 ECB 模式不涉及链接模式,所以也就用不着初始化向量,那么相同的明文分组就会被加密成相同的密文分组,而且每个分组运算都是独立的,这也就意味着可以并行提高运算效率,但也正是…

Qt (19)【Qt 线程安全 | 互斥锁QMutex QMutexLocker | 条件变量 | 信号量】

阅读导航 引言一、互斥锁1. QMutex(1)基本概念(2)使用示例基本需求⭕thread.h⭕thread.cpp⭕widget.h⭕widget.cpp 2. QMutexLocker(1)基本概念(2)使用示例 3. QReadWriteLocker、QR…

STM32 Modbus主从站实例程序-FreeRTOS

资料下载地址:STM32 Modbus主从站实例程序-FreeRTOS​​​​​​​ 基本设置 启用Freertos,添加任务 设置中断优先级 设置长生成MDK工程 工程里面添加Modbus库 修改main.c 修改freertos.c 编译下载到单片机,完美运行

如何利用spring自带的事件发布订阅实现各种异步操作

许久不见,小伙伴们! 最近工作确实非常忙碌,今天终于抽空整理了一篇关于如何在实际开发中利用Spring框架自带的事件机制实现异步操作的文章。希望这篇分享能够给大家带来一些启发。 首先,我写这个的原因是因为我实际开发中遇到这么一个开发场…

[C++进阶[六]]list的相关接口模拟实现

1.前言 本章重点 在list模拟实现的过程中&#xff0c;主要是感受list的迭代器的相关实现&#xff0c;这是本节的重点和难点。 2.list接口的大致框架 list是一个双向循环链表&#xff0c;所以在实现list之前&#xff0c;要先构建一个节点类 template <class T> struct L…