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

相关文章

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分