LoginSignup
1
2

More than 1 year has passed since last update.

Amazon Lookout for Vision で画像の異常検出をやってみた

Posted at

はじめに

Amazon Lookout for Vision は、画像の異常を発見する機械学習 (ML) サービスで、製造業の企業が大規模に欠陥を検出することができます。最低限、正常な画像が 20 枚、異常な画像が 10 枚で使い始められます。画像のアップロードや、正常・異常のラベル付けなど、AWS の GUI から操作が出来るため、難しい機械学習の知識が不要で始められます。

Amazon Lookout for Vision を使って、正常・異常を推論する方法を紹介します。

S3 Bucket の準備

適当に、Lookout for Vision 用のバケットを作成します。

  • バージョニングを有効にする。
  • S3バケットの下に、trainとtestのフォルダを作成します。
  • trainフォルダの下に、「normal」と 「anomaly」の2つのフォルダを作成します。
  • testフォルダの下に、「normal」と 「anomaly」という2つのフォルダを作成します。

image-20230219161741751.png

AWS が公開しているサンプル画像を S3 にアップロードしていきます。まず、Git から Clone します。

git clone https://github.com/aws-samples/amazon-lookout-for-vision

ディレクトリを移動します。

cd amazon-lookout-for-vision

S3 Bucket にコピーします

aws s3 cp circuitboard/train s3://lookout-for-vision-sugi01/train --recursive
aws s3 cp circuitboard/test s3://lookout-for-vision-sugi01/test --recursive

Lookout for Vision で Project 作成

Lookout for Vision の画面で、Get Started を押します。

image-20230219163812304.png

Create S3 Bucket を押します。

image-20230219163858365.png

Create Project をおします。

image-20230219163937455.png

名前を付けて、Create project を押します。

image-20230219164006711.png

Project が出来上がったので、Create dataset を押します。

image-20230219164053427.png

Create a training dataset and a test dataset を押します。

image-20230219164145103.png

アップロードした S3 バケットを選択します。また、トレーニングで利用するラベルの、オートラベリング機能を有効化します。オートラベリングでは、normalフォルダの画像には「normal」、anomalyフォルダの画像には「anomaly」というラベルが貼られます。 オートラベリング機能を使うと、これらの画像に手動でラベルを付ける手間が省けます。

image-20230219164317528.png

テストデータも同様に指定します。

image-20230219164546472.png

Create dataset を押します。

image-20230219164600873.png

Dataset が作成され、S3 に格納したディレクトリごとに、異常な画像と正常な画像が認識されました。

image-20230219164831649.png

異常な画像を見てみると、はんだ付けが失敗している画像となっていることがわかります。

image-20230219165007917.png

Normal は綺麗な画像ですね。

image-20230219165053376.png

トレーニング実行

Train model を押します。

image-20230219165152659.png

Train model を押します。

image-20230219165218722.png

Train model を押します。

image-20230219165231664.png

Training が進んでいる様子がわかります。この記事の環境では、約 35 分ほどかかりました。

image-20230219165300245.png

Training が完了しました。

image-20230219173217959.png

トレーニングしたモデルに対して、テスト用に準備した画像をつかった結果が表示されています。

  • 偽陰性 (False Negative) : 2 件
  • 偽陽性 (False Positive) : 1 件

image-20230219173332121.png

偽陽性や偽陰性と検出された画像にフィルターして、確認ができます。評価結果を見ながら、精度の改善が必要な場合には、さらなるトレーニング用の画像を調整していくことが考えられます。

image-20230219173556940.png

別の画像でトライアル推論してみる

出来上がったモデルに対して、手元にある画像を使った推論ができます。Run trial detection を押します。

image-20230219173907507.png

ローカルからアップロードする方法を選択して、Detect anomalies を押します。

image-20230219173954742.png

Run trial detection を押します。

image-20230219174100230.png

5 つのファイルを選択して、Upload image を押します。

image-20230219174138446.png

推論処理をしてくれます。この記事の環境だと、8 分ほど掛かりました。

image-20230219174251545.png

全て Anomaly と評価されました。Verify machine predictions でフィードバックします。

image-20230219175044883.png

正しい結果の場合には「Correct」を押して、間違っていた場合は「Incorrect」を押します。

image-20230219175153132.png

この結果を再度トレーニングデータに格納させることも出来ます。

image-20230219175228579.png

本番用に Model をデプロイする

デプロイしたい Model を選択して、Integrate API to the Cloud を押します。

image-20230219175951934.png

AWS CLI のサンプルが表示されるのでメモっておきます

モデルの開始

aws lookoutvision start-model \
  --project-name lookoutforvision-demo \
  --model-version 1 \
  --min-inference-units 1

異常検出

aws lookoutvision detect-anomalies \
  --project-name lookoutforvision-demo \
  --model-version 1 \
  --content-type image/jpeg \
  --body /path/to/image.jpeg

モデルの停止

aws lookoutvision stop-model \
  --project-name lookoutforvision-demo \
  --model-version 1

start-model の実行例

> aws lookoutvision start-model \
        --project-name lookoutforvision-demo \
        --model-version 1 \
        --min-inference-units 1
{
    "Status": "STARTING_HOSTING"
}

Model が Starting Hosting のステータスに変わります。

image-20230219180147015.png

約 3 分ほど待機すると、Hosted に変わりました。

image-20230219180550187.png

AWS CLI から異常検出をしてみます。

aws lookoutvision detect-anomalies \
  --project-name lookoutforvision-demo \
  --model-version 1 \
  --content-type image/jpeg \
  --body extra_images-anomaly_9.jpg

実行結果 : IsAnomalous が true となっているので、異常となっていることがわかります。信頼度は 0.98.... となっています。

{
    "DetectAnomalyResult": {
        "Source": {
            "Type": "direct"
        },
        "IsAnomalous": true,
        "Confidence": 0.9898422360420227
    }
}

Model を停止

Model を動かしていると料金が掛かるので、使わなければモデルを停止します。

aws lookoutvision stop-model \
  --project-name lookoutforvision-demo \
  --model-version 1

検証を通じてわかったこと

参考 URL

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2