Anomalib: 異常検出のための深層学習ライブラリ
PDF:https://arxiv.org/pdf/2202.08341.pdf
代番号:https://github.com/openvinotoolkit/anomalib
1。概要
Anomalib は、異常検出に焦点を当てた深層学習ライブラリです。その目標は、最先端の異常検出アルゴリズムを収集し、パブリック データセットとプライベート データセットのベンチマークのためのツールを提供することです。このライブラリは、最近の文献に記載されている一連の実装された異常検出アルゴリズムを提供します。さらに、Anomalib は、開発者がカスタム モデルを開発および実装することを容易にする一連のツールも提供します。このライブラリは、画像ベースの異常検出に特に焦点を当てており、データセット内の異常な画像または画像内の異常なピクセル領域を特定することを目的としています。Anomalib を使用すると、ユーザーは特定のニーズを満たすさまざまな異常検出アルゴリズムを迅速に構築して評価できます。
2 インストール
リポジトリのクローンを作成する
git clone https://github.com/openvinotoolkit/anomalib.git
cd anomalib
2-1 窓
パッケージをインストールする
python -m pip install --upgrade pip wheel setuptools
pip install -r .[full]
2-2 Ubuntu
パッケージをインストールする
python -m pip install --upgrade pip
pip install wheel setuptools
pip install -r requirements.txt
2-3 CentOS
パッケージをインストールする
python -m pip install --upgrade pip
pip install -r requirements.txt
3 トレーニング
各モデルには独自の構成ファイル config.yaml があり、データ、モデル、およびトレーニングの構成可能なパラメーターが含まれています。モデルをトレーニングするときに構成ファイルを指定する必要があります。
python tools/train.py --config <path/to/model/config.yaml>
または
python tools/train.py --model stfpm
4 推論
推論関連パラメータ
4-1 PyTorch (Lightning) 推論
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の推論
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 勾配推論
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 エクスポートと最適化
次の設定を config.yaml ファイルに追加すると、トレーニング後にモデルが OpenVINO IR にエクスポートされます。
optimization:
export_mode: openvino
ONNX 形式のみをエクスポートする場合
optimization:
export_mode: onnx
Anomalib は、エクスポートされた OpenVINO モデルのパフォーマンスをさらに向上させるために、OpenVINO のニューラル ネットワーク圧縮フレームワーク (NNCF) をサポートしています。NNCF はトレーニング中に異常モデルのニューラル ネットワーク コンポーネントを最適化するため、トレーニング後の方法よりも優れたパフォーマンスと精度のバランスを実現できます。
NNCF を有効にするには、次の設定を config.yaml ファイルに追加します。
optimization:
nncf:
apply: true
注: 現在、NNCF をサポートしているのは STFPM モデルのみです
6 ベンチマーク
実験の追跡と最適化の機能を追加するために、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 推論を使用するかどうか。
ライター: [] はログではなく 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 ロギング
Anomalib は、メトリクスと予測されたマスクを記録するための複数のメカニズムを提供します。
7-1 ロギングを有効にする
シングルを有効にする
logging:
logger: "tensorboard"
または複数を有効にする
logging:
logger: [comet, tensorboard, wandb]
log_graph: false
7-2 画像を記録する
Anomalib では、視覚化セクションで log_images: True を設定することで、予測結果をファイル システムに保存できます。これにより、予測結果を画像ファイルとして保存して、後で分析したり表示したりできるようになります。
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 レコードモデル図
モデル設定ファイルのログ パラメーターで log_graph を True に設定すると、モデル グラフを Comet、TensorBoard、または Weights and Biases に簡単に記録できます。
logging:
logger: [comet, tensorboard]
log_graph: true
8 ハイパーパラメータの最適化
デフォルトで構成されたモデルは、新しいデータ セットに対して常に適切に機能するとは限りません。さらに、パフォーマンスを向上させるには、学習率、オプティマイザ、アクティベーション関数などを調整/選択して、ハイパーパラメータの最適な組み合わせを決定する必要があります。Anomalib は、Comet または重みとバイアスを使用したハイパーパラメータの最適化をサポートしています。
8-1 YAMLファイル
Comet を使用したハイパーパラメータ最適化のサンプル構成ファイルは、次のように tools/hpo/configs/comet.yaml に提供されています。
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 は実行する実験の総数を定義します。アルゴリズムは、使用される最適化方法です。メトリックは、モデルのパフォーマンスを評価するために使用される指標です。パラメータは、最適化されるハイパーパラメータです。パラメータ設定の詳細については、Comet のドキュメント https://www.comet.com/docs/v2/api-and-sdk/python-sdk/introduction-optimizer/ を参照してください。
重みとバイアスを使用したハイパーパラメータ最適化のサンプル構成ファイルは、次のように tools/hpo/configs/wandb.yaml に提供されています。
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 は、使用される最適化方法です。メトリックは、モデルのパフォーマンスを評価するために使用される指標です。パラメータは、最適化されるハイパーパラメータです。パラメータ設定の詳細については、重みとバイアスのドキュメント 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