Anomalib库安装以及使用

Anomalib: A Deep Learning Library for Anomaly Detection
PDF:https://arxiv.org/pdf/2202.08341.pdf
代码:https://github.com/openvinotoolkit/anomalib

1 概述

Anomalib是一个专注于异常检测的深度学习库。它的目标是收集最新的异常检测算法,并提供用于在公共和私有数据集上进行基准测试的工具。该库提供了一系列已实现的异常检测算法,这些算法在最近的文献中有所描述。此外,Anomalib还提供了一套工具,方便开发人员开发和实现自定义模型。该库特别注重基于图像的异常检测,旨在识别数据集中的异常图像或图像中的异常像素区域。通过使用Anomalib,用户可以快速构建和评估各种异常检测算法,以满足其特定需求。

2 安装

Clone the Repository

git clone https://github.com/openvinotoolkit/anomalib.git
cd anomalib

2-1 Windows

Install the Packages

python -m pip install --upgrade pip wheel setuptools
pip install -r .[full]

2-2 Ubuntu

Install the Packages

python -m pip install --upgrade pip
pip install wheel setuptools
pip install -r requirements.txt

2-3 CentOS

Install the Packages

python -m pip install --upgrade pip
pip install -r requirements.txt

3 Training

每个模型都有自己的配置文件config.yaml,其中包含数据、模型和训练可配置参数。模型训练时需要指定配置文件。

python tools/train.py --config <path/to/model/config.yaml>

或者

python tools/train.py --model stfpm

4 Inference

推理相关参数
在这里插入图片描述

4-1 PyTorch (Lightning) Inference

python tools/inference/lightning.py --config padim.yaml --weights results/weights/model.ckpt --input image.png

更改推理时的阈值,只需将metrics.threshold.method为manual,并在metrics.threshold.manual_image和metrics.threshold.manual_pixel中指定自定义阈值。

  threshold:
    method: manual #options: [adaptive, manual]
    manual_image: null
    manual_pixel: null

4-2 OpenVINO Inference

OpenVINO IR导出时同时会生成 metadata.json文件,OpenVINO 推理时,需要一并指定。

python tools/inference/openvino.py --weights results/openvino/model.xml --input image.png --metadata results/openvino/metadata.json

4-3 Gradio Inference

python tools/inference/gradio_inference.py \
    --weights ./results/padim/mvtec/bottle/weights/model.ckpt

或者

python python tools/inference/gradio_inference.py \
    --weights ./results/padim/mvtec/bottle/openvino/openvino_model.onnx \
    --metadata ./results/padim/mvtec/bottle/openvino/metadata.json

5 Export && Optimization

将以下配置添加到您的config.yaml文件中,在训练后,模型将导出为OpenVINO IR

optimization:
  export_mode: openvino

如果只导出ONNX格式

optimization:
  export_mode: onnx

Anomalib支持OpenVINO的神经网络压缩框架(NNCF),以进一步提高导出的OpenVINO模型的性能。NNCF在训练过程中优化异常模型的神经网络组件,因此可以实现比后训练方法更好的性能-准确性平衡。

要启用NNCF,请将以下配置添加到您的config.yaml文件中

optimization:
  nncf:
    apply: true

注意: 当前只有STFPM模型支持NNCF

6 Benchmarking

为了增加实验跟踪和优化的功能,Anomalib还包括了一个基准测试脚本,用于收集不同模型、参数和数据集类别组合的结果。模型的性能和吞吐量将被记录到一个CSV文件中,该文件也可以用作跟踪模型漂移的手段。
在CPU和GPU上计算了Padim和STFPM模型对自定义文件夹数据集的两个类别的吞吐量和性能指标的配置文件如下:

seed: 42
compute_openvino: false
hardware:
  - cpu
  - gpu
writer:
  - comet
  - wandb
  - tensorboard
grid_search:
  dataset:
    category:
      - colour
      - crack
    image_size: [128, 256]
  model_name:
    - padim
    - stfpm

compute_openvino 是否使用openvino推理;
writer: [] 只记录csv文件,不记录日志;

使用自定义数据集

seed: 42
compute_openvino: false
hardware:
  - cpu
  - gpu
writer:
  - comet
  - wandb
  - tensorboard
grid_search:
  dataset:
    name: hazelnut
    format: folder
    path: path/hazelnut_toy
    normal_dir: good # name of the folder containing normal images.
    abnormal_dir: colour # name of the folder containing abnormal images.
    normal_test_dir: null
    task: segmentation # classification or segmentation
    mask: path/hazelnut_toy/mask/colour
    extensions: .jpg
    split_ratio: 0.2
    category:
      - colour
      - crack
    image_size: [128, 256]
  model_name:
    - padim
    - stfpm

运行

python tools/benchmarking/benchmark.py --config <relative/absolute path>/<paramfile>.yaml

7 Logging

Anomalib提供了多种机制来记录指标和预测的掩码。

7-1 启用日志记录

启用单个

logging:
    logger: "tensorboard"

或者启用多个

logging:
  logger: [comet, tensorboard, wandb]
  log_graph: false

7-2 记录图像

通过在可视化部分设置log_images: True,Anomalib允许您将预测结果保存到文件系统中。这将使您能够将预测结果保存为图像文件,以便后续分析和查看。

visualization:
  show_images: False # show images on the screen
  save_images: False # save images to the file system
  log_images: True # log images to the available loggers (if any)
  image_save_path: null # path to which images will be saved
  mode: full # options: ["full", "simple"]

logging:
  logger: [comet, tensorboard, wandb]
  log_graph: false

7-3 记录模型图

在模型配置文件的logging参数下设置log_graph为True,您可以更轻松地将模型图记录到Comet、TensorBoard或Weights and Biases。

logging:
  logger: [comet, tensorboard]
  log_graph: true

8 Hyperparameter Optimization

默认配置的模型并不总能适用于新的数据集。此外,为了提高性能,需要调整/选择学习率、优化器、激活函数等,以确定最佳的超参数组合,Anomalib支持使用Comet或weights and biases进行超参数优化。

8-1 YAML 文件

在tools/hpo/configs/comet.yaml中提供了一个使用Comet进行超参数优化的示例配置文件,如下所示:

algorithm: "bayes"
spec:
  maxCombo: 10
  metric: "image_F1Score"
  objective: "maximize"
parameters:
  dataset:
    category: capsule
    image_size:
      type: discrete
      values: [128, 256]
  model:
    backbone:
      type: categorical
      values: ["resnet18", "wide_resnet50_2"]

其中 maxCombo定义要运行的实验总数。algorithm是要使用的优化方法。metric是用于评估模型性能的指标。parameters是要优化的超参数。更多参数配置需要参考 Comet文档 https://www.comet.com/docs/v2/api-and-sdk/python-sdk/introduction-optimizer/

在tools/hpo/configs/wandb.yaml中提供了一个使用Weights and Bias进行超参数优化的示例配置文件,如下所示:

observation_budget: 10
method: bayes
metric:
  name: pixel_AUROC
  goal: maximize
parameters:
  dataset:
    category: hazelnut
    image_size:
      values: [128, 256]
  model:
    backbone:
      values: [resnet18, wide_resnet50_2]

其中observation_budget定义了要运行的实验总数。method是要使用的优化方法。metric是用于评估模型性能的指标。parameters是要优化的超参数。更多参数配置需要参考Weights and Bias文档 https://docs.wandb.ai/guides/sweeps

8-2 运行 HPO

python tools/hpo/sweep.py --model padim \
  --model_config ./path_to_config.yaml \
  --sweep_config tools/hpo/configs/comet.yaml

或者

python tools/hpo/sweep.py --sweep_config tools/hpo/configs/comet.yaml

猜你喜欢

转载自blog.csdn.net/shanglianlm/article/details/132832778
今日推荐