Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

外観検査がこんなに簡単に!?Amazon Lookout for Visionで欠陥検出をやってみた

皆さんこんにちは
@tereka114です。

さて、今回は2020年の「AWS re:Invent」で紹介された「Amazon Lookout for Vision」を評価していきます。
※記事公開の2021年1月25日時点ではプレビューサービスであるため、GAとなった時には結果が変わる、適用できないTipsもありますが、ぜひお試しください。

Amazon Lookout for Vision

Amazon Lookout for Visionは画像が正常か異常を判定する、異常検知のサービスです。
2020年の「AWS re:Invent」で発表されており、注目されています。

aws.amazon.com

このサービスは最低30枚の画像を準備すれば良く、簡単に試行できることが最大のメリットです。
実際に試した際にもサービスの操作も簡単で非常に扱いやすいと感じました。

Amazon Lookout for Visionの検証方法

先程簡単に説明しましたが、Amazon Lookout for Visionは使いやすく、便利です。
ただ、精度がどの程度実用的なのか、利用する上で非常に重要です。
そこで、本記事ではその「Amazon Lookout for Vision」の精度や性能を評価します。

検証データセット

産業検査の異常検知の画像データセット「MVTec AD」を利用します。
特徴として15種類の製品と複数の異なる異常となるパタンが含まれています。

データセットは以下のサイトからダウンロードできます。
www.mvtec.com

本検証では、次の製品を利用します。

  • Pill
  • Metal Nut

それぞれのサンプル画像は次の通りです。各製品ごとに様々な異常な画像が含まれていることがわかります。

f:id:tereka:20210111205833p:plain

検証内容

MVTecADから特定の物品をサンプリングし、データを評価します。
以下の軸で検証します。評価指標は異常検知でよく用いられるPrecison/Recall/F1 Scoreを用います。
本記事では、細かい評価の式の説明はしませんが各評価指標の意味は次の通りです。

  • Precision・・・異常と予測したデータのうち、異常と判断したデータの割合、異常と予測したデータの中が実際に異常であれば、高くなります。
  • Recall・・・異常のデータから異常と判断したデータの割合、異常データを見逃していなければ、高くなります。
  • F1 Score・・・Precision/Recallの調和平均、どちらの指標も高くなければ、F1Scoreの値は高くなりません。

1. 学習データセットの数量の追加
推奨されている「1つのデータセットを作成する」方式では学習データを最低30枚(正常データ20枚、異常データ10枚)から指定できます。
その方式に追加で正常なデータを増加させた場合の精度の傾向を確認します。

f:id:acro-engineer:20210120003234p:plain:h360
一つのデータセットを作成する

2. 学習データセットに異常データを追加する。
「1つのデータセットを作成する」といった標準の設定では異常データは評価のみ使われます。
「トレーニングデータセットとテストデータセットを作成する」方式ではユーザが指定をすれば異常データを学習に取り込むことができます。
これによる精度への影響を検証します。

f:id:acro-engineer:20210120003310p:plain:h360
レーニングデータセットとテストデータセットを作成する

検証

学習データセットの数量の追加

まずは、学習データセットの正常データの数量の増加を行います。
条件は20枚、50枚、100枚とデータセットを変更します。
データセットで得られた結果は次のとおりです。

  • 正常な学習データをただ増加させても、F1 Scoreの増加が安定していません。正常データを追加するだけでは、単純には精度に貢献しなさそうです。
  • 学習データの数量を増加しても学習時間が線形に伸びていかず、ほぼ一定になっています。数量を増やす場合にも単純に学習時間が2倍、3倍とならないのが学習データを追加しやすい良い点の一つです。

・Pill

枚数 学習時間 Precision Recall F1 Score
20 37分44秒 67% 100% 80%
50 39分41秒 86% 60% 71%
100 42分08秒 89% 80% 84%

次の結果はPill(20)の予測結果です。
確信度が高いものについては、きちんと異常と正常の判定ができています。番号+拡張子が正常(007.png)、単語+番号+拡張子(例:faulty_imprint_017.png)が異常を示しています。

f:id:acro-engineer:20210120002955p:plain:h480
Pillの予測結果

・Metal Nut

枚数 学習時間 Precision Recall F1Score
20 38分30秒 81% 40% 50%
50 40分35秒 100% 80% 88%
100 36分31秒 75% 90% 81%

次の結果はMetal Nut(50)の予測結果です。
先程のPillと同様、確信度が高いものはきちんと判定できています。

f:id:acro-engineer:20210120003933p:plain:h480
Metal Nutの予測結果

学習データセットの異常データ追加

先程の検証では、学習データの中に異常データが含まれていないものでした。
しかし、学習データに異常データを含めると異常の判定精度がよくなり、結果、精度が向上することを期待しています。
ここでは、学習データの正常データ数を10枚に固定します。その上で異常データを10, 20, 30枚と変化させました。

結果は次の通りです。データを増やせば、F1 Scoreが増加します。
特にRecallが増加しており、異常なものを見逃したくない場合には積極的に追加するのが良さそうです。

・Pill

枚数 学習時間 Precision Recall F1Score
10 50分37秒 67% 40% 50%
20 47分21秒 78% 70% 74%
30 51分58秒 69% 90% 78%

・Metal Nut

枚数 学習時間 Precision Recall F1Score
10 47分05秒 100% 60% 75%
20 49分08秒 100% 80% 89%
30 48分55秒 100% 90% 96%

その他便利な機能

トライアル検出を用いた再学習機能

トライアル検出と呼ばれる機能により、お試しで画像の判定が可能です。
このトライアル検出の機能を用いて判定した画像に対するラベリングとデータセットへの追加を行えます。

この処理の後でモデルを再学習することで精度改善に役立てます。
特にトライアル検出で判定が誤った画像は今までで学習されていない画像のパタンである可能性が高いので、精度が向上しそうです。

この機能によりモデル運用時に判定に失敗したデータをいち早く取り込めるので、非常に便利そうだと感じています。

f:id:acro-engineer:20210124234729p:plain:h480
トライアル検出を使ったデータセットの画像追加

最後に

Amazon Lookout for Visionが想像以上に便利で驚きました!
データが少なくとも、精度は申し分ないといえそうです。
異常検知を気軽に試したいときには積極的に活用していきます。

Acroquest Technologyでは、キャリア採用を行っています。

  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

【データ分析】
Kaggle Masterと働きたい尖ったエンジニアWanted! - Acroquest Technology株式会社のデータサイエンティストの求人 - Wantedlywww.wantedly.com