【2022年最新AI論文】画像異常検知AIの世界最先端手法「PatchCore」の論文を解説【CVPR 2022】

本日(2022/6/19)からアメリカのニューオーリンズで開催されている[CVPR2022](https://cvpr2022.thecvf.com/)（2022/6/19-24）で、世界最先端の異常検知手法「[PatchCore](https://openaccess.thecvf.com/content/CVPR2022/papers/Roth_Towards_Total_Recall_in_Industrial_Anomaly_Detection_CVPR_2022_paper.pdf)」が発表されました！
CVPRはコンピュータビジョン分野のトップカンファレンスで、画像系AI研究の最難関の国際会議の一つです。ちなみに、[昨年（CVPR2021）の採択率は23％](https://github.com/hoya012/CVPR-2021-Paper-Statistics)。

[PatchCore](https://openaccess.thecvf.com/content/CVPR2022/papers/Roth_Towards_Total_Recall_in_Industrial_Anomaly_Detection_CVPR_2022_paper.pdf)は、外観検査（画像の異常検知）タスクで有名なデータセット「MVTecAD」でSOTA（State-of-the-Art）を達成しています。
この記事では、世界最先端の画像異常検知AIがどのような手法なのか、できるかぎり簡単にわかりやすく論文を解説したいと思います。

# 論文解説
## タイトル/著者
[Towards Total Recall in Industrial Anomaly Detection](https://openaccess.thecvf.com/content/CVPR2022/papers/Roth_Towards_Total_Recall_in_Industrial_Anomaly_Detection_CVPR_2022_paper.pdf)

Karsten Roth, Latha Pemula,Joaquin Zepeda, Bernhard Scholkopf, Thomas Brox, Peter Gehler


## Abstract

 - 外観検査において欠陥部品を自動で見つけることは、大規模な工業生産において非常に重要です。
 - 様々なパターンの欠陥部品の画像（異常画像）を収集することは難しいため、この手法は欠陥のない画像（正常画像）のみを学習に使用します。
 - 検査対象部品ごとに個別にソリューションを作り込むのではなく、多くの異なるタスクで汎用的に自動でモデルを上手く機能させることを目的としています。
 - 最高のパフォーマンスを発揮するアプローチは、ImageNetモデルからの埋め込みと外れ値検出モデルを組み合わせたものです。
 - この論文では、このアプローチを拡張し、正常画像のパッチ特徴量のメモリバンクを使用した手法「PatchCore」を提案します。 
 - MVTecADデータセットに対して、PatchCoreは異常検出AUROCスコアでSOTAを達成しました。
 - この手法のコード: [https://github.com/amazon-research/patchcore-inspection](https://github.com/amazon-research/patchcore-inspection)


![概要.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2535236/ae600955-6be8-f38d-77cd-690f26a85a10.png)
PatchCore手法の概要図（論文から引用）


## Method

PatchCore手法は、以下の３つで構成されています。
 - Locally aware patch features: メモリバンクに集約されたパッチ特徴量。
 - Coreset-reduced patch-feature memory bank: 効率化のためのコアセット削減方法。
 - Anomaly Detection with PatchCore: 検出と位置特定のためのアルゴリズム。

### 1. Locally aware patch features
 - 学習時に使うデータは正常画像のみです。
 - PatchCoreでは、ImageNetを学習させたResNet50などの学習済みモデルを使用して特徴量を抽出します。（深層学習モデルのトレーニングは実施しません。）
 - モデルの最終層の特徴量ではなく、中間層の局所的な特徴量を利用しています。
 - 具体的には、画像中の局所的な領域（パッチ）における隣接する２つのブロック（中間層）の特徴量のセットです。

### 2. Coreset-reduced patchfeature memory bank
 - 学習画像数が増えると、パッチ特徴量を記憶するメモリバンクのデータサイズと計算時間が非常に大きくなってしまいます。
 - この問題を回避するために、コアセットサンプリングメカニズムを使用して、パフォーマンスを維持しながらメモリバンクのサイズを削減します。
 - 具体的には、大量のパッチ特徴量の中から、より厳密にかつ迅速に近似できるパッチ特徴量を最近傍法により選択して、それ以外のパッチ特徴量を破棄します。

### 3. Anomaly Detection with PatchCore
 - テスト時にはテスト画像のパッチ特徴量を抽出し、メモリバンクのパッチ特徴量との最大距離スコアにより、画像全体の異常スコアを算出します。
 - セグメンテーションマップの場合は、各パッチ特徴量の異常スコアを画像中の元の位置に再調整することで、異常スコアのセグメンテーションマップを作成します。



# この手法のスゴイところ
私が、この手法のスゴイと思った点は下記の２つです。
 - 深層学習モデル自体のトレーニングが不要
 - 中間層の特徴量を利用することで、位置情報を保持

## 1. 深層学習モデル自体のトレーニングが不要
PatchCoreでは、学習済みの深層学習モデルをそのまま特徴量抽出器として利用しています。
そのため、モデルをトレーニングするための大量の学習データも時間も必要ありません。
個別にモデルを作らずに１つのモデルだけで汎用的に利用できるのは、実運用でも重宝する手法だと思います。

## 2. 中間層の特徴量を利用することで、位置情報を保持
分類タスクの深層学習モデルの最終層では画像全体の特徴量が出力されるため、異常箇所の位置情報が失われてしまいます。
しかし、PatchCoreでは最終層を使わずに、中間層の特徴量を細かいパッチに分割して利用することで、位置情報を保持しています。
それにより、ResNet50などの分類タスクの深層学習モデルを使用しているにもかからわず、異常領域のセグメンテーションマップの作成を実現しています。


# 所感

まだ論文を読んだだけなので、実際の外観検査の現場でのパフォーマンスはわかりませんが、非常に実用性の高そうな手法だという印象です。
機会があれば試してみて、他の手法と比較してみたいと思います。

# 異常検知AIのオススメ記事
私の下記の過去記事で、異常検知AIに関する内容を解説しておりますので、記事のリンクを掲載しておきます。
ぜひ、これらの記事も併せてご覧ください。

### 流行りのノーコード開発で異常検知AIを作成してみた記事

https://qiita.com/umapyoi/items/ddd45a47aa79ccbde28b

https://qiita.com/umapyoi/items/b5d3c823c0a9f30a5aa4

https://qiita.com/umapyoi/items/9e3998a7001cc0ed5e67

https://qiita.com/umapyoi/items/59a006cd8dbbdb8de7e4

### 最新手法を精度比較してみた記事

https://qiita.com/umapyoi/items/ec64142dd3c70e90a9dc


# CVPRの関連記事


https://qiita.com/umapyoi/items/c3f1df53144cd728d452


なお、この記事は「[Qiita Engineer Festa 2022](https://qiita.com/official-campaigns/engineer-festa/2022)」に参加しています！

＜2022/7/30追記＞「Qiita Engineer Festa 2022」で「[Qiita優秀賞](https://blog.qiita.com/qiitaengineerfesta-2022-presents/)」と「[Top Contributor賞](https://blog.qiita.com/qiitaengineerfesta-2022-presents/)」を受賞しました！
ありがとうございました！

https://blog.qiita.com/qiitaengineerfesta-2022-presents/