はじめに
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つのフォルダを作成します。
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 を押します。
Create S3 Bucket を押します。
Create Project をおします。
名前を付けて、Create project を押します。
Project が出来上がったので、Create dataset を押します。
Create a training dataset and a test dataset を押します。
アップロードした S3 バケットを選択します。また、トレーニングで利用するラベルの、オートラベリング機能を有効化します。オートラベリングでは、normalフォルダの画像には「normal」、anomalyフォルダの画像には「anomaly」というラベルが貼られます。 オートラベリング機能を使うと、これらの画像に手動でラベルを付ける手間が省けます。
テストデータも同様に指定します。
Create dataset を押します。
Dataset が作成され、S3 に格納したディレクトリごとに、異常な画像と正常な画像が認識されました。
異常な画像を見てみると、はんだ付けが失敗している画像となっていることがわかります。
Normal は綺麗な画像ですね。
トレーニング実行
Train model を押します。
Train model を押します。
Train model を押します。
Training が進んでいる様子がわかります。この記事の環境では、約 35 分ほどかかりました。
Training が完了しました。
トレーニングしたモデルに対して、テスト用に準備した画像をつかった結果が表示されています。
- 偽陰性 (False Negative) : 2 件
- 偽陽性 (False Positive) : 1 件
偽陽性や偽陰性と検出された画像にフィルターして、確認ができます。評価結果を見ながら、精度の改善が必要な場合には、さらなるトレーニング用の画像を調整していくことが考えられます。
別の画像でトライアル推論してみる
出来上がったモデルに対して、手元にある画像を使った推論ができます。Run trial detection を押します。
ローカルからアップロードする方法を選択して、Detect anomalies を押します。
Run trial detection を押します。
5 つのファイルを選択して、Upload image を押します。
推論処理をしてくれます。この記事の環境だと、8 分ほど掛かりました。
全て Anomaly と評価されました。Verify machine predictions でフィードバックします。
正しい結果の場合には「Correct」を押して、間違っていた場合は「Incorrect」を押します。
この結果を再度トレーニングデータに格納させることも出来ます。
本番用に Model をデプロイする
デプロイしたい Model を選択して、Integrate API to the Cloud を押します。
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 のステータスに変わります。
約 3 分ほど待機すると、Hosted に変わりました。
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
検証を通じてわかったこと
- S3 で正常な画像を格納する「anomaly」ディレクトリと、異常な画像を格納する「normal」のディレクトリを作成することで、自動的にラベリングしてくれる。
- Lookout for Vision の料金は、inference unit をどれくらい、何時間稼働させたかによって計算ができる。
- start-model を実行することで推論が出来るようになり、stop-model を実行するまで、その時間分料金が発生する。表現を変えると、start-model をしている間は、推論をしなくても、料金は掛かり続ける考え方となる。
- https://docs.aws.amazon.com/lookout-for-vision/latest/developer-guide/running-model.html
- inference unit を手動で増減させる場合は、一度 stop-model してから必要な数を指定して再起動させる。10-20 分のダウンタイムを許容できるときに、この方法を取りやすい。
- オートスケーリングをさせることも可能
- NVIDIA Jetson と AWS IoT Greengrass を使ってエッジ推論をさせることも可能
- サポートされる画像
- JPEG および PNG
- 最大 5 MB の画像ファイルサイズをサポート
- 精度を上げるための Tips
- 学習時に与える画像の状況と、本番自に利用する画像の状況を同じにするのが良い。カメラの位置、光の具合、製品の角度、製品の大きさ、などなど
- 画像の中には、対象の製品のみ中央に映すことで、精度の向上が期待できる。関係ないものは画像には入れない
- 画像の寸法は、モデル学習時・本番利用時に同じものを利用する
- https://docs.aws.amazon.com/ja_jp/lookout-for-vision/latest/developer-guide/model-create-dataset.html
- 画像の中で、どこが異常なのかを教えてくれる機能が追加された
参考 URL