type
status
date
slug
summary
tags
category
icon
password
Last edited time
Mar 16, 2024 07:01 AM
😀
使用在imagenet的第2,3层特征 邻域特征聚合 贪婪策略构建内存库

📝 主旨内容

异常检测在工业检测等场景有重要应用,PatchCore在MVTec数据集中霸榜了很久,本文介绍相关内容。

算法流程

notion image

提取特征

特征级别

  • 用预训练模型Backbone提取图像特征
  • 以Resnet50为例,本文放弃了局部正常特征数据较少、偏向于分类任务的深层特征,采用第 [2, 3]层特征作为图像特征

Patch特征

  • 提取图像的Patch特征,这个特征带有周围数据的信息
  • h, w位置为中心,取边长为p的正方形区域
    • 围绕这些点计算的特征图上的点为:(是对某领域中特征向量的聚合函数)
      • 一幅图像的Patch特征集合为:

        构建Memory Bank

        Memory Bank

        • 将收集到的正常图像Patch特征放入MemoryBank

          Reduce memory bank(降低)

          • 通过稀疏采样在尽可能保持特征表达能力的情况下,使得MemoryBank稀疏化(为了加快算法运行速度)
            • notion image
          • 在确定目标Bank 特征数量后通过优化以下目标实现稀疏化
          含义为找到一个特征集合,使得中任意特征距离中最近的特征的距离的最大值最小
          • 之后用一些选择特征的策略获取稀疏化Memory Bank

          梳理构建流程

          notion image

          异常检测

          • 构建Memory Bank相当于使用正常数据进行模型训练、构建
          • 之后输入待检测的图像进行异常检测,相当于infer

          infer 流程

          • 提取Patch特征:
            • 对于每个Patch特征选择中距离最近的特征
              • 公式计算的是点到集合的距离,选择距离最远的异常值
                距离最远的点为图像的异常值分数
            • 文中强调为了提升算法鲁棒性,采用一个公式更新了异常值
              我的理解为:对于特征系数的区域倾向于判定为异常,反正给予异常值一定的削减
              每个点的异常值拼接起来即可获得图像的异常热力图

              🤗 总结归纳

              实验比较选取不同的预训练模型层特征进行训练的差异

              notion image
              notion image
               

              论文核心知识点

              Patch: 所谓补丁,指的是像素; PatchCore: 也就是补丁的核心信息; Embedding: 所谓嵌入,指的是将网络提取的不同特征组合到一块; Nominal samples: 正常样本即不包含异常的样本; Memory bank: 就是记忆提取到的特征的集合;
              Pretrained Encoder: 使用预训练模型(wide_resnet50_2) backbone 提取图像特征, 采用[2, 3]层特征作为图像特征,具有较强的底层特征(轮廓、边缘、颜色、纹理和形状特征),更能够反映图像内容。不采用最后几层原因:深层特征偏向于分类任务,具有更强的语义信息。 Locally aware patch features: 提取图像的 Patch特征,这个特征带有周围数据的信息。特征值的集合构建 PatchCore Memory bank; Coreset Subsampling: 核心集二次抽样; Coreset-reduced patch-feature memory bank:: 稀疏采样 目的是Reduce memory bank,加快算法运行速度。 anomaly score: 就是你训练正常的数据,捕获正常图像的特征,然后有一个异常的数据进来,就会和正常数据产生一个差异,通过整个差异来判断是否是异常。

              算法流程

              通过预训练好的ResNet-50在正常样本上面进行特征提取(不从Resnet最后一层获取特征,而是从中间获取)随后再采用 coreset subsampling,进行有效的降采样生成更加核心的特征集即memory bank。 在测试的时候,将提取到的特征通过 nearest neighbour search(最近邻搜索:每个query进来,首先找最近距离最近的领域质心,找到距离query最近的质心后,锁定该领域) 然后在该领域内计算距离最远的数据点,用该距离计算anomaly score,判断是否异常,得到结果。

              📎 参考文章

               
              SSIM损失和MSE损失DRÆM —— A discriminatively trained reconstruction embedding for surface anomaly detection(ICCV2021)
              Loading...