以前の記事「[入門者向け] Azure MLを使った異常検知AIの作り方」で紹介した「One Class – Support Vector Machine」モデルを使った異常検知を、今回は画像データで試してみたいと思います。
今回試してみる画像データは、「0〜9」までの手書きの画像データが入った「MNIST」データです。
学習用のデータとして手書きの「0」のデータを5,922個用意し、テストデータは「0〜9」までの手書きの画像データを30個用意します。
そして、「0」以外のデータを異常として検知するか確認してたいと思います。
Azure MLの実験キャンパスの全体はこんな感じです。
学習時間は30秒ほどで終わりました。
学習結果をCSVに変換して確認したところ、ちゃんと0以外の画像データを異常として検知してくれていることがわかります。
「Label」カラムが手書きの数字を表し、「Scored Label」が「0」の場合は異常なし、「1」の場合は異常ありを表しています。
ニューラルネットワークを使った画像データのクラス分類はよく知られていますが、ニューラルネットワークを用いた場合は学習データとして「異常あり」と「異常なし」の両方のデータを用意する必要があります。
ただ、実際に製品の傷や歪みを検知したい際に、正常なデータをたくさん集めることは可能でも、傷や歪みのある「異常あり」のデータをたくさん集めるのは難しいことが多々あります。
そういった場合は、ONEクラス サポートベクターマシンを使うと、「異常なし」のデータだけを学習させることで異常検知をすることができるので便利ですね。
今回は、数字の手書きの画像データなのでサポートベクターマシンだけで簡単に異常検知することができましたが、複雑な画像であればオートエンコーダーを利用してCNNとSVMを組み合わせることでできるかもしれません。
今度試してみたいと思います。