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

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

python 复制代码
# 伪代码: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 features

def 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_neighbors

def 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 0
        anomaly_scores.append(anomaly_score)
    return anomaly_scores

def detect_anomalies(features, k, kappa, threshold_distance):
    anomaly_maps = {}
    for i, feature in enumerate(features):
        target_feature = feature
        nearest_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_score
    return 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)

相关推荐
aichitang202424 分钟前
希尔伯特空间中的正交性
人工智能·学习·机器学习·ai·泛函分析
AndrewHZ27 分钟前
图像处理入门020 | 图像二值化:阈值分割基础 —— cv2.threshold 五种类型与自适应阈值铺垫
图像处理·opencv·文档扫描·阈值分割·图像二值化·trackbar·自适应阈值
格林威39 分钟前
C# 相机Burst模式图像采集:使用相机内存配合OpenCvSharp和Halcon实现短时间的高速采集的方法
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
轮到我狗叫了44 分钟前
Slurm如何使用
人工智能·python·深度学习·机器学习
AI智图坊1 小时前
甩手图省事的技术原理:如何用“商品锁定”机制解决AI作图的一致性难题
大数据·人工智能·计算机视觉·ai作画·aigc·ai写作
m0_547486662 小时前
《深度学习理论及实践》全套PPT课件(北京邮电大学)
人工智能·深度学习
Web3&Basketball2 小时前
从0到1落地多模态表格/发票结构化识别:踩坑全记录
深度学习·大模型·ai技术
段一凡-华北理工大学2 小时前
高炉炉况智能诊断与预警实战~系列文章18:预警提前量问题:过程滞后与预测窗口的权衡
服务器·网络·人工智能·机器学习·高炉智能化·炉况预警·工业预警滞后
笑霸final3 小时前
不用上传服务器!用 Vue3 + ONNX Runtime Web 在浏览器本地实现智能抠图
运维·前端·图像处理·ai·onnx·canva可画·web性能优化
摆烂老大3 小时前
论文学习 | HESS2025 | 中亚寒区季节水文预报
学习·机器学习·水文