pix2pixの枠組みを利用した動画の異常検知

  • 異常検知の難しさ
    • 既存の異常データセットのサンプルサイズが小さいこと
    • 異常の定義がはっきりしていないこと

  • これらの課題に対して、正常なパターンのみ学習させた生成モデルで対処
    • 学習時には(集めやすい)正常データのみ用意
    • 正常データとの距離により異常を判定

  • 生成モデルとしてGANを利用
  • GANを使った異常検知としては, https://arxiv.org/abs/1703.05921 もあったが,こちらとは異なる利用方法をしている

動画内の正常パターンを学習

時刻tにおけるフレーム{F_{t}}とそのときのオプティカルフロー{O_{t}}をデータとし,
pix2pixと同じ枠組みのネットワークを構築し正常パターンを学習させる.

2つのネットワークを組み,以下の変換をそれぞれ学習させる

  • {G^{F \rightarrow O}} ({F_{t} \rightarrow O_{t}})
  • {G^{O \rightarrow F}} ({O_{t} \rightarrow F_{t}})

正常の場合のみのデータで学習させておけば、
異常データとして{F}{O}を入力したときには、変換が上手く行かないはず。

f:id:yusuke_ujitoko:20170907002839p:plain

上の画像がその例になっている。
上部では{G^{F \rightarrow O}}によって、車を含むフレーム {F} (異常パターン)からオプティカルフロー {O} を再構成しようとしているが、 車の部分のオプティカルフローがうまく再構成できていない。
下部では{G^{O \rightarrow F}}によって、車を含むオプティカルフロー{O}からフレーム{F}を再構成しようとしているが,こちらも変な塊ができてしまっている。

テスト動画の判定はどのように行うかというと,テスト動画の各フレームからオプティカルフローを計算し, フレームとオプティカルフローの組を作る.
そして,2つのネットワークでそれぞれ変換し,変換後のフレームとオプティカルフローと変換前の両者の差分から判定する.

具体的には,以下の2つを組み合わせて行う.

f:id:yusuke_ujitoko:20170907003343p:plain