Anomalib:异常检测的深度学习库 -- 应用Anomalib训练自己的图片

在这里插入图片描述

思考:Anomalib是一个异常检测的框架,里面配备了丰富的模型,和相应的前后处理和对应数据集的处理,有很强的通用性,其通用框架也很值得参考。目前支持的模型:
CFA
CFlow
DFKDE
DFM
DRAEM
EfficientAd
FastFlow
GANomaly
PADIM
PatchCore
Reverse Distillation
STFPM

资料汇总
Github链接:https://github.com/openvinotoolkit/anomalib/blob/main/README.md
论文链接:https://arxiv.org/pdf/2202.08341v1.pdf
其他参考资料:https://paperswithcode.com/paper/efficientad-accurate-visual-anomaly-detection

一、准备数据集

要训练自己的数据集,首先要知道原本数据集的格式。

  • mvtec
    padim模型对应mvtec数据格式。它的目录如下:
`-- category1                                       类别
    |-- ground_truth                                GT数据集
    |   `-- bad                                     异常数据集(和test的异常数据集对应)
    |       |-- wucao1-1.png
    |       `-- wucao2.png
    |-- test                                        测试数据集
    |   |-- bad                
    |   |   |-- wucao1-1.png
    |   |   `-- wucao2.png
    |   `-- good
    |       |-- wucao1-2.png
    |       `-- wucao1.png
    `-- train                                      训练数据集
        `-- good
            |-- wucao1-2.png
            `-- wucao1.png

二、dockerfile修改

原本的.ci/Docker直接构建image会报错,建议参照image构建
构建image,可以把26行的 requestment.txt 改成.ci/Docker中的module
在这里插入图片描述

RUN pip3 --no-cache-dir install -r requirements/base.txt
RUN pip3 --no-cache-dir install -rrequirements/openvino.txt
RUN pip3 --no-cache-dir install -rrequirements/dev.txt

或者在装好的docker里安装也可。

还要装

pip install anomalib

换源,在后面加

 -i https://pypi.tuna.tsinghua.edu.cn/simple

–>

 pip install anomalib -i https://pypi.tuna.tsinghua.edu.cn/simple

三、训练&验证

python3 tools/train.py --config=../src/anomalib/models/padim/config.yaml

默认padim模型,把配置文件路径传入,在results下会生成,注意要更改config.yaml里面的dataset下的path,改成自己数据集的路径,category也改成自己的类别。

### 如何使用ONNX运行Anomalib模型推理 为了成功利用ONNX执行Anomalib模型的推理工作,需遵循一系列特定的操作流程来准备和优化模型以及处理输入输出数据。 #### 准备阶段:从ckpt到onnx 首先,在拥有由Anomalib训练所得的`.ckpt`文件之后,应将其转换成通用中间表示形式——即ONNX格式。此过程可通过调用内置函数或脚本实现[^2]: ```python from anomalib.models import get_model import torch.onnx model = get_model(config_path="path/to/config.yaml") # 加载配置文件初始化模型结构 checkpoint = torch.load("path/to/checkpoint.ckpt", map_location=torch.device('cpu')) # 载入已保存的权重参数 model.load_state_dict(checkpoint["state_dict"]) # 将权重加载至模型实例中 dummy_input = torch.randn(1, 3, height, width) # 创建虚拟张量作为样例输入 torch.onnx.export(model, dummy_input, "output_model.onnx", opset_version=11) ``` 上述代码片段展示了如何通过PyTorch API将一个预训练好的模型导出为ONNX格式,并指定了操作集版本号以确保兼容性。 #### 推理前的数据预处理 当准备好用于推理的ONNX模型后,对于待检测图片来说,必须先经过必要的预处理才能被正确识别。通常情况下,这涉及以下几个方面的工作[^1]: - **尺寸调整**:根据目标网络的要求改变原始图像大小; - **通道顺序变换**:如果原图为BGR色彩空间,则可能需要转换RGB; - **像素值标准化**:减去均值并除以标准差使数值范围落在合理区间内; - **维度扩展/压缩**:增加batch dimension或将多维数组展平以便于传输给神经网络层。 具体实施细节取决于所使用的特定异常检测算法及其预期输入规格说明文档中的指导建议。 #### 执行推理任务 一旦完成了前期准备工作,就可以借助像`onnxruntime`这样的高效计算引擎来进行实际预测了: ```python import onnxruntime as ort import numpy as np session = ort.InferenceSession("output_model.onnx") input_name = session.get_inputs()[0].name output_names = [o.name for o in session.get_outputs()] def preprocess(image): """定义具体的预处理逻辑""" pass preprocessed_image = preprocess(input_image) results = session.run(output_names, {input_name: preprocessed_image}) ``` 这里假设已经实现了名为`preprocess()`的方法负责完成前面提到的各项预处理措施。接着创建一个新的会话对象关联指定路径下的ONNX文件,获取其唯一的输入名称及所有输出名列表,最后传入适当格式化的测试样本获得分类结果或其他类型的响应信息。 #### 后处理与可视化 针对来自ONNX模型的结果,往往还需要进一步解析和转化才能够直观理解或应用于后续分析之中。特别是关于生成热力图这一需求,可以考虑采用如下方式绘制: ```python import matplotlib.pyplot as plt from skimage.transform import resize heatmap = results[0][0] # 假设第一个输出就是所需的热度分布矩阵 resized_heatmap = resize(heatmap, (original_height, original_width), mode='reflect', anti_aliasing=True) plt.imshow(resized_heatmap, cmap='jet') plt.colorbar() plt.show() ``` 这段Python代码接收到了经由ONNX Runtime返回的一组或多组特征映射向量,从中提取出代表局部重要性的分数构成二维阵列,随后运用SciKit Image提供的重采样工具恢复回原始分辨率尺度上对应位置处的重要性程度变化趋势曲线,最终选用Matplotlib绘制成彩色渐变效果的地图图形展示出来供观察者参考解读。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thomas_Cai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值