Anomalibとは
Anomalibは、画像向けの異常検知ライブラリであり、Intel が提供する OpenVINOツールキット の一部である。最先端の異常検知アルゴリズムを提供し、非常に簡単に画像の異常検知AIが実装できる。この最新版のPython SDKがつい最近 (2024/3/28) に公開されたので、画像における異常検知の学習・推論方法を紹介する。
推論結果 (Patch Coreモデル)
真ん中のヒートマップが異常検出の結果。赤いところが異常個所。かなり正確。
ビン底の異常検出。右下にざらざらした欠陥があり、きれいに検出されている。
トランジスタの異常検出。左下の端子が曲がっており、正確に検出できている。
歯ブラシの異常検出。左部にバラけたブラシがあり、これも正確に検出できている。
インストール方法
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フォルダの中に保存される。
※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について紹介した。
非常に簡単に画像の異常検知が学習・推論できるため、サクッと異常検知を実装したい場合はこれがおすすめ。
参考文献
各機能のリファレンスガイド
その他サンプルプログラムはこちら