LoginSignup
16
19

More than 5 years have passed since last update.

論文まとめ:GANomaly: Semi-Supervised Anomaly Detection via Adversarial Training

Last updated at Posted at 2019-02-27

はじめに

GAN を用いた異常検知系の以下の論文
[1] S. Akcay, et. al."GANomaly: Semi-Supervised Anomaly Detection via Adversarial Training"
のまとめ

ACCV 2018で発表された。
http://accv2018.net/wp-content/uploads/pocketprogramweb.pdf

arXiv:
https://arxiv.org/abs/1805.06725

著者らの GitHub コード:
https://github.com/samet-akcay/ganomaly
PyTorch 使ってます。

概要

  • 画像から異常検知するモデル
  • GAN と auto-encoder を組み合わせたようなアーキテクチャ
  • 既存の手法を上回る性能

このモデルを使った異常検出の一例は以下。

ganomaly_img_01.png

X 線を使ってバッグの中に危険物がないか判定する。左3列は正常データ(危険物なし)。この正常データでtrainingする。

右2列は推論時のもの。赤の矩形内に危険物があるが、これらを検出できている。

アーキテクチャ

アーキテクチャの概要

アーキテクチャの概要は以下。

ganomaly_img_02.png

左の方は auto-encoder のような構造。その右側にさらに encoder が存在する。

右下は discriminator。

アーキテクチャの詳細

まず左から元画像 $x$ を入力し、encoder して latent space の $z$ となる。

$z$ を decode して再構築画像 $\hat{x}$ となる。再構築画像 $\hat{x}$ をさらに別に用意した encoder に入力し、$\hat{z}$ を得る。

discriminator には元画像 $x$ と再構築画像 $\hat{x}$ を入力し、discriminatorはそれが real(つまり元画像)か fake (つまり再構築画像)かを識別する。

他のモデルとの比較

以下は AnoGAN、Efficient-GAN(EGBADと呼ぶ説もあり)との比較図。

ganomaly_img_04.png

左 A のAnoGANのアーキテクチャはDCGANなどのベーシックなGAN構造をしてる。

中央 B の Efficient-GAN は encoderが加わり、encoder と generator を同時に学習させる。discriminatorには1)real画像 $x$ とそのencodeした $\hat{z}$ のペア、2)$z$ とそれをgeneratorにかけて生成した画像 $\hat{x}$ とのペア、を入力し、それらを区別するよう学習する。

右 C の本モデルは更に encoder が加わっているが、discriminator に入力するのは画像と再構築画像のみ。

目的関数

トータルのロス

トータルのロスは3種類からなる。

\mathcal{L} = w_{adv} \mathcal{L}_{adv} + w_{con} \mathcal{L}_{con} + w_{enc} \mathcal{L}_{enc} 

$\mathcal{L}_{adv}$ : adversarial loss。

$\mathcal{L}_{con}$ : contextual loss。

$\mathcal{L}_{enc}$ : encoder loss。

adversarial loss

generator はvanilaなGAN のロスではなく、[4]のfeature matching を用いる。つまりdiscriminatorからの中間層の差から求める。discriminatorは?

contexual loss

adversarialなlossによりrealな画像が再構築されるようになるが、それが元画像っぽい保証はない。そこで元画像っぽいものを再構築するよう、両者でL1をとる。

\mathcal{L}_{con} = \mathbb{E}_{x \sim pX} \| x - G(x) \|_1

encoder loss

推論時に latent 同士で比較するため、generator の encoder からの出力 $G_E(x)$ と、再構築した画像をさらにもう1つのencoderに入れた時の出力 $E(G(x))$ との L2 をとる。

\mathcal{L}_{enc} = \mathbb{E}_{x \sim pX} \| G_E(x) - E(G(x)) \|_2

正常・異常の判定法

こうして学習したモデルにある推論用データ $\hat{x}$ を入力した場合、まず generatorのencoderでlatentに次元削減されるが、そのベクトル $G_E(\hat{x})$ は正常データなら学習データの分布を満たす値、異常データなら分布から外れるような値となる。

その $G_E(\hat{x})$ を generator の decoderに入力し、出てきた再構築画像 $G_D(G_E(\hat{x})) = G(\hat{x})$ は、正常画像ならかなり正確に再現するが、異常画像の場合は異常な部分が再現されず、正常画像っぽいものに変化する。

再構築画像 $G(\hat{x})$ を更にもう1つの encoder に入力すると、いずれも正常データの latentの分布に従うものとなる。

よって、以下のように

\mathcal{A}(\hat{x}) = \| G_E ( \hat{x} ) - E (G( \hat{x})) \|_1

$G_E ( \hat{x} )$ と $E (G( \hat{x}))$ との差をとると、正常値は小さくなり、異常値は大きくなるだろう。

実験と結果

MNISTデータ

CIFAR10データ

UBAデータ

FFOBデータ

書きかけ

reference

[2] AnoGAN: T. Schlegl, et. al."Unsupervised Anomaly Detection with Generative Adversarial Networks to Guide Marker Discovery" IPMI 2017

[3] EGBAD:H. Zenati, et. al. "EFFICIENT GAN-BASED ANOMALY DETECTION"

[4] T. Salimans, et. al, "Improved techniques for training gans." NIPs 2016

16
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
19