LoginSignup
0
0

【Python】 異常検知ライブラリ Anomalib がすごすぎる!

Last updated at Posted at 2024-04-03

Anomalibとは

 Anomalibは、画像向けの異常検知ライブラリであり、Intel が提供する OpenVINOツールキット の一部である。最先端の異常検知アルゴリズムを提供し、非常に簡単に画像の異常検知AIが実装できる。この最新版のPython SDKがつい最近 (2024/3/28) に公開されたので、画像における異常検知の学習・推論方法を紹介する。

推論結果 (Patch Coreモデル)
真ん中のヒートマップが異常検出の結果。赤いところが異常個所。かなり正確。

ビン底の異常検出。右下にざらざらした欠陥があり、きれいに検出されている。
000.png

トランジスタの異常検出。左下の端子が曲がっており、正確に検出できている。
000.png

歯ブラシの異常検出。左部にバラけたブラシがあり、これも正確に検出できている。
000.png

インストール方法

Python3.10 以上のバージョンでAnomalibとtimm/PyTorchをpip installするのみ。

pip install anomalib timm
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

必要な動作環境は以下。大体の環境で実行できる。ない場合はAWSのml.g4dn.xlarge 0.994USD/時でお安く実行できる。
・Windows/Linux両方
・Python 3.10以上
・PyTorch Lightningベース
・GPUメモリ 16 GB以上
・ライセンス Apache-2.0

学習・推論手順

下記にMVTecの学習データを用いて、PatchCoreを学習し、異常検知するコードを示す。

 PatchCore (Karsten Roth et.al, 2022)とは、最高レベルの画像用異常検知モデルで、Resnet50などのCNNの中間層を用いて、正常画像のみで異常・正常の二値判定を行う。発表されてから数年経つが、未だ SOTA 10位(2024/4/3時点)を誇る。Anomalibではこんな高性能モデルが非常に簡単に扱える。

Paper with Codeというソースコードが公開されているAIモデルのSOTA一覧サイト
PatchCore LargeがAUROC=99.6で、ランキング10位

PatchCoreを使用した学習・推論コード

import timm
from anomalib.data import MVTec
from anomalib.models import Patchcore
from anomalib.engine import Engine

if __name__ == '__main__':
    # Initialize the datamodule, model and engine
    datamodule = MVTec(category="bottle")
    model = Patchcore()
    engine = Engine()

    # Train and Test the model
    engine.fit(datamodule=datamodule, model=model, ckpt_path=None)
    engine.test(datamodule=datamodule, model=model, ckpt_path=None, verbose=True)

    # Assuming the datamodule, model and engine is initialized from the previous step,
    # a prediction via a checkpoint file can be performed as folows:
    predictions = engine.predict(datamodule=datamodule, model=model, ckpt_path=None, return_predictions=True)

以上。。。。簡単すぎ。
出力結果はresultsフォルダの中に保存される。

000.png

※MVTeC ADのデータが自動でダウンロードされない場合は、手動で下記フォルダに置く

datasets/MVTec

※[WinError 1314] クライアントは要求された特権を保有していません。
このエラーが出たら、Windowsの設定から開発者モードをオンにする

提供されているモデル

Anomalibで提供されているモデル

  • Classification Type:
    • DFKDE: Deep Learningで特徴量抽出を行い、その後PCAとKernel Density Estimationで異常分類をするモデル
    • GANomaly: 2018年に提案されたモデル
    • DFM: 2019年に提案されたモデル
  • Segmentation Type:
    • PaDiM: 2020年に提案されたモデル
    • anomalibのデフォルトモデル
    • STFPM: 2021年に提案されたモデル
    • PatchCore: 2021年に提案されたモデル
    • CFLOW-AD: 2021年に提案されたモデル
    • FastFlow: 2021年に提案されたモデル

使用しているデータセット

異常検知データセットは主に2つを用いている。

  • MVTec AD (CC BY-NC-SA 4.0): ボトルやケーブルなど15種類の5000枚のデータセット
  • BeanTech (CC-BY-SA): 3種類の異なる工業製品で、比較的新しい2830枚のデータセット

MVTec ADとは

MVTec AD(The MVTec anomaly detection dataset)とは、産業検査に重点を置いた異常検知手法のベンチマークのためのデータセットである。5000枚以上の高解像度画像が 15 の異なるオブジェクトとテクスチャのカテゴリに分類されている。

MCTec ADのデータセットの中身 (約5GB)

bottle: ボトル -- ground_truth -- broken_large -- ***.png 異常部を白、その他を黒にした大きく欠けた画像
                               -- broken_small -- ***.png 異常部を白、その他を黒にした小さく欠けた画像
                               -- contamination -- ***.png 異常部を白、その他を黒にしたコンタミがある画像
               -- test -- broken_large -- ***.png 大きく欠けた画像
                       -- broken_small -- ***.png 小さく欠けた画像
                       -- contamination -- ***.png コンタミがある画像
                       -- good -- ***.png 正常な画像
               -- train -- good -- ***.png 正常な画像
cable: ケーブル
capsule: カプセル
carpet: カーペット
grid: グリッド
hazelnut: ヘーゼルナッツ
leather: 革
metal_nut: 金属ナット
pill: 錠剤
screw: ネジ
tile: タイル
toothbrush: 歯ブラシ
transistor: トランジスタ
wood: 木材
zipper: ファスナー

今回のPatchCoreはMVTec ADで学習し、テスト画像で異常検出している。

まとめ

画像における異常検知用ライブラリAnomalibについて紹介した。
非常に簡単に画像の異常検知が学習・推論できるため、サクッと異常検知を実装したい場合はこれがおすすめ。

参考文献

各機能のリファレンスガイド

その他サンプルプログラムはこちら

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0