CVPR2019 无监督异常检测/定位数据集:MVTec AD

2023-10-31 15:40

本文主要是介绍CVPR2019 无监督异常检测/定位数据集:MVTec AD,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《MVTec AD:A Comprehensive Real-World Dataset for Unsupervised Anomaly Detection》

简介

MVTec AD是MVtec公司提出的一个用于异常检测的数据集,发布于2019CVPR。与之前的异常检测数据集不同,该数据集模仿了工业实际生产场景,并且主要用于unsupervised anomaly detection。数据集为异常区域都提供了像素级标注,是一个全面的、包含多种物体、多种异常的数据集。

训练集中只包含正常样本,测试集中包含正常样本与缺陷样本,因此需要使用无监督方法学习正常样本的特征表示,并用其检测缺陷样本。这是符合现实的做法,因为异常情况不可预知并无法归纳

数据集包含不同领域中的五种纹理以及十种物体,下图分别展示了这几类图片的正常样本与缺陷样本,以及缺陷样本中的缺陷特写。

论文介绍

2. Related Work

该段主要介绍了异常检测数据集以及用于异常检测的方法

Dataset:主要有两类

​ ① 异常图片分类,也就是说模型只需要输出该图片是否为异常样本。有种构造数据集的方法是在ImageNet上选出一部分类别图像作为训练集,用其他类别的图像作为测试集,但是因异常样本本身就已经属于不同类别,在它上面验证的方法无法评价其好坏。因此《Object-Centric Anomaly Detection by Attribute-Based Reasoning》从Pascal VOC中选取六类物体图片作为正常,然后在网上搜索一批该类别中奇形怪状的样本作为缺陷样本。尽管异常数据更接近训练数据模式,但异常检测还是基于整个图像,而不是发现图像中的异常部分(没有定位异常区域);

​ ② 异常区域分割,不仅需要判断是否异常,还需要找出异常区域。a) NanoTwice: 45张灰度图,5个无缺陷图像进行训练,剩余40张异常图像(包含灰尘或斑点等,只有一种纹理); b) DAGM: 包含10类缺陷(人工生成的灰度纹理,其缺陷以椭圆形式被弱注释),每类包括1000个正常区域用于训练,150个缺陷样本用于测试。

Nano Twice只包含单种缺陷纹理,无法准确验证方法性能;DAGM标注是粗糙的,并且是人工生成的缺陷,无法反映真实世界应用。

Methods:主要有以下四类

​ ① 生成对抗模型,训练时生成器生成假图像,以对抗的方式欺骗鉴别器。对于异常检测,模型在潜在空间中搜索样本(可迷惑鉴别器的样本,满足训练集分布),如果能找到一个合适的匹配即为正常,反之异常。对于异常分割,将重建图像与原始输入逐像素进行比较即可。

代码性文章为:Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery

​ ② 卷积自编码器,这是无监督异常检测中用的最多的方法。训练时自编码器通过潜在空间(latent space)重构正常样本,在测试时如果测试样本与训练样本分布不同,那么无法重现样本,这样可以检测出样本是否异常。然后通过对比输入样本与重构样本的像素级差异可以发现异常区域。

卷积自编码器CAE有很多变体,比如VAE变分自编码器,但是目前有论文提出从VAE或者其他深度生成模型获得的概率可能无法对训练数据的真实可能性(true likelihood)进行建模。

​ ③ 基于预训练神经网络特征,上面两种方法都是试图从提供的训练数据中学习特征表示,但目前有些方法直接使用某个训练好的CNN(在一个单独的图像分类任务上进行训练)的特征提取器来进行异常检测。

代表工作:Anomaly Detection in Nanofibrous Materials by CNN-Based Self-Similarity

​ ④ 传统方法,针对正常样本设计人工特征提取器。例如,通过高斯混合模型GMM建模特征分布,对于提取出来的特征在GMM获得较低概率的样本将会被认为是缺陷样本。

3. Dataset Description

如上表与第一节的图例所示,数据集一共包含15个类别,其中3629张图片用于训练与验证,1725张用于测试,其中训练集只包含正常样本。其中5类为纹理类数据,包含规律的纹路(毛毯、网格)以及随机纹路(皮革、瓷砖、木材);剩下的10类为物体类数据,包含刚性的、特定外观的物体(瓶,金属螺母),可变形物体(电缆)或包括自然变化物体(榛子),并且某部分获取的物体处于大致对齐位置(e.g. 牙刷,胶囊和药丸),其他为随机摆放(e.g. 金属螺母,螺丝和榛子)。测试集中包含73种不同的异常,例如物体表面缺陷(e.g.划痕,凹痕)、结构缺陷(e.g.物体出现部分扭曲)或者由于缺少某些物体组成部件而表现出来的缺陷。

所有图像的尺寸在700x700 ~ 1024x1024之间,其中网格、拉链以及螺丝为灰度单通道图像。数据集为所有的缺陷区域均提供了像素级标注区域,总共包含接近1900个标注区域。

4. Benchmark

选取第2节所介绍的一些SOTA方法在该数据集上进行验证,作为未来方法的Baseline。

具体的模型参数设置与训练细节,可以参照原文,这里不再叙述

进行评估的模型包含AnoGAN、L2/SSIM CAE、CNN feature dictionary、GMM-based Texture Inspection Model以及Variation Model

数据增广:对于纹理类的图片,对提取出的矩形Patch进行随机裁剪+旋转;对于物体类图片,应用随机平移+旋转。对某些类别图片进行额外的旋转操作,最后每一类包含10000个训练patch。

评价指标:分类任务采用准确率;分割任务采用IoU,以及引入阈值无关的指标:AUC,其中TPR表示被正确识别为异常类像素的百分比,TNR表示被错误识别为异常类像素的百分比。

在评估的模型中,除了GMM可以提供一个阈值,其他模型的阈值都需要设。关于阈值的设定,作者明确定义了一种方法:从训练集中随机抽取一批数据作为验证集,在这上面确定阈值。

具体做法:首先对每一类定义一个最小缺陷区域(minimum defect area),在模型输出的异常图(Anomaly Map)中如果有连通区域大于该区域就会被识别为异常区域。然后在验证集(全为正常样本)上提高阈值,直到异常图中的连通区域刚好都小于定义的缺陷区域(即验证集中没有被误识别的样本),就以该阈值作为测试的阈值。

测试结果:异常分类与分割的测试结果分别为以下两张表所示

第一行和第二行分别表示在测试集上正常样本与异常样本的分类准确率

第一行和第二行分别表示在测试集上的IoU以及AUC

从测试集结果来看,所选取的这些代表性方法中没有一个在所有类别上都表现的很好。

具体实验的分析这里也不过多赘述,只提一个结论:AUC与Overlap(IoU)没有重合,这也凸显出在无异常样本上确定阈值是非常困难的,这也就说明无监督异常检测的可发展空间之大。
在这里插入图片描述

上图给了一些可视化结果,具体分析课件原文4.4节

这篇关于CVPR2019 无监督异常检测/定位数据集:MVTec AD的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/316378

相关文章

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Window Server2016加入AD域的方法步骤

《WindowServer2016加入AD域的方法步骤》:本文主要介绍WindowServer2016加入AD域的方法步骤,包括配置DNS、检测ping通、更改计算机域、输入账号密码、重启服务... 目录一、 准备条件二、配置ServerB加入ServerA的AD域(test.ly)三、查看加入AD域后的变

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

Python实现数据清洗的18种方法

《Python实现数据清洗的18种方法》本文主要介绍了Python实现数据清洗的18种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录1. 去除字符串两边空格2. 转换数据类型3. 大小写转换4. 移除列表中的重复元素5. 快速统