AdneneBoumessouer / MVTec-Anomaly-Detection学习笔记

27 篇文章 38 订阅
6 篇文章 2 订阅

AdneneBoumessouer / MVTec-Anomaly-Detection学习笔记

GitHub: https://github.com/AdneneBoumessouer/MVTec-Anomaly-Detection

本项目提出了一种基于深度学习的图像半监督异常检测和分割的端到端框架。

方法概述

该方法利用重建图像与输入图像之间的阈值差进行异常定位。

The threshold is determined by first using a subset of anomalous-free training images, i.e validation images, to determine possible values of minimum area and threshold pairs followed by using a subset of both anomalous-free and anomalous test images to select the best pair for classification and segmentation of the remaining test images.

本文在很大程度上受到了论文“MVTec AD — A Comprehensive Real-World Dataset for Unsupervised Anomaly Detection”(https://openaccess.thecvf.com/content_CVPR_2019/papers/Bergmann_MVTec_AD_--_A_Comprehensive_Real-World_Dataset_for_Unsupervised_Anomaly_CVPR_2019_paper.pdf)和“Improving Unsupervised Defect Segmentation by Applying Structural Similarity to Autoencoders”(https://arxiv.org/abs/1807.02011)的启发。该方法分为三个步骤:训练、微调和测试。

 

注意:为什么是半监督(Semi-Supervised)而不是非监督(Unsupervised?

MVTec论文中提出的方法是无监督的,因为在验证步骤中使用一个只包含无异常训练图像的子集(验证集)来确定测试图像分类和分割的阈值。但是,该验证算法是基于用户输入参数(最小缺陷面积),在上述MVTec AD文章中定义既不清楚,也没有解释。由于这个参数的选择可以极大地影响分类和分割结果,极大地影响自动化过程的努力,并删除所有用户输入的需要,我们开发了一个微调算法,计算对应于一个广泛的离散最小缺陷区域的验证集的不同阈值。随后利用测试集的小部分异常图像和无异常图像(微调集)来选择最佳的最小缺陷面积和阈值,最终用于对剩余测试图像进行分类和分割。由于我们的方法依赖于测试图像进行微调,我们将其描述为半监督。

 

数据集

该框架已在MVTec数据集(https://www.mvtec.com/company/research/datasets/mvtec-ad/)成功测试。

 

模型

本项目实现的基于卷积自动编码器(Convolutional Auto-Encoder, CAE)架构的模型共有5个:

  1. mvtecCAE: MVTec论文中实现的模型
  2. baselineCAE: 灵感来自https://github.com/natasasdj/anomalyDetection
  3. inceptionCAE: 灵感来自https://github.com/natasasdj/anomalyDetection
  4. resnetCAE: 灵感来自https://arxiv.org/pdf/1606.08921.pdf
  5. skipCAE: 灵感来自https://arxiv.org/pdf/1606.08921.pdf

注意:mvtecCAEbaselineCAEinceptionCAE在性能上具有可比性。

警告:resnetCAEskipCAE仍在测试中,因为它们容易过度拟合,这在卷积自动编码器的情况下是通过复制其输入而不过滤出缺陷区域来实现的。

 

预备知识

依赖关系

本项目中使用的主要库及其对应版本如下:

tensorflow == 2.1.0

ktrain == 0.21.3

scikit-image == 0.16.2

scikit-learn == 0.23.2

有关更多信息,请参阅requirement.txt

 

安装

在安装依赖项之前,我们强烈建议设置一个虚拟环境(例如,anaconda环境)

确保pip是最新的:pip install -U pip

如果TensorFlow 2还没有安装,请安装它(例如,pip Install TensorFlow ==2.1)

安装ktrainpip安装ktrain

安装scikit-imagepip install scikit-image

安装scikit-learnpip install scikit-learn

以上就是Linux系统和云计算环境,如谷歌ColabAWS EC2下所有你需要的主要库。

如果您在Windows计算机上使用ktrain,可以按照https://github.com/amaiya/ktrain/blob/master/FAQ.md#how-do-i-install-ktrain-on-a-windows-machine提供的更详细的说明进行操作,其中包括一些额外的步骤。

注意:安装ktrain时需要额外较大的库有:scikit_learntransformerssentencepiecetokenizersjieba

 

下载数据集

  1. https://www.mvtec.com/company/research/datasets/mvtec-ad/下载mvtec数据集,并将其保存到您选择的目录中(例如在/Downloads)
  2. 解压压缩的图像文件。
  3. 在项目目录中创建一个文件夹来存储图像文件。
  4. 将提取的图像文件移动到该文件夹。

 

使用mvtec数据集的目录结构

为了让脚本正常工作,包含训练和测试图像的文件夹需要有特定的结构。

在使用mvtec数据集的情况下,下面是一个目录结构应该是什么样的示例:

 

使用自己数据集的目录结构

要使用自己的数据集进行训练,您需要有一个可比较的目录结构。例如:

 

使用方法

Training (train.py)

在训练期间,CAE只训练无缺陷的图像,并学习重建(预测)无缺陷的训练样本。

用法:train.py [-h] -d [-a] [-c] [-l] [-b] [-i]

可选参数:

  1. -h, --help:显示帮助信息并退出;
  2. -d, --input-dir:包含训练图像的目录;
  3. -a, --architecture:用于训练的模型架构:'mvtecCAE', 'baselineCAE', 'inceptionCAE' or 'resnetCAE'
  4. -c, --color:训练前预处理图像的颜色模式:'rgb' or 'grayscale'
  5. -l, --loss:训练时使用的损失函数:'mssim', 'ssim'(只适用灰度图像) 'l2'
  6. -b, --batch:用于训练的批大小;
  7. -i, --inspect:训练后生成检查图。

使用示例:

python3 train.py -d mvtec/capsule -a mvtecCAE -b 8 -l ssim -c grayscale

注意:由于训练过程实现了一种早期停止策略,因此用户不需要输入epochs

 

Finetuning (finetune.py)

这个脚本使用了一个无缺陷训练图像的子集以及一个包含有缺陷和无缺陷测试图像的子集来确定最小缺陷面积的良好值和阈值参数对,这些参数将在分类和分割测试期间使用。

用法:finetune.py [-h] -p [-m] [-t]

可选参数:

  1. -h, --help:显示帮助信息并退出;
  2. -p, --path:模型的保存路径;
  3. -m, --method:生成重映射的方法:'ssim' or 'l2'
  4. -t, --dtype:处理重映射的数据类型:'float64' or 'uint8'

使用示例:

python3 finetune.py -p saved_models/mvtec/capsule/mvtecCAE/ssim/13-06-2020_15-35-10/mvtecCAE_b8_e39.hdf5 -m ssim -t float64

 

Testing (test.py)

这个脚本使用最小缺陷区域和阈值对测试图像进行分类。

用法:test.py [-h] -p [-s]

可选参数:

-h, --help:显示帮助信息并退出;

-p, --path:模型的保存路径;

-s, --save:保存分割后的图像。

使用示例:

python3 test.py -p saved_models/mvtec/capsule/mvtecCAE/ssim/13-06-2020_15-35-10/mvtecCAE_b8_e39.hdf5

 

项目组织

 

├── mvtec              <- folder containing all mvtec classes.

   ├── bottle          <- subfolder of a class (contains additional subfolders /train and /test).

|   |── ...

├── autoencoder         <- directory containing modules for training: autoencoder class and methods as well as custom losses and metrics.

├── processing           <- directory containing modules for preprocessing images and before training and processing images after training.

├── results               <- directory containing finetuning and test results.

├── readme.md           <- readme file.

├── requirements.txt       <- requirement text file containing used libraries.

├── saved_models         <- directory containing saved models, training history, loss and learning plots and inspection images.

├── train.py               <- training script to train the auto-encoder.

├── finetune.py    <- approximates a good value for minimum area and threshold for classification.

└── test.py             <- test script to classify images of the test set using finetuned parameters.

 

作者

AdneneBoumessouerhttps://github.com/AdneneBoumessouer

 

许可证

该项目在MIT许可证下获得许可。参见LICENSE.md文件查看详情。

 

致谢

  1. Paul Bergmann, Michael Fauser, David SattleggerCarsten Steger:他们是MVTec论文的作者,该项目受到了他们的启发。
  2. Francois CholletKeras的作者。
  3. Aurelien GeronHands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition的作者。
  4. Arun S. Maiyaktrain深度学习库的作者。
  5. Adrian Rosebrock是计算机视觉网站pyimagesearch的创始人。

 

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值