Amazon Lookout for Vision(Preview版)を試してみました

記事タイトルとURLをコピーする

こんにちは、技術4課の木次です。

re:Invent 2020 で発表された Amazon Lookout for Vision を実際に触ってみました。なお、Preview 版なので UI や仕様が変更される可能性がある点にご注意ください。

Amazon Lookout for Vision は、コンピュータビジョンを使用して不具合を特定し、品質検査を自動化するマネージドサービスです。 正常と異常の画像データを用意してモデルを作成し、新しい画像が正常か異常かを判定します。 出来ることは限られていますが、その分シンプルでわかりやすいです。

Amazon Lookout for Vision の視聴レポートはこちらになります。(おじさんは寝てました!)

blog.serverworks.co.jp

さっそく試してみましょう。 現在、対応しているリージョンは下記です。

  • 米国東部 (バージニア北部) us-east-1
  • 米国東部 (オハイオ) us-east-2
  • 米国西部 (オレゴン) us-west-2
  • アジアパシフィック (ソウル) ap-northeast-2
  • アジアパシフィック (東京) ap-northeast-1
  • 欧州 (フランクフルト) eu-central-1
  • 欧州 (アイルランド) eu-west-1

プロジェクト作成

まずはプロジェクトを作成します。

AWS コンソール画面から [Amazon Lookout for Vision] を選択し、[プロジェクトの作成] ボタンを押下してプロジェクト名を入力します。

f:id:swx-kitsugi:20201218101008p:plain

プロジェクトが作成されます。
プロジェクトは単一のユースケースごとに作成します。異なる部品をそれぞれ検知したいならプロジェクトを分けます。

データセットの準備

プロジェクトを作成したらデータセットを作成します。 [データセットを作成] ボタンを押下します。

f:id:swx-kitsugi:20201218101134p:plain

画像のインポート方法は複数ありますが、今回は直接アップロードを試します。
[データセットを作成] ボタンを押下してデータセットを作成します。

画像を追加

トレーニングを始めるには、最低20個の正常系画像と10個の異常系画像、合計30個の画像が必要になります。

今回は、そのへんに転がっていた抵抗器を撮影して利用しました。 曲がっているのを異常とします。 注意点として画像のサイズを統一します。バラバラだとエラーになります。

正常 異常
f:id:swx-kitsugi:20201218101221p:plain f:id:swx-kitsugi:20201218101237p:plain

[イメージの追加] ボタンを押下して、まずは画像をアップロードします。一度にアップロードできるイメージは30個までです。

f:id:swx-kitsugi:20201218111017p:plain

アップロードが完了しました。 今回はテストのため、最低限の枚数で試しました。 画像の数が多い場合は、S3フォルダ経由や SageMaker Ground Truth を活用してください。

ラベルを追加

[ラベルを追加] ボタンを押下して、各画像に対して正常か異常かのラベンリングをします。

f:id:swx-kitsugi:20201218111029p:plain

このページのすべてのイメージを選択をチェックするとページ単位(全体ではない)でラベリングが可能です。簡単ですね。

ラベリングが完了したら [変更を保存] ボタンを押下して、データセットに反映します。

モデルのトレーニング

データセットの準備が出来たので、モデルを作成します。 [モデルをトレーニング] ボタンを押下してトレーニングを開始します。

f:id:swx-kitsugi:20201218111038p:plain

トレーニングは完了するまで時間がかかります。リラックスしながら待ちましょう。

f:id:swx-kitsugi:20201218125639p:plain (トレーニング中に抵抗器でサウナに行きたいをアピールするおじさん)

f:id:swx-kitsugi:20201218125434p:plain (トレーニング中にCloudShellで略)

今回は40分弱で完了しました。なお、トレーニング中はコストが発生します。

モデルの評価

メトリクスの確認

メトリクスを確認します。今回の結果は良好です。 f:id:swx-kitsugi:20201218144243p:plain

モデルの改善

新しい画像を使用して精度を確認してみます。[トライアル検出を実行] ボタンを押下します。

f:id:swx-kitsugi:20201218144348p:plain

タスク名を入力して、[異常を検出] ボタンを押下します。 試しに正常系3枚、異常系3枚をアップロードしました。

f:id:swx-kitsugi:20201218144359p:plain

今回は全画像が正しく分類できました。素晴らしい!

[マシン予測を検証] ボタンを押下して結果が正しいか誤りか各画像に対してチェックします。 全てチェックしたら [検証済みイメージをデータセットに追加する] ボタンを押下します。

f:id:swx-kitsugi:20201218144414p:plain

データセットに追加した後は、モデルを再トレーニングして精度を上げていきます。

モデルの使用

AWS CLI を利用して異常検出を試してみます。 lookoutvision に対応したバージョン (ver2.1.6以降またはver1.18.187以降) を利用します。

モデルを開始

モデルをホスティングします。

$ aws lookoutvision start-model \
  --project-name sample \
  --model-version 2 \
  --min-inference-units 1
{
    "Status": "STARTING_HOSTING"
}

ステータス確認

ホスティングには数分かかります。 ステータスを確認します。Status が STARTING_HOSTING から HOSTED になればホスト済みです。

$ aws lookoutvision describe-model \
  --project-name sample \
  --model-version 2
{
    "ModelDescription": {
        "ModelVersion": "2",
        "ModelArn": "arn:aws:lookoutvision:ap-northeast-1:xxxxxxxxxxxx:model/sample/2",
        "CreationTimestamp": "2020-12-18T13:44:07.344000+09:00",
        "Status": "HOSTED",
        "StatusMessage": "The model is running",
        "Performance": {
            "F1Score": 1.0,
            "Recall": 1.0,
            "Precision": 1.0
        },
        "OutputConfig": {
            "S3Location": {
                "Bucket": "lookoutvision-ap-northeast-1-xxxxxxxxxx",
                "Prefix": "project/sample/model/"
            }
        },
        "EvaluationManifest": {
            "Bucket": "lookoutvision-ap-northeast-1-xxxxxxxxxx",
            "Key": "project/sample/model/EvaluationManifest-sample-2.json"
        },
        "EvaluationResult": {
            "Bucket": "lookoutvision-ap-northeast-1-xxxxxxxxxx",
            "Key": "project/sample/model/EvaluationResult-sample-2.json"
        },
        "EvaluationEndTimestamp": "2020-12-18T14:23:47.963000+09:00"
    }
}

異常検出

画像 (--body) を指定して異常検出を試します。

正常画像

$ aws lookoutvision detect-anomalies \
  --project-name sample \
  --model-version 2 \
  --content-type image/png \
  --body /path/to/normal-24.png
{
    "DetectAnomalyResult": {
        "Source": {
            "Type": "direct"
        },
        "IsAnomalous": false,
        "Confidence": 0.8753993511199951
    }
}

異常画像

$ aws lookoutvision detect-anomalies \
  --project-name sample \
  --model-version 2 \
  --content-type image/png \
  --body /path/to/anomaly-11.png
{
    "DetectAnomalyResult": {
        "Source": {
            "Type": "direct"
        },
        "IsAnomalous": true,
        "Confidence": 0.936505138874054
    }
}

正しい結果が得られました。

モデルを停止

最後にモデルを停止します。停止しないと課金が発生します。

$ aws lookoutvision stop-model \
  --project-name sample \
  --model-version 2
{
    "Status": "STOPPING_HOSTING"
}

終わりに

Amazon Lookout for Vision を利用すると、簡単に異常検知を利用することができます。 特に、少ない画像数で始めることが出来るので気軽に試すことができました。

ただし、エッジ側だけで完結はしません。 画像を判定するためにはAWS CDK または CLI を利用し、インターネット接続が必要になります。 現時点では Preview 版なので、そのあたりがどうなるか興味があります。 今後に期待です。

re:Invent 2020、12月分は本日(12/18)で終わりですが、来年の1月12から開始です。残り少ないですが、楽しみですね。

参考