【2024工业图像异常检测代码复现】GLASS: 基于全局和局部异常共合成策略的异常检测方法

Paper:A Unified Anomaly Synthesis Strategy with Gradient Ascent for Industrial Anomaly Detection and Localization
Code:https://github.com/cqylunlun/glass?tab=readme-ov-file

文献解读:【2024工业图像异常检测文献】GLASS: 基于全局和局部异常共合成策略的异常检测方法

1、Introduction

GLASS方法的核心思想是通过在特征级别和图像级别上协同工作,以可控的方式合成更广泛的异常样本。

GLASS框架主要包含三个分支:正常分支(Normal branch)、全局异常合成(GAS)分支和局部异常合成(LAS)分支。

  • 正常分支(Normal branch):负责处理正常样本,通过特征提取器(Eϕ)和特征适配器(Aφ)获取适应性的正常特征。
  • 全局异常合成(GAS)分支:旨在通过梯度上升和截断投影的方法,从正常特征合成全局异常特征。
  • 局部异常合成(LAS)分支:负责在图像级别上合成局部异常,通过纹理叠加的方法生成更多样化的异常。

在这里插入图片描述

2、Framework

项目结构与文件说明:

  • datasets/: 存放数据集的目录,项目中提到的自建数据集(如WFDD, MAD-man, MAD-sys)应该存储在此。
  • figures/: 存储图表、图像等可视化资源的目录。
  • shell/: 包含了一些Shell脚本,可能是用于环境设置、数据下载或实验运行的脚本。
  • backbones.py: 包含了模型的主干网络定义,通常用于特征提取。
  • common.py: 可能包含了一些通用函数或类,供其他模块调用。
  • glass.py: 核心模块,实现了GLASS框架的主要逻辑。
  • loss.py: 定义了损失函数,用于训练过程中的误差计算。
  • main.py: 项目入口文件,定义了如何运行整个程序。
  • metrics.py: 包含了评估指标的实现,用于量化模型性能。
  • model.py: 定义了模型的架构。
  • perlin.py: 可能实现了Perlin噪声生成算法,常用于生成纹理或模拟自然现象。
  • requirements.txt: 列出了项目依赖的Python包及其版本号。
  • utils.py: 工具函数集合,可能包括数据处理、文件操作等辅助功能。

3、Environments

PyTorch 2.0.0
Python 3.8(ubuntu20.04)
Cuda 11.8

4、Datasets

数据集使用的是MVTecAD (MVTEC ANOMALY DETECTION DATASET)

数据来源https://www.mvtec.com/company/research/datasets/mvtec-ad,将其放在某个位置datapath。确保其遵循以下数据树结构:

mvtec
|-- bottle
|-----|----- ground_truth
|-----|----- test
|-----|--------|------ good
|-----|--------|------ broken_large
|-----|--------|------ ...
|-----|----- train
|-----|--------|------ good
|-- cable
|-- ...

总共有15个子数据集:bottle(瓶子),cable(电缆),capsule(胶囊),carpet(地毯),grid(网格),hazelnut(危险螺母), leather(皮革),metal_nut(金属螺母),pill(药丸 ),screw(螺丝 ),tile(瓷砖),toothbrush(牙刷 ),transistor(变压器),wood(木材),zipper(拉链)。

本文中使用的公共数据集如下。DTD 是 GLASS 中用于数据增强的辅助纹理数据集,而其他数据集用于异常检测评估。这些数据集文件夹/文件遵循其原始结构。

  • DTD
  • MVTec AD
  • VisA
  • MPDD

在这里插入图片描述

5、Requirements

安装所需要的包:

pip install -r requirements.txt

报错①如下:

在这里插入图片描述

有几个包对应的版本没找到,需要稍修改一下requirements.txt文件,修改后如下:

加图。。。。

没有完全提及。。。运行时,出现报错需要安装指定包,pip install 包名 ,就可解决了。。。如:

pip install imgaug
pip install openpyxl
。。。

6、Parameters

编辑 ./shell/run-dataset.sh 以配置参数 --datapath、–augpath、–classes 和超参数设置。

'dataset’是指任何数据集。目前,shell 文件夹包含六个数据集的脚本,例如 MVTec AD 的 run-mvtec.sh。如果要训练自己的数据集,请创建一个新的 run-*.sh 文件。

cd 切换到shell目录下,运行对应的.sh文件

参数解释:

datapath:指定 MVTec AD 数据集的路径。

datapath=/root/dataset/MVTec

augpath:指定数据增强图像的路径。

augpath=/root/dataset/dtd/images

classes:定义了 MVTec AD 数据集中包含的所有类别。

classes=('carpet' 'grid' 'leather' 'tile' 'wood' 'bottle' 'cable' 'capsule' 'hazelnut' 'metal_nut' 'pill' 'screw' 'toothbrush' 'transistor' 'zipper')

flags:生成一个包含所有类别的标志列表,每个类别对应一个 -d 参数。例如,-d carpet -d grid -d leather ...。

flags=($(for class in "${classes[@]}"; do echo '-d '"${class}"; done))

通用参数:

--gpu 0: 使用 GPU 0 进行计算。
--seed 0: 设置随机种子为 0,以确保实验的可重复性。
--test ckpt: 指定测试模式,使用 ckpt 作为检查点。

网络参数:

-b wideresnet50: 使用 WideResNet50 作为基础模型。
-le layer2: 使用 layer2 作为特征提取层。
-le layer3: 使用 layer3 作为特征提取层。
--pretrain_embed_dimension 1536: 预训练嵌入维度为 1536。
--target_embed_dimension 1536: 目标嵌入维度为 1536。
--patchsize 3: 使用 3x3 的补丁大小。
--meta_epochs 640: 元训练的轮数为 640。
--eval_epochs 1: 每 1 轮进行一次评估。
--dsc_layers 2: 使用 2 层的判别器。
--dsc_hidden 1024: 判别器隐藏层的大小为 1024。
--pre_proj 1: 使用预投影。
--mining 1: 使用挖掘技术。
--noise 0.015: 添加噪声的标准差为 0.015。
--radius 0.75: 半径为 0.75。
--p 0.5: 概率为 0.5。
--step 20: 步长为 20。
--limit 392: 限制为 392。

数据集参数:

--distribution 0: 分布类型为 0。
--mean 0.5: 均值为 0.5。
--std 0.1: 标准差为 0.1。
--fg 1: 使用前景。
--rand_aug 1: 使用随机增强。
--batch_size 8: 批量大小为 8。
--resize 288: 图像调整大小为 288。
--imagesize 288: 图像大小为 288"${flags[@]}": 传递所有类别的标志。
mvtec: 数据集名称为 mvtec。
$datapath: MVTec AD 数据集的路径。
$augpath: 数据增强图像的路径。

如果数据集没有或不需要前景掩码,请在 shell 脚本中将参数 --fg 设置为 ‘0’。

在这里插入图片描述

7、Results

没运行完。。。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值