【画像異常検知】 Anomalib

翻訳:Anomalib を使用した画像ベースの異常検出の実践的なガイド

1 はじめに

工業生産では品質保証が非常に重要なテーマであるため、生産中に小さな欠陥を確実に検出する必要があります。産業用異常検出は、正常なサンプルから異常および欠陥状態を検出することを目的としています。産業用異常検出が直面する主な課題は次のとおりです。

  1. 異常サンプルを大量に採取するのは困難
  2. 正常サンプルと異常サンプルの差が小さい
  3. 例外の種類を事前に知ることはできません

これらの課題により、従来の分類アルゴリズムを使用してトレーニングすることが困難になり、それに対処するには特別な方法が必要になります。

2.関連作品

教師なし異常の検出および位置特定の方法は、識別方法と生成方法に分類できます。

2.1 判別方法

識別方法は、正常なサンプルと異常なサンプルの間の境界をモデル化しようとします。このタイプの方法では、最初に画像から埋め込み特徴を生成し、次に OK サンプルからの埋め込みを比較します。特徴の距離を異常スコアとして使用します。このタイプの方法では、より良い結果が得られますが、多くの場合、解釈可能性に欠けており、どの部分が異常の原因であるかを特定できないことがよくあります。たとえば、SPADEなどのメソッドを使用する場合。SPADE は、テスト時に KNN クラスタリングに埋め込みベクトルを使用します。これは、推論の複雑さがトレーニング セットのサイズに比例することを意味します。工業生産では推論速度が重要であるため、このような方法では有用性が減ります。

2.1.1 パディム

PaDiM が登場する前は、一部の判別手法ではディープ ニューラル ネットワークのトレーニングや大規模なデータセットに対する KNN の使用が必要であり、推論速度が大幅に低下していました。これはまた、実際の産業環境での応用を妨げます。Patch Distribution Modeling (PaDiM) は、この課題を解決することを目的としています。PaDiM は、特徴の埋め込みに ImageNet 分類で事前トレーニングされた CNN モデルを使用します。画像は独立したパッチに分割され、各パッチに対して特徴の埋め込みが実行されます。PaDiM は、事前トレーニングされた CNN のすべての層を使用します。これにより多くの冗長な情報が生成される可能性があるため、ここではランダムにサンプリングして埋め込みを選択します。興味深いことに、これは PCA と同様に、より高速でありながら次元削減のために機能します。PaDiM は、すべての埋め込まれた特徴が多次元ガウス分布に従うと仮定し、各パッチのサンプリング平均とサンプリング誤差パラメーターを推定します。最終結果は、各トレーニング セット画像パッチの多次元ガウス分布です。
ここに画像の説明を挿入します
推論段階の異常スコアは、テスト画像のパッチと学習されたパッチの間のマハラノビス距離に基づいて与えられます。最終的な異常スコアは、外れ値マップの最大値です。このアルゴリズムは、KNN アルゴリズムのトレーニング セットの増加によって引き起こされるアルゴリズムの複雑さの増加を回避します。

2.1.2 パッチコア

PaDiM と同様に、PatchCore は画像をパッチに分割します。PatchCore の考え方は、単一のパッチが異常であれば、画像全体が異常として分類されるということです。PatchCore も PaDiM が直面しているのと同じ調整に対処しており、その目標は次の 3 つの点に要約されています。

  1. テスト中の通常の情報の取得を最大限に高めます。PaDiM は、マハラノビス距離検出によるパッチレベルの異常検出に限定されています。PatchCore では、トレーニング フェーズ中に抽出された機能がメモリ バンクに保存され、テスト中に同様にアクセスできます。
  2. ImageNet 分類タスクからの逸脱を減らします。PaDiM と同様に、ImageNet 上の事前トレーニングされたモデルも使用します。異常検出タスクと分類タスクの間の偏差を減らすために、低レベルの特徴として使用される中間レベルの特徴はより一般的であり、高レベルの特徴は ImageNet 分類タスクに向けてより偏っています。
  3. 高い推論効率を維持するために、PatchCore はコアセット サブサンプリングを導入しています。これは、サイズを大幅に削減しながらソース データ セットの構造を近似します。

トレーニング フェーズでは、事前トレーニングされた CNN を使用して特徴の埋め込みが抽出され、corest を使用してサンプリングされ、メモリ バンクに保存されます。テスト段階ではメモリ バンクで最近傍検索が使用され、ネットワーク構造は次のとおりです。
ここに画像の説明を挿入します

2.2 クラスメソッドの生成

生成手法では、新しい画像を生成するなど、サンプルから各カテゴリの真の分布をモデル化しようとします。この種の方法は、訓練セットには異常なパターンが存在しないため、異常なパターンは生成されにくいという考えに基づいています。オートエンコーダベースの方法では、自動エンコーダ/デコーダ マシンからの入力と出力の違いから異常領域の検出を検出しようとします。再構成誤差が大きい領域は、異常な領域を特定します。GAN ベースの手法では、正のサンプルのみが生成できることを前提としています。風景などの生成手法はより直観的で解釈しやすいですが、一部の異常な特徴もうまく再構築できるため、そのパフォーマンスは制限されています。

2.2.1 CFlow-AD

ここまで、判別法について説明してきました。CFlow-ADは生成メソッドのクラスです。
CFLow-AD は、条件付き正規化フロー ネットワークに基づいています。
ここに画像の説明を挿入します

3. 性能テスト

3.1 アノマリブ

Anomalib は、上記のアルゴリズムの実装を含むオープンソースの異常検出 Python ライブラリです。Anomalib には一連の異常検出アルゴリズムが含まれており、このライブラリは、これらの異常検出の特定のニーズに合わせて、カスタマイズされたネットワーク設計、実験追跡、可視化、ハイパーパラメータの最適化を提供するように設計されています。

3.2 データセット

工業生産に関連する異常検出データセットはMVTec データセットで、これには 5k の高解像度画像が含まれており、10 の異なるオブジェクトと種のテクスチャ タイプに分割されています。各クラスには、欠陥のないトレーニング セットとさまざまな欠陥のあるテスト セットが含まれています。

3.3 評価指標

評価指標は主にAUROCを使用

3.4 Anomalib のインストール

公式のインストールプロセスでは問題が発生する可能性があります。踏んだ落とし穴をまとめる

  • RuntimeError: CUDA error: no kernel image is available for run on the device.
    このエラーは、公式の setup.py によって提供される pytorch のインストールに問題があることが原因です。pytorch を再インストールしてください:
pip uninstall -y torch torchvision torchtext
pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu116

関連リンク: https://github.com/openvinotoolkit/anomalib/issues/792
再インストール後に anomalib ライブラリが見つからないというメッセージが表示された場合は、./requirements/base.txt の内容をコメントアウトして、再度実行します。

pip install -e .

おすすめ

転載: blog.csdn.net/qq_30340349/article/details/128675044