CutPaste Self-Supervised Learning for Anomaly Detection and Localization

2023-05-16

CutPaste: Self-Supervised Learning for Anomaly Detection and Localization

用于异常检测和定位的自监督学习

简洁版

问题:异常的检测和定位

现有工作不足:

​ 现有的工作主要关注以对象为中心的自然图像中的检测语义异常值,这种方式在检测细粒度异常方面,没有很好的通用性

​ 现有工作的中数据增强的方式(旋转预测,对比)对检测局部缺陷来说是次优的

**解决问题的挑战: **

  1. 很难获取大量异常数据
  2. 缺陷很小且细微
  3. 精确定位缺陷是一个挑战,很难使用热图式方法进行定位。

本工作的优点:

  1. 解决了图像异常检测在高分辨率图像中局部存在各种形式的未知异常缺陷。
  2. 设计了一种新的代理任务(a novel proxy task),CutPaste是一种提出的数据增强策略,用于剪切图像块并在图像的随机位置粘贴。
  3. 学习到的表示来定位高分辨率图像中的缺陷区域。
  4. CutPaste增强是为了产生空间不规则性,作为真实缺陷的粗略近似(这些真实的缺陷在训练时通常无法获取)。
  5. CutPaste的自监督学习是通用的,可以用于改进语训练网络,以更好地适应数据。

本工作的可提升性

​ CutPaste模型基于合成异常检测训练时,缺陷检测的精度比 单个类型缺陷训练的精度有所下降。

问题: 异常的检测和定位

现有工作的不足:

大多数现有的工作主要关注以对象为中心的自然图像中检测语义异常值,这些方法在检测细粒度异常模式并不像在缺陷检测中那样具有良好的通用性。

大多数工作应用现有的方法,例如旋转预测或对比学习,对于检测局部缺陷是次优的。【几何变换(旋转、平移等)在学习语义概念的表示方面是有效的,但在规则性(例如连续性、重复性)则没那么有效】

解决问题的挑战:

在没有缺陷样本的情况下,检测出图像的异常状况。

  1. 很难获取大量异常数据,无论是标记的还是未标记的
  2. 正常模式和异常模式之间的差异通常是细微的,因为在高分辨率图像中,缺陷区域可能很小且很细微。
  3. 精确定位缺陷的一个挑战:当我们的模型学习图像的整体表示时,很难使用热图式方法进行定位。

本工作的优点:

  1. 解决了图像异常检测的一种特殊情况,其中在高分辨率图像中局部存在各种形式的未知异常模式。

  2. 设计了一种新的代理任务(a novel proxy task),用于表征的自监督学习(self-supervised
    learning of representations
    。【在正常训练数据和CutPaste增强的数据之间建立了一个代理分类任务。CutPaste是一种提出的数据增强策略,用于剪切图像块并在图像的随机位置粘贴。】

  3. 解释了如何使用学习到的表示来定位高分辨率图像中的缺陷区域。

  4. CutPaste增强是为了产生空间不规则性,作为真实缺陷的粗略近似(这些真实的缺陷在训练时通常无法获取)。

  5. CutPaste的自监督学习是通用的,可以用于改进语训练网络,以更好地适应数据。

相关工作内容:

遵循两阶段框架[52]:

1. 第一阶段从正常数据中学习深度表示,通过解决代理任务学习自监督表示
1. 然后使用学习的表示构建一个单类分类器。以区分具有异常和正常的数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UG0dG0y6-1648217801250)(E:\MyDocument\论文\刘师兄推荐论文\image\image-20220309084005803.png)]

模型解释

  1. a上:将正常样本送入CNN进行训练
  2. a下:并用CutPaste方法从正常数据中剪切一个小矩形区域,并粘贴到随机位置,也送入和a上同一个训练网络中训练,得到模型。
  3. b上:表示在测试和定位阶段:图像级表示对异常检测做的整体决定,并通过GradCAM定位缺陷。
  4. b下:斑块级表示从局部斑块中提取密集特征,以生成异常评分图,然后将其最大化用于检测或上采样用于定位。

2.1. Self-Supervised Learning with CutPaste 基于剪贴的自监督学习

在第2.1节中,提出了一种通过预测剪切粘贴增强来学习自监督表示的新方法,

异常检测的任务,通常出现在物体表面是连续性,重复性的。

所以该篇论文思路就是:设计一个增强策略,创建局部不规则模式。训练模型来识别这些局部不规则性,希望模型能推广到测试看不见的真实缺陷。

剪贴就是一种很好的创造不规则性的方法。

防止学习辨别增强图像的过于简单的决策规则,并鼓励模型学习检测不规则性,我们提出如下CutPaste增强:

1. 从正常训练图像上切下一个大小和纵横比可变的小矩形区域。
1.   可选地,我们旋转或抖动面片中的像素值。

3.  将补丁粘贴回随机位置的图像。

​ 根据旋转预测思想,提出的自我监督表征学习的训练目标定义:

在这里插入图片描述

​ X表示一系列正常样本,CP( ) 是CutPaste augmentation,g是一个由深度网络参数化的二进制分类器。

​ CE 表示交叉熵损失。 在 x 反馈到g或CP之前,会应用数据增强,例如平移或颜色抖动。

2.2 剪贴变体

  1. CutPaste - Scar

在这里插入图片描述

2.2 Multi-Class Classification 多类分类

​ 3-way classification task 三向分类任务:normal、CutPaste and CutPaste-Scar

​ 在增广并集的二进制和三向分类任务之间,我们观察到通过三向分类任务训练的表示具有更好的检测性能。

一个自然的问题是,Cutpaste的成功是否来自于对真实缺陷的良好模仿:

​ (1)Cutpaste仍然不是对真实缺陷的完美模拟,

​ (2)学习它来发现不规则性对看不见的异常有很好的推广作用。

2.3. Computing Anomaly Score 计算有异常分数

采用GDE 【43】

在这里插入图片描述

2.4 Localization with Patch Representation 基于面片表示的定位

​ c(x) 表示在x的随机位置裁剪一个补丁。 在测试时,我们从给定步幅的所有补丁中提取嵌入。对于每个面片,我们评估其异常评分,并使用高斯平滑将评分传播到每个像素[32]。

实验设置方式

我们遵循一类分类协议,也称为半监督异常检测[10],**在其中,我们为每个类别在其各自的正常训练示例上训练一个一类分类器。**在[52]之后,我们通过使用ResNet-18[22]和一个MLP projection head (位于平均池层的顶部,然后是最后一个线性层)从头开始的增强预测来学习表示。我们构造了一个高斯密度估计(GDE)作为基于顶部合并特征的异常检测器的方程(2)。

  1. 设置五次随机种子实验,报告每类平均AUC和标准误差、报告纹理、对象、和所有类别的平均误差和标准误差
  2. 用自监督学习不同的proxy tasks来测试训练的表征,包括基线,如旋转[20]、剪切或疤痕预测、提议的剪切粘贴、剪切粘贴疤痕预测,并将两者用于三向分类(还有一者是正常样本)。
  3. 与以前的工作进行了比较,包括深度一类分类器(DOCC)[45]、无信息学生[5]和补丁SVDD[61]。

5. Ablation Study

  1. From Cutout to CutPaste

  2. Binary v.s. Finer-Grained Classification

  3. CutPaste on Synthetic Anomaly Detection 基于合成异常检测的CutPaste

    研究了模型对未知异常的推广

    该数据集是通过将不同形状的遮罩修补到正常数据(如数字[29]、正方形、椭圆形或心脏[35]),填充随机颜色或自然图像而创建的。合成异常的样本如图6所示,

在这里插入图片描述

​ CutPaste(三向)模型在合成数据集上表现良好,平均达到98.3 AUC。 加 † 表示从自然图像中提取的结果 natural images (†).

相关论文:

**3-way classification :3-way classification task between normal, CutPaste and CutPaste-scar. **

【52】两阶段框架 : Learning and evaluating representations fordeep one-class classification.

在缺陷检测的算法设计中使用剪切也可以在[32,57]中找到。

【19】 旋转预测思想

【51】GradCAM等视觉解释技术对图像级探测器的热图进行可视化[51]。

在一类分类设置下的异常检测已经得到了广泛的研究[49、56、46、63、66、13、42、36、27],

[39,19,8,60,40,12,21]也被证明对一类分类和异常检测有效。

由于工业检测或医疗诊断等实际应用,缺陷检测[9,5]受到了广泛关注。最初的步骤是通过自动编码[9,7,25,59]、生成性对抗网络[48,3]、使用ImageNet上的预训练模型[38,45,6,14,43,44]以及通过解决不同的代理任务和增强[61,47,57,15]来进行自监督学习的方法来完成的。

[11] 提出了一种以贴片交换增强为噪声处理的去噪自动编码器。[26]提出通过使用GAN预测局部增强来学习表示法。

Gaussian smoothing [32]

我们还按照[20,52]中的协议在CIFAR-10[28]上进行语义异常检测实验,

虽然在语义一类分类[20,24,4,54,52]的背景下研究了旋转预测[19]和对比学习[60,12]等流行方法,

【20】 :基于几何变换的深部异常检测

【24】:使用自监督学习可以提高模型的鲁棒性和不确定性。

【4】:基于分类的一般数据异常检测。

【52】:学习和评估深层单类分类的表征。

【54】:通过对分布转移实例的对比学习进行新颖性检测。

【19】:旋转预测思想 通过预测图像旋转进行无监督表征学习。

核密度估计器KDE[52]或高斯密度估计器GDE[43]。

尽管非参数KDE不受分布假设的影响,但它需要许多例子来进行精确估计[58],

定位缺陷区域[38,6,61],

【6】Uninformed students: Student-teacher anomaly detection with discriminative latent embeddings.不知情的学生:学生-教师异常检测与歧视性潜在嵌入。

【38】:Anomaly detection in nanofibrous materials by cnn-based self-similarity.基于cnn的自相似性在纳米纤维材料中的异常检测。

【61】:Patch svdd: Patch-level svdd for anomaly detection and segmentation.Patch svdd:用于异常检测和分割的Patch-level svdd

使用高斯平滑将评分传播到每个像素[32]

【32】Explainable deep one-class classification. 可解释的深层一类分类。

CutMix[62] 一个主要区别是CutMix利用了现有的图像标签和目标中的混搭[64],而CutPaste预测是一种无需图像标签的自我监督学习。

【62】:Cutmix: Regularization strategy to train strong classifiers with localizable features. Cutmix:训练具有本地化特征的强分类器的正则化策略。

classification. 可解释的深层一类分类。

CutMix[62] 一个主要区别是CutMix利用了现有的图像标签和目标中的混搭[64],而CutPaste预测是一种无需图像标签的自我监督学习。

【62】:Cutmix: Regularization strategy to train strong classifiers with localizable features. Cutmix:训练具有本地化特征的强分类器的正则化策略。

【10】 Anomaly detection: A survey. ACM computing surveys (CSUR), 2009. 5

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CutPaste Self-Supervised Learning for Anomaly Detection and Localization 的相关文章

  • gitpush出现remote: Support for password authentication was removed on August 13, 2021.

    git push 报错 xff1a Username span class token keyword for span span class token string 39 https github com 39 span span cl
  • VS Code For Web 深入浅出 -- 进程间通信篇

    在上一篇中 xff0c 我们一起分析了 VS Code 整体的代码架构 xff0c 了解了 VS Code 是由前后端分离的方式开发的 且无论前端是基于 electron 还是 web xff0c 后端是本地还是云端 xff0c 其调用方式
  • Tips for Qt

    Based on Qt 5 14 0 Qt Creator 4 11 0 1 在UI设计界面添加控件后 xff0c 要编译一下 xff0c 再到编辑界面写代码 xff0c 否则系统不识别新添加的控件 2 多看帮助文档 xff0c 好多开发时
  • 翻译-Frustum PointNets for 3D Object Detection from RGB-D Data

    Frustum PointNets for 3D Object Detection from RGB D Data 摘要介绍相关工作从RGB D数据中检测三维物体基于前视图图像的方法 xff1a 基于鸟瞰图的方法 基于3D的方法 点云的深度
  • Online Trajectory Generation of a MAV for Chasing a Moving Target in 3D Dense Environments

    微型无人机的在线轨迹生成 xff0c 用于在3D密集环境中追踪运动目标 摘要一 介绍二 相关工作A 在障碍物环境中追逐B 通过预先规划安全地生成轨迹 三 问题陈述A 问题设置B 能力C 命名 IV 视点生成A 可见度指标B 具有安全性和可见
  • Go语言学习15-基本流程控制

    基本流程控制 流程控制对比 Go 和 C 基本流程控制 1 代码块和作用域 2 if 语句 3 switch语句 3 1 表达式switch语句 3 2 类型switch语句 4 for 语句 4 1 for 子句 4 2 range 子句
  • self、__doc__、__init__、__name__

    1 self参数用于类定义中 不可省略 独立的函数或方法中不含有self参数 self不是Python的关键字 可替换成别的 在类实例化时 self自动绑定到self实例上 指向类实例对象本身 已完成类对自身属性的调用 gt gt gt c
  • 教妹学Java(十五):for循环详解

    你好呀 我是沉默王二 一枚颜值与才华俱在的程序员 本篇教程通过我和三妹对话的形式来谈一谈 for while do while 循环之间的差别 以及重点介绍一下 for 循环 while do while 会在接下来的教程中单独介绍 教妹学
  • matlab for循环坑

    matlab 用 for 嵌套循环遍历数组时 可能有 bug matlab octave 环境 linux Matlab R2018a 1 windows GNU Octave version 5 2 0 以 for x vector 的形
  • 在 Swift 中声明自引用指针[重复]

    这个问题在这里已经有答案了 这段 Obj C 代码在 swift 中的等价物是什么 我猜测 CMutableVoidPointer 的一些事情 static void CapturingStillImageContext Capturing
  • NameError:名称“self”未在 EXEC/EVAL 中定义

    我正在编码一些东西 并且有一个部分出现错误 但我找不到发生错误的原因 代码 示例 类似于错误部分 class Test def init self a 0 self x a self l 2 x for x in range a lt se
  • 如何从 C 方法调用 Objective-C 方法?

    我有一个 Obj C 对象 里面有很多方法 有时一个方法需要调用同一对象内的另一个方法 我似乎不知道如何让 C 方法调用 Obj C 方法 WORKS Obj C 方法调用 Obj C 方法 self objCMethod WORKS Ob
  • 简单但方法调用的位置参数太多

    谁能解释一下为什么TypeError is fib 接受 1 个位置参数 但给出了 2 个 当我只给它一个参数时 gt self fib self n 1 另外 在保留类的实例化的同时 您能建议您的解决方案来解决这个问题吗 我觉得 自我 用
  • Swift 中“self”的用途是什么?

    我是 Swift 新手 我想知道什么self用于以及为什么 我在类和结构中看到过它 但我真的不认为它们是必要的 甚至没有必要在我的代码中提及它们 它们的用途是什么 为什么 什么情况下需要使用它 我已经阅读了很多关于这个问题的问题和答案 但没
  • 将 self 参数命名为其他名称

    在 Python 中 以下代码是有效的 class A def init me me foo 17 def print foo myself print myself foo def set foo i v i foo v 正如您可能已经注
  • 为什么 Array#each 返回具有相同元素的数组?

    我正在学习如何做的细节each在 ruby 中工作 我尝试了以下代码行 p 1 2 3 4 5 each element el 结果是一个数组 1 2 3 4 5 为什么返回值是each相同的数组 没有each只是提供一种迭代方法 或者这只
  • Python将self更改为继承的类

    我有这样的结构 class Foo def init self val1 self val1 val1 def changeToGoo self HOW class Goo Foo def init self val1 val2 super
  • 令人困惑的类型错误

    我有一个小型 Python 程序 它应该通过运行适当的方法来对按下向上按钮做出反应 但它没有这样做 而是给了我一个令人困惑的错误 from tkinter import class App def init self master self
  • python 课堂上有太多自我

    我正在学习 Python OOP 并尝试将 Java 类转换为 Python 类 请参阅此 PDF 中的第 15 页了解 Java 代码 google 文档link https docs google com open id 1eqzajO
  • 继承自 NumPy 数组的类如何更改其自身的值?

    我有一个继承自 NumPy n 维数组的简单类 我想要该类的两个方法可以更改该类实例的数组值 其中一种方法应将类实例的数组设置为类实例的列表数据属性的值 另一种方法应将一些列表值附加到类实例的数组中 我不确定如何实现这一点 但我的尝试如下

随机推荐

  • [549]python实现K-Means算法

    K Means是一种聚类 Clustering 算法 xff0c 使用它可以为数据分类 K代表你要把数据分为几个组 xff0c 前文实现的K Nearest Neighbor算法也有一个K xff0c 实际上 xff0c 它们有一个相似之处
  • 串口调试工具开发

    刚学习Qt xff0c 搜查资料 xff0c 根据学到的知识 xff0c 完成一个简单的串口调试工具 刚入行 xff0c 谅解 最终效果图 xff0c 图上功能都可实现 UI界面绘制 xff1a 代码如下 xff1a 串口调试工具开发 1
  • (illegal character encoding in string literal)解决乱码问题

    打开项目显示 xff08 xfffd xfffd xfffd xfffd xff09 乱码 xff0c 警告 xff0c 都是因为文本编码格式 选择合适的文本编码即可
  • “Failed to get convolution algorithm. This is probably because cuDNN failed to initialize”错误解决方案

    最近在使用TF2 0 运行程序出现以下错误 Failed to get convolution algorithm This is probably because cuDNN failed to initialize 一开始怀疑是CUDA
  • 程序员学习能力提升三要素

    IT技术的发展日新月异 xff0c 新技术层出不穷 xff0c 具有良好的学习能力 xff0c 能及时获取新知识 随时补充和丰富自己 xff0c 已成为程序员职业发展的核心竞争力 多年的学习经验总结出了提高程序员学习能力的三个要点 学习人人
  • Unable to determine the device handle for GPU. GPU is lost. Reboot the system to recover this GPU.

    最近服务器跑程序的时候经常出现GPU lost的情况 xff0c 报错信息如下 xff1a Unable to determine the device handle span class token keyword for span GP
  • 安装matlab的R2017b或者R2018a版本注意事项

    如果我们目前使用的是win10系统 xff0c 并且正确地按照网上安装并激活matlab的R2017b或者R2018a版本 xff0c 但是运行matlab时仍然会报错的情况 xff0c 报错内容是License Manager Error
  • IP地址0.0.0.0表示什么

    声明 xff1a 尊重原创 xff0c 查看原文请点击 IP地址0 0 0 0表示什么 转发目的为了构建 计算机网络 专栏 xff0c 收集相关优秀文章 xff0c 并创建自己的文章 方便自己和他人系统的学习相关知识 xff0c 感谢原文
  • Android群英传——第九章packages.xml的作用

    Android系统在初始化时 xff0c PackageManager的底层实现类PackageManagerService 回去扫描系统的 data system 目录下的packages xml文件 xff0c 这个文件包含了所有的ap
  • 百思不得姐之图片处理(保存与下载)

    一 功能图 二 讲解思路 1 回顾上一篇内容 2 创建加载图片类 同时创建xib 3 点击图片查看大图 4 点击查看大图 查看长图 5 model出展示图片的控制器 6 保存图片 7 封装根据网络状态展示不同的图片 三 回顾上一篇内容 1
  • 路由器电路(高清图)

    路由器正面 路由器背面
  • 技术4面+HR面,花了一个半月的时间准备,终于上岸阿里测开岗

    这次阿里的面试 xff0c 给我的感触很深 xff0c 意识到基础的重要性 一共经历了五轮面试 xff1a 技术4面 xff0b HR面 下面看正文 本人自动化专业毕业 xff0c 压抑了五个多月 xff0c 终于鼓起勇气 xff0c 去阿
  • 5个实用的性能测试工具(软件测试工程师必备)

    在日常的软件测试工作中 xff0c 最常用的性能测试工具是LoadRunner和Jmeter 今天给大家整理了5个针对web应用程序性能和负载压力能力的最广泛使用的性能测试工具 这几个负载测试工具将确保应用程序在高峰流量和极端压力条件下的性
  • 4个强大JavaScript运算符

    作者 Anthony Jimenez 译者 吴留坡 策划 田晓旭 来源 前端之巅 今天我们学习新的 JS 运算符 xff01 你有没有花一个下午的时间阅读 Mozilla 文档 xff1f 如果有 xff0c 你会发现网上有很多 JS 资料
  • 一些java开发代码规范心得

    1 equals方法规范 Object的equals方法容易抛空指针异常 xff0c 应使用常量或确定有值的对象来调用equals 正例 xff1a test equals object 反例 xff1a object equals tes
  • 8张Linux思维导图(定位自己能力、清楚学习方向)

    Linux学习路径 xff1a Linux桌面介绍 xff1a FHS 文件系统目录标准 以上三张图 xff0c 都是在学习实验楼上的课程 Linux 基础入门 xff0c 教程里面看到的 Linux需要特别注意的目录 这是在搜索的时候 x
  • Keil串口仿真调试

    用到的软件 Keil开发软件 虚拟串口软件 串口调试小助手 软件介绍 1 虚拟串口软件 对于笔记本电脑来说 xff0c 没有自带串口使用虚拟串口软件可以模拟真实的串口 程序可以利用虚拟串口与其他串口交换数据 Virtual Serial P
  • IEEE754详解(最详细简单有趣味的介绍)

    序言 xff1a 博主个人认为本系列文章是目前博主看过的介绍 IEEE754 xff0c 即浮点数的机器存储的最好的文章 它比白中英老师的 计算机组成原理 xff0c 在大学时计算机相关专业一般会使用的 绿皮书 xff0c 更加通俗易懂 x
  • 70_爬楼梯 滚动数组 动态规划 python

    题目搬运者 https leetcode cn com problems climbing stairs 思路 滚动数组 动态规划其实更像数学里面的找规律找公式 xff0c 数列吧 以前一直学不会动态规划的原因是一提起动态规划就觉得高大上
  • CutPaste Self-Supervised Learning for Anomaly Detection and Localization

    CutPaste Self Supervised Learning for Anomaly Detection and Localization 用于异常检测和定位的自监督学习 简洁版 问题 xff1a 异常的检测和定位 现有工作不足 xf