【ICIP】GANを用いた動画像異常検知手法：ABNORMAL EVENT DETECTION IN VIDEOS USING GENERATIVE ADVERSARIAL NETSを読む

#概要

皆様，いかがお過ごしでしょうか．
季節も秋へと変わり，朝晩は冷えるようになってきましたね．
くれぐれもご自愛ください．

さて，今回は，動画像の異常検知手法として有名なICLRの"best paper"，
ABNORMAL EVENT DETECTION IN VIDEOS USING GENERATIVE ADVERSARIAL NETS
を解説したいと思います．

arXivは以下から．
[https://arxiv.org/abs/1708.09644](https://arxiv.org/abs/1708.09644)
Authors： Mahdyar Ravanbakhsh, Moin Nabi, Enver Sangineto, Lucio Marcenaro, Carlo Regazzoni, Nicu Sebe


この論文は，GANを用いた動画像異常検知手法として非常に有名なもので，現在においてもベンチマークとして広く用いられている手法です．
しかし，日本語での解説記事に乏しく，実装もないので，今回改めて詳細な解説と，PyTorchでの実装にトライしてみる次第です．実装に関しては新めてQiitaの記事としてまとめたいと思いますので，しばらくお待ちください．

ご指摘・疑問などございましたらコメントなどよろしくお願いいたします．

# Abstract（忙しい方へ）
本論文では，混雑したシーンにおける異常検知問題を扱う．シーンの正常性の内部表現を学習するために，正常フレーム(Appearance)とそれに対応するオプティカルフロー画像(Motion)を用いて学習するGANを用いることを提案．

すごい点：
・UCSDをはじめとする著名なデータセットでSoTA
・教師なしだが，pixel-levelの異常検知性能もある程度でている
・きわめてシンプルな手法でわかりやすいうえ，相当な精度が出ている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583727/9c59df81-be93-b2fd-4837-9e7f7a694cdd.png)


図を見るとわかるが，本手法では二つのGeneratorが存在する．一つはframe画像からoptical flowに変換するもので，もう一つはその逆である．これら二つのGeneratorはそれぞれpix2pixの枠組みで学習される．

なお，このGANは正常なデータのみを用いて学習されるため（教師なし学習），異常なデータの再現はできない．テスト時には，実データとGANによって再構成されたAppearanceおよびMotionを比較し，差分を計算して異常検知する．

# Learning the normal crowd behaviour

学習フェーズの説明となる．

前述の通り，二つのGeneratorを学習する．一つはoptical flowからframeを推定するものであり，もう一つはその逆である．
（この学習は基本的にpix2pixと同じである．）
その損失は以下のように差のL1ノルムで定義される．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583727/6a14b9cf-2959-0bb3-9fe3-6dddd165e8dd.png)
一方で，敵対的損失は以下の通りであり，Generatorの入力で条件付けられたものになっている．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583727/87fbd3b4-15a4-eb64-a898-45fb5926b4d7.png)

残念ながら当該論文で用いたモデルの詳細，パラメータについては述べられていない．

# Abnormality detection
推論フェーズの説明となる．

推論時には学習で用いたDiscriminatorは無視して，Generatorのみを用いる．
まず，optical flowを予測するモデルからの推定結果（p_o）と真値(O)との差（o-p_o）を求める．これはmotion特徴の差分マップとなる．

さらに，frameを予測するモデルからの推定結果（p_f）と真値（F）との差を求めたいのだが，筆者らはNaiveに差分をとると意味ある情報が少ないことを経験則的に感じているとのことで，Alex-netの学習済みモデルの中間表現（畳み込み第五層）を用いることを提案している．

注：Alex-netは物体認識タスクのモデルであり，事前に学習されたものである．この表現を用いるのは，単純な差分よりも抽象的で意味的な情報を獲得できると筆者らが考えているからである．
なので，最終的に求められるappearance特徴の差分マップは，推定結果（p_f）と真値（F）をそれぞれAlex-netに入力して得られる中間表現h(p_f)とh(F)との差（h(p_f)-h(F)）となる．

そしてそれぞれは以下の二つの式で正規化される．
ここで，それぞれのmは，差分マップの要素の最大値（全テストフレームに対する）である．
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583727/7bd724a4-488c-5642-5cfe-89cb812c346f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583727/13ad09d7-957d-24c8-ea95-3bbc3a7bc842.png)

最終的な差分マップは以下のように定義されます．ここで，λ＝2が用いられているそうです．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583727/32957aa5-07fd-1f44-ce34-51d266ffb578.png)


# Experimental results
UCSDデータセット，UMNデータセットの2つに対して定量的評価を行う．
（UMNに関してはやりつくされている感があるので，ここでは取り上げない）
UCSDはped1,2と二つの種類がある．特に前者はpixel-levelでの評価が可能となっている(ground truthがある)．
そのため，UCSDped1はframe-level,pixel-level，UCSDped2,UMNはframe-levelのみでのAUROC評価をする．
AUROC（AUC）とは，ROC曲線のなす面積であり．100%に近づくほど異常検知の性能がよいことを表す．
以下の表はUCSDに対する結果である．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583727/fd2e483c-f1bb-c622-f461-ac1cb0961107.png)

また，差分マップのヒートマップ画像などは以下のようになっている．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/583727/d409a9c9-2820-6c96-8020-6a444fc77a25.png)

しかし，上に示す画像の最下段は失敗例．スケートボードに乗った人間を「異常」と検出する必要があるが，
この手法では対象があまりに小さいため，見逃し（miss）が発生していると指摘．

# Conclusions
GANを用いたpix2pixの枠組みでの異常検知手法を提案した．今後の展望として，Dynamic imageなどの長時間の動きをモデル化できる圧縮技術の応用などが検討されているようである．


# 実装について
近々，[github](https://github.com/satolab12)とqiitaに実装編を投稿しようと思いますので，しばらくお待ちください．
最後までご覧いただき，ありがとうございました．