はじめに
画像に関する異常検知の論文を簡単に紹介します。解釈間違ってたらすいません。PatchCoreベースの手法ですので、PatchCoreを知らない人は先にそっちを読んだほうがいいかもです。
論文タイトル
FAPM: Fast Adaptive Patch Memory for Real-time Industrial Anomaly Detection
作者 Donghyeong Kim, Chaewon Park, Suhwan Cho, Sangyoun Lee, Yonsei University, Seoul, Korea Korea Institute of Science and Technology (KIST) 延世大学、韓国の有名大学
軽くPatchCoreの説明
学習時
①学習済みCNNモデルの中間層から特徴ベクトルを抽出
②コアセットサンプリングして冗長な特徴ベクトルを削除
③メモリバンクに保存
テスト時、メモリバンク内の特徴ベクトルとテストデータの特徴ベクトルの距離で異常かどうかを判定
提案手法
-
PatchCoreをより高速に推論できるように改良したFast Adaptive Patch Memory(FAPM)を提案する
-
パッチおよびレイヤーレベルでメモリバンクをつくり、不必要な繰り返し計算を削減する
-
パッチレベルの特徴ベクトルの分布に応じて、コアセットサンプリングの割合を変える
-
より高速で正確な検出のためのパッチ単位の適応的コアセットサンプリングを行う
パッチ単位のメモリバンク
-
産業の異常データセットは主に、整列した画像で構成されており、各クラスの同じ場所に類似した情報が存在する
-
この仮定に基づいて、FAPMは学習時にすべての画像の特徴ベクトルを単一のメモリバンクに保存するのではなく、各パッチの埋め込み特徴ベクトルを別々に保存する
-
PatchCore同様に事前学習済CNNモデルを使用して、正常画像の特徴ベクトルを抽出する
-
モデルの図だと4分割しているところを論文だと49分割にしてパッチごとに特徴ベクトルをメモリバンクに保存していく
レイヤー単位のメモリバンク
-
PatchCoreでは通常、CNNの中間層の特徴ベクトルを連結して、メモリバンクに保存している
-
中間層の出力Layer2とLayer3の連結は、より深い層の特徴ベクトルを不必要にアップサンプリングし、メモリバンクのベクトルサイズを増加させ、計算コストが高くなる
-
それに加えて連結することで次元数も増加する
→レイヤーごとにメモリバンクの構築
パッチごとの特徴ベクトル分布と適応的コアセットサンプリング
-
パッチごとにメモリバンクの特徴ベクトル分布が異なる
-
パッチごとの特徴ベクトルをK個のクラスターにわけて、各クラスターのサイズを計算する
-
各クラスターのサイズの最大値が閾値よりも大きいパッチに対してのみ、再度コアセットサンプリングを行い、分布が大きいパッチはより多くの特徴ベクトルを残すようにする(サンプリングレートを増やす??)
PatchCoreと提案手法の比較
-
正常な画像全体の結合された中間レベルの特徴ベクトルをN_v個を保存し、単一のメモリに保存する
-
テスト画像の中間レベルの特徴ベクトル数N_𝑡とメモリ内のサンプリングされたベクトルとのすべての距離を計算する
-
PatchCore 計算コスト:N_v×N_t
FAPM
-
パッチの数N_Pごとに計算を繰り返すが、ベクトルの数はテスト画像とメモリベクトルの両方でパッチの数によって減少し、計算コストを1/N_pにする
-
FAPM 計算コスト: N_p×N_V/N_p×N_t/N_p
結果
終わりに
シンプルで実用性高そう。ただScrewみたいな位置ずれが起きるデータにはパッチ単位で分けてメモリバンク作るより、最初からサンプリングレート下げたほうがリッチなメモリバンク作れそう。