2022年7月1日

外観検査向け異常検知手法に関する論文紹介: PatchCore

Deep LearningAnomaly DetectionPatchCore

cover

LeapMindの花元です。

異常検知、してますか?

学習済み深層学習モデルと近傍法を使って外観検査向け異常検知をしたくなること、長い人生で、たまにはありますよね。今日は外観検査向け異常検知の手法であり、CVPR 2022に採択されているPatchCoreのアルゴリズムを紹介したいと思います。PatchCoreの概要については前回の記事を参照してください。

アルゴリズム

PatchCoreは

  • 位置情報を保持した画像パッチの特徴抽出 (Locally aware patch features)
  • 貪欲法を用いた、近傍法に用いる画像パッチの特徴数削減 (Coreset-reduced patch-feature memory bank)
  • 近傍法を用いた異常検知 (Anomaly Detection with PatchCore)

の3点から構成されます。これらを順に説明していきます。

位置情報を保持した画像パッチの特徴抽出 (Locally aware patch features)

本手法では、まずはじめに、正常画像のみから構成されるトレーニングデータセットから、位置情報を保持した画像パッチの特徴抽出を行います。特徴抽出では、あらかじめImageNetを用いて学習したBackbone (ResNet)に正常画像を入力します。その後、中間層の出力(ResNetを用いる場合、4つあるブロックのうち、2つ目のブロックと3つ目のブロックの出力)を取り出し、Average Poolingを用いて、それぞれの出力の縦横の大きさを揃えます。最後に、それらをチャネル方向に結合することで、1枚の正常画像から、(画像の縦の分割数)×(画像の横の分割数)分の特徴ベクトルを作ります。図1に、画像のパッチに対応する特徴ベクトルのイメージを示しています。

Overview

図1: 正常画像からの特徴抽出のイメージ

学習済みモデルを用いて入力画像の特徴を抽出するという手法は、外観検査向け異常検知手法でよく見られる手法ですが、本手法は①位置情報を保持する、②複数のレイヤーの出力を、チャネル方向に連結する、③浅い層と深い層の出力は用いない、の3点において特徴的です。

①位置情報を保持するについて、同じく学習済みモデルを用いた異常検知手法であるSPADEMahalanobisADでは、Global Average Poolingを用いて、得られた特徴を1つの特徴ベクトルにします。Global Average Poolingを用いることで、その後の処理で扱わなければならない特徴ベクトルの数を減らし、処理時間を減らせるというメリットがある一方で、局所的な異常(小さな傷など)に関する特徴が潰れてしまう、画像のどこに異常が存在するのかの判定ができなくなる、といったデメリットも発生します。本手法では、Average Poolingを用いる一方で、(画像の縦の分割数)×(画像の横の分割数)分の特徴ベクトルを保持することで、局所的な異常を見つけやすくする、画像のどこに異常が存在するのかを判定できるようにする、ということを図っています。

②複数のレイヤーの出力を、チャネル方向に連結するについて、例えばMahalanobisADでは、得られた特徴ベクトルをレイヤーごとに分けてその後の処理を行います。これによりその後の計算量が削減される一方で、複数のレイヤーから抽出された特徴同士の関係性を踏まえた異常検知ができなくなるというデメリットも発生します。本手法では得られた特徴をチャネル方向に連結することで、特徴同士の関係性を踏まえた異常検知ができるようにすることを図っています。

③浅い層と深い層の出力は用いないについて、例えばSPADEでは最後の畳み込み層の出力を、PaDiMでは最初から3つの畳み込み層の出力を特徴として用いますが、本手法では浅い層と深い層の出力は用いません。これは、浅い層の出力から得られる特徴は異常検知タスクに用いるには一般的な特徴過ぎる、反対に深い層の出力はImageNetの分類タスクを解くためのbiasがかかりすぎていて異常検知タスクに用いるには不適切であると考えられるからです。

貪欲法を用いた、近傍法に用いる画像パッチの特徴数削減 (Coreset-reduced patch-feature memory bank)

画像から特徴ベクトルを抽出した後は、異常検知手法として一般的な近傍法を適用します。異常検知手法として、他にはMahalanobisADPaDiMで用いられているような、マハラノビス距離と呼ばれる、トレーニングデータセットの平均と共分散を基に算出する距離を用いる手法があります。しかし、これらの手法は得られた特徴ベクトルの分布が多変量正規分布に従うことが仮定されているため、図2のように、特徴ベクトルの分布が多変量正規分布に従わない場合に性能が落ちることがあると考えられます。近傍法は、このような仮定を必要としないため、より幅広い対象に対して手法を適用可能であると考えられます。

Mahalanobis

図2: マハラノビス距離を用いた際に性能が落ちる例。灰色の点がトレーニングデータセットに含まれる特徴ベクトルの分布、青色の点が推論時に得られた特徴ベクトル、星をトレーニングデータセットに含まれる特徴ベクトルの平均とすると、青色の点はトレーニングデータセットに含まれる特徴ベクトルのクラスタから外れているが、全体の平均には近いため、トレーニングデータセットとの距離が近い(=正常である)と判定されてしまう。近傍法を適用した場合にはこの問題は発生しない。

一方で、単純に近傍法を適用すると、(特徴ベクトルの平均と共分散のみを保持すれば良いマハラノビス距離を用いた手法と異なり)推論時にトレーニングデータセットに含まれる特徴ベクトルを全て保持しなければならず、時間的、空間的な計算量の増加が無視できなくなります。特に、本手法では特徴ベクトルの抽出にあたってGlobal Average Poolingを用いないことで、1枚トレーニングデータを増やすごとに(画像の縦の分割数)×(画像の横の分割数)分という大量の特徴ベクトルが増えてしまうことから、このデメリットがより大きくなります。このままでも近傍法を適用するのが非現実的というわけではありませんが、実用上の速度の問題があるため、得られた特徴ベクトルの集合から、異常検出性能の低減を抑えつつ速度を向上させるような部分集合を得るためのアルゴリズムが提案されています。

ここで、近傍法を適用した際に、特徴ベクトルを"間引いた"後も計算結果に大きな差異が生じないように、MMをもとの特徴ベクトルの集合、McM_cを間引いた特徴ベクトルの集合としたときに、式1によりMcM_cを求めるのが良さそうです(間引かれた特徴ベクトルと残された特徴ベクトルの中の最小距離の最大値ができるだけ小さくなるようにする)。ただし、これを求めるのはNP-Hardであるため、貪欲法により近似解を求める手法が提案されており、また、それがランダムサンプリングのような別の手法と比較して有効であることが実験的に示されています。

Eq1 (1)(論文より引用)

Algorithm1

図3: 貪欲法によるアルゴリズムのイメージ。灰色の点がMMに含まれる特徴ベクトル、オレンジ色の点がMcM_cに含まれる特徴ベクトルを示す。

図3に貪欲法によるアルゴリズムのイメージを示します。アルゴリズムは非常にシンプルです。まず、特徴ベクトルの中の任意の1点を選び、McM_cに加えます(図2-①)。次に、その特徴ベクトルから最も遠い特徴ベクトルを選び、McM_cに加えます(図2-②)。その後、McM_cに含まれる特徴ベクトルとの距離のうち、最も短い距離が最も遠い特徴ベクトルを選び、McM_cに加えます(図2-③)。最後に、③をMcM_cに含めたい特徴ベクトルの数を満たすまで繰り返します(図2-④)。

なお、このアルゴリズムを適用するにあたっては、Random Projectionを適用することでチャネル方向の次元数の削減も行っています。

近傍法を用いた異常検知 (Anomaly Detection with PatchCore)

上記のプロセスにより、トレーニングが終わり、トレーニングデータセットから得られた特徴ベクトル群の部分集合であるMcM_cが得られます。推論時には、異常/正常を判定したい画像を入力として、トレーニング時と同様に画像パッチの特徴抽出を行います。得られたそれぞれの特徴ベクトルについて、McM_cに含まれる特徴ベクトルとの距離の最小値を求め、その最大値を異常スコアのベースとします。このスコアをs\*s^\*mtest,\*m^{test, \*}を入力画像で最も異常スコアのベースが高かったパッチの特徴ベクトル、m\*m^\*をそれに対応するMcM_cに含まれる特徴ベクトルとしたときに、m\*m^\*の近傍にあるMcM_cの特徴ベクトルをbb個抽出し、以下の式により最終的な異常スコアを算出します。直感的には、m\*m^\*の近くに他の特徴ベクトルが存在しない場合(=トレーニングデータセットの中でも珍しい特徴である)に最終的な異常スコアを相対的に大きくする効果があり、論文ではこの計算により異常検出のロバスト性が高まると主張されています。

Eq2 (2)(論文より引用)

まとめ

この記事では、学習済み深層学習モデルを用いた外観検査向け異常検知手法であるPatchCoreを紹介しました。この手法では、位置情報を保持した画像パッチの特徴抽出をする一方で、貪欲法を用いた、近傍法に用いる特徴数の削減を行うことで、異常検知に要する時間の増大を抑えつつ異常検知の精度を高めることを図っています。

ところで、LeapMindでは異常検知モデルだったり、異常検知とは全く関係ないモデルだったりを開発する機械学習エンジニアを絶賛募集中です!興味のある方は以下からぜひご応募ください!

https://leapmind.io/careers/