タクトピクセル開発者ブログ

印刷・コンテンツ業界向けSaaS製品を開発・運営するタクトピクセル(株)の開発者ブログ

Amazon Lookout for Visionを用いた異常検知

概要

前回の記事に引き続き、AWSの機械学習系のサービスの製造業向けデモです。

機械学習というと「学習」という言葉で示されるように、学習のためのアルゴリズムやノウハウが注目されがちですが、データの準備段階や、それを評価する作業にとても時間がかかります。それらの負担を軽減してくれるのが、SageMakerやLookout for Visionということで、弊社でも積極的に活用を進めています。

Lookout for Visionとは

AWSが提供している、品質管理に特化した機械学習サービスです。機械学習モデルをノーコードで簡単に作成することができ、またそのモデルを用いることで画像から異常を検出することができるようになります。最低30枚という非常に少ない枚数の画像から学習を始めることができることが特徴としてあげられます。

今回はLookout for Visionを用いて機械学習モデルを作成し、異常検出を行います。

使用する画像

今回使用する画像は以下のリンクからクローンした基盤の画像です。

github.com

テスト用、トレーニング用、検証用にフォルダがわかれていますが、今回は学習のための枚数確保のためにテスト用、トレーニング用の画像を用います。

また、具体的な異常の種別ごとにアノテーションをする際、データを増幅するために異常を持った画像に回転処理を加えて枚数を増やしました。

データセットの作成

Projectsから「プロジェクトを作成」を押し、プロジェクト名を入力して「作成」を押します。

データセットを作成します。


データセット設定は「1つのデータセットを作成する」を選択しました。


イメージソース設定は「コンピュータからイメージをアップロードする」を選択しました。

「データセットを作成」を押すとデータセットが作成されます。

画像のインポート・ラベル付け

「アクション」から「トレーニングデータセットにイメージを追加します」を選択すると、ウィンドウが開かれ、画像をインポートすることができます。
一度に30枚が上限となっています。

正常な画像をインポートしました。「ラベルを追加」を押すとラベルを選択できるようになるため、「normal」を押していきます。

「正常」のラベル付けが完了しました。

続いて、異常のある画像をインポートします。
さきほどと同様に「アクション」から「トレーニングデータセットにイメージを追加します」を選択し、画像をインポートしていきます。

異常のある画像にも「Anomaly」のラベル付けを行います。

これで正常、異常のラベル付けが完了しました。

領域のアノテーション

この状態からトレーニングを始めても良いのですが、異常のラベルには、異常がある画像上の領域に印をつける作業(アノテーション)をすることができます。単に、画像全体のどこかに異常箇所が含まれていることを示すよりも、より具体的な情報を追加することができます。

「ラベルを追加」を選択し、Anomalyな画像をクリックするとアノテーション用の画面が表示されます。

「Add anomaly labels」から異常の種別を追加することができます。


今回は「solder」と入力し、ラベルを追加します。(solderは英語で「はんだ」を意味します。)

ラベルが追加されたら異常がみられる箇所を塗っていきます。
一番左の囲うボタンが便利です。


塗り終えたら「Submit and close」を押すとアノテーションが保持されます。

同様にしてほかの異常についてもラベルを追加し、色を塗っていきます。

 

各異常に対して20枚の画像が必要となります。

枚数が少ない場合はモデルを作成しようとした際にエラーが発生します。

モデルの作成

アノテーションが終わったら、「モデルをトレーニング」を押します。

トレーニングが始まりました。

トレーニングが完了し、モデルが作成されました。1時間7分のトレーニング時間でした。

テスト結果も表示されます。

異常が検出されたデータにはマーキングされているものもあります。

 

推論・検出

作成したモデルを使って異常検出を行います。

「トライアル検出を実行」を押し、タスク名、モデル、インポート方法を選択し、画面下部の「異常を検出」を押します。

「画像をアップロード」を押すと推論が行われます。

推論が完了しました。各画像についての検出結果を表示することができます。

おわりに

Lookout for Visionは直感的な操作で、また非常に少ない枚数の画像を用いて高い精度の検証を行うことができました。

シンプルな異常検出であれば非常に使いやすいサービスであると感じました。

プログラミングやコーディングを行う必要はないので、非プログラマーの方でも手軽に使用することができます。費用対効果が求められる場面ではいい選択肢になるのではないでしょうか。

異常の検出精度については、正常と異常を判別する精度は非常に高いのですが、今回はデータが少なかったので、具体的な異常領域についての推論精度には課題を感じました。


アノテーションの方法や、検出を用いた検証など、より工夫をすることで精度を高めていくことができるようです。今後も使っていきたいと思います。