初投稿です。
今年の2月頃に画像に対する異常検知の手法を発表しました。
その手法の宣伝のために記事を書いています。
もしこの記事を参考にする場合は論文を引用してください。よろしくお願いいたします
背景
教師あり学習には学習データにあるものしか予測できないという弱点があります。例えば学習データにリンゴしかない場合、モデルはあらゆるものをリンゴと予測してしまいます。この問題を解決するために、学習データにある既知のデータ(リンゴ)と、それ以外の未知のデータ(リンゴ以外)を分類する必要があります。関連研究
この問題はOne-class classificationと呼ばれており、通常の機械学習からDeep Learningまで幅広くアルゴリズムが提案されています。画像の場合、畳み込みによって特徴抽出ができるためDeep Learningが有効とされています。その中でも既知と未知のデータに共通のタスクを与えるSelf-Supervisionという考え方が流行しています。これは既知のデータを学習したモデルの誤差によって既知と未知を分類する考え方です。未知のデータは学習には利用されないため、既知のデータに比べてエラーが大きくなると仮定されています。つまり、エラーが小さければ既知、大きければ未知と考えることができます。タスク例:Auto-encoder
モデルとしてAuto-encoderを使った手法です。Auto-encoderは入力と出力を同じにしようとするネットワークです。入力と出力の比較によってモデルのエラーを求めます。
この手法は高速ですが精度が悪いという弱点があります。モデルが入力に応じて多様な出力を学習するため、既知と未知でエラーの差が出ないと考えられます。
タスク例:Classification
学習データ中の画像に対して何らかの形で追加の画像を生成し、生成方法をラベルとして与えます。
図の場合はリンゴを回転させて、回転した角度をラベルとして与えています。
できあがったモデルはリンゴの回転を予測できますが、バナナの回転を予測できません。
この考え方を使った論文として、「Deep Anomaly Detection Using Geometric Transformations」が有名です。
その論文では、各画像に対して72個の画像を生成して分類し、高精度な予測を行っています。
しかし、1つのテスト画像に対して72個の画像を追加で生成する必要があるため、処理が遅いです。
提案手法
高速で高精度な手法を考えた結果、辿り着いたのがすべての画像を同じ画像に変換することです。 Auto-encoderから出力の多様性を排除するという考え方によって高精度を実現しました。 また、テストデータにモデルを適用してエラーを求めるだけなので、高速な処理が可能です。 変換後の画像をGoal imageと呼び、何か適当な画像を与えます。図の場合はLennaを使っています。 まず学習データ(リンゴ)をLennaにする方法を学習します。できあがったモデルはあらゆる画像をLennaにしようとします。 学習データにあるのはリンゴだけなので、リンゴ→Lennaの変換はうまくいきますが、バナナ→Lennaはうまくいきません。 つまり、うまくLennaになれば既知(リンゴ)、Lennaにならなければ未知(リンゴ以外)と考えることができます。実験
図は実験に使用したGoal imageです。画像のEntropyを基に選択しました
実験の結果Goal imageによって、精度が大きく変化することがわかりました。
たとえば、Lennaを使ったときにMNISTのAUCが97.3、白い画像だとAUCが62.4といった感じです。
また、Lennaに変換したとき、MNISTとFashion MNISTでSOTAを達成し、CIFAR10に対しても3番目に良い結果でした。上位2つの手法に速度や実用性の面で問題があるためOCITNは有力な選択肢と考えられます。他の画像を使うとどうなるんだろう?というのが今後の課題です。
まとめ
画像を全部Lennaにして異常検知を行った話でした。 詳しくは以下の論文に書いてあります。よろしくお願いします。Toshitaka Hayashi, Hamido Fujita, Andres Hernandez-Matamoros, Less complexity one-class classification approach using construction error of convolutional image transformation network, Information Sciences, Volume 560, 2021, Pages 217-234, https://doi.org/10.1016/j.ins.2021.01.069