学習済 EfficientNet を使った異常検知手法 論文のまとめ


（注意: 未完成です！後日追記予定です!）

# きっかけはとある1件のツイート

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">この論文の凄さは、「DNNは学習していない」ということ。学習済モデルを全面的に信用している。それでAUC95.80％は驚愕。<br><br>凄まじく早い（学習）ので、エッジなんかで威力を発揮しそう。<br>（続く） <a href="https://t.co/1u6BUQsJnt">https://t.co/1u6BUQsJnt</a></p>&mdash; shinmura0 @ 9/26鳥コンペ反省会 (@shinmura0) <a href="https://twitter.com/shinmura0/status/1305482981323108358?ref_src=twsrc%5Etfw">September 14, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

そんなことがあるのかと、思ったので元論文を探して読んでみて自分なりに解釈してみたという記事です。

元記事
[Modeling the Distribution of Normal Data in Pre-Trained Deep Features for Anomaly Detection](https://arxiv.org/abs/2005.14140)

ツイートの返信をみると、どうやら実装もあるらしい（pytorch）
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">学習済 EfficientNet を使った異常検知手法。MVtec-ADでAUC 95.08（SOTA上回る）を達成。<br><br>論文：<a href="https://t.co/6zfb9YFotE">https://t.co/6zfb9YFotE</a><br>実装：<a href="https://t.co/rIgdEZK6wa">https://t.co/rIgdEZK6wa</a></p>&mdash; shinmura0 @ 9/26鳥コンペ反省会 (@shinmura0) <a href="https://twitter.com/shinmura0/status/1297739973936914432?ref_src=twsrc%5Etfw">August 24, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

もし解釈とかに間違いがありましたら、ぜひぜひコメントや編集リクエスト投げていただけると喜びます。

# 3行まとめ

- EfficientNetを用いたモデルを異常検知に用いることでMVTecデータセットにおけるAUCスコアを95.8%前後達成(SoTAを上回る)
- hoge
- fuga

# 概要 - abstract
一般的な異常検知アルゴリズムはデータセットを元に1から学習しようとするが、異常ラベルに該当するデータが少ないことから半教師あり学習のような、不均衡データへのアプローチを行うことがほとんどである。

この論文ではEfficientNetで学習されたモデルへ多変量ガウスを当てはめ、マハラノビス距離を異常度合いを示すスコアとして異常検知したところ MVTec Anomaly Detection Dataset (MVTec AD) において全15クラスでAUC95.8%前後の数値を達成した。またPCAによる性能向上とモデルの複雑性の減少も達成しており、また性能と偽陽性率のバランスについても調査した。

# 導入 - introdcution

画像における異常検知では異常データにどのような規則性があるかを探すことを目的にしているが、そもそも異常データというものは一般的にデータとして少ないかつ、異常というデータに属するものは規則性がなく曖昧なものである。

本論文では大規模な画像データセットを元に学習したモデルが異常検知に適していることを検証するために、学習済みモデルのネットワークの特徴に対して多変量ガウスを当てはめる。そしてマハラノビス距離を異常度合いを示すスコアとして適用することで MVTec Anomaly Detection Dataset (MVTec AD) において全15クラスでAUC95.8%前後の数値を達成した。

さらにPCAによる主成分分析を用いることで、モデルの表現力がなぜ異常検知に有効なのかも調査した。その結果として、正常データの中で分散の少ない主成分が、正常と異常を分ける重要なポイントであることが分かった。
その分散の少ない主成分に対してのみ多変量ガウスを適合させることで、異常検知能力を向上させるかつモデルの複雑性を減らすことができる。

多変量ガウスを適用した上で、許容可能な偽陽性率（FPR)の基準も調査した。

# 関連研究 - related work

### 1. ゼロベースで学習した異常検知モデル

ゼロベースで学習する場合には近年オートエンコーダーによるアプローチが人気である。オートエンコーダーではデータの多数を占める正常データに対して学習を行い、正常データの特徴を低次元に圧縮している。そのため入力画像とオートエンコーダーを通して生成された出力画像を比較することで検出することができる。

ただしこれには欠点があり、

1. 画像の異常度合いを示すスコアを取得するには出力画像を比較する前に行う必要がある
2. そのためにデコーダに追加で計算オーバーヘッドが発生する

の2点がある。これを改善するためのネットワークとオートエンコーダーの誤差を組み合わせた手法もあるが、2と同様に複雑さが増える問題がある。

### 2. 転移学習を用いたディープラーニングモデルによる異常検知

半教師あり学習に比べると研究は進んでいないが、大規模なImageNetによって学習されたモデルによって正常と異常セグメントの分割と異常検知を同時に行う手法がある。

異常セグメンテーションをするために、学習したモデルで評価するデータの距離を計算させ、その距離をセグメントと比較することで検出するというもの。

(ここの解釈自信ないので、おそらくこの話だろうというリンクを載せておく)
[【まとめ】ディープラーニングを使った異常検知](https://qiita.com/shinmura0/items/06d81c72601c7578c6d3#2019年metric-learning距離学習による異常検知)

本論文はこの方法をベースとして性能の良い異常検知を行うシステムを作成する。

# 正常データに対する深層学習によるモデル化 - modeling normal data distribution in deep feature representations

学習済みモデルが異常検知タスクに適用できると仮定して、転移学習時のクラスが増えるのと同様に、正規データのみを用いてモデルを作成しモデルの微調整を省略する。

平均 $\mu$ と共分散 $\Sigma$を持つ多変量ガウス分布の元で、点と分布間の距離測定にマハラノビス距離を計算する。

多変量ガウス分布を仮定した場合、プロットされる点は確率に基づいて推定することができる。これはマハラノビス距離が正常なデータである確率 $p$ に対応する場合に真陰性率（TN)に一致するというもの。この時 1 - p が異常であるにもかかわらず正常と誤って予測された確率(FP)として見ることができる。

# 実験と結果 - experiments and results
まず事前に学習した分類機モデルの各レイヤーごとに抽出した特徴が異常検知に適していいるかを評価する。ここでは例としてResNetを用いる。レイヤーの最終層で特徴を抽出し、どのレイヤーの特徴が良いかを評価する。

![model_archtecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186010/68106ee9-bcbd-cb3a-20bf-7b25b4cfd8ad.png)



# 議論 - discussion
todo

# 結論 - conclusion
todo

# まとめと雑感
todo

# 参考記事
- [【まとめ】ディープラーニングを使った異常検知](https://qiita.com/shinmura0/items/06d81c72601c7578c6d3)
- [欠陥発見! MVTec異常検知データセットへの深層距離学習(Deep Metric Learning)応用](https://qiita.com/daisukelab/items/e0ff429bd58b2befbb1b)
- [深層距離学習(Deep Metric Learning)各手法の定量評価 (MNIST/CIFAR10・異常検知)](https://qiita.com/daisukelab/items/5f9ec189959eaf1ef211)
- [Few-Shot Class-Incremental Learning - cvpaper.challenge](http://xpaperchallenge.org/cv/survey/cvpr2020_summaries/176/)
    - class incremental learning の理解のため