「はじめての Amazon Lookout for Vision ハンズオン」に参加しました
Amazon Lookout for Visionのハンズオンに参加しました。
目次
Amazon Lookout for Vision
製品の欠陥検出をするAmazon Lookout for Vision。
少なくとも正常画像20枚以上、異常画像10枚以上が必要。
画像さえ用意して、学習すれば、あとは外観検査が行えると。
ソースコードを書いたり、機械学習の深い理解がなくても、自動的な欠陥検出ができるサービスとのことです。
楽しみです。
Amazon Lookout for Vision
昔、一晩中流れてくるペットボトルを見て、油汚れがついてたり、変形してるのを検出して除外する、日雇いアルバイトに行ったことがあるけど、あれができるサービスということでいいかな。
(途中寝てしまった時間もあった。)#jawsug #jawsugkgirls #AWSUserGroups— 山下 光洋inポケットスタディAWS認定 デベロッパー アソシエイトリリース (@yamamanx) April 25, 2021
ハンズオン
サンプル画像を用意いただいてるのでそれをダウンロードして。
Lookout for Visionの初回起動にはS3バケット作成が必要と。
バケット名は決められちゃうのですね。
できたS3バケットに、バケットポリシーとかできてるのかなと思ったら何もないデフォルトのバケットでした。
プロジェクト名をきめて作成してと。
マネジメントコンソールにナビゲートが表示されてます。
この順番で実行していくのですね。
わかりやすいですね。
まずはデータセット作成。
今回はローカルからアップロードします。
アップロードしたのがさきほどのS3バケットに保存されるんでしょうね。
20枚の画像がS3に保存されました。
画像を全部選択して、[正常として分類]しました。
次は異常として用意された画像をアップロードしました。
しみがあったり、汚れたり、ほつれてたりしているカーペットの画像です。
今度は[異常として分類]します。
正常20枚と異常10枚が揃ったので、「モデルをトレーニングするのに十分なラベル付きイメージがあります。」となりました。
[モデルをトレーニング]を押下しました。
ここから時間がかかるので、自己紹介タイムになりました。
待ってる間にS3バケットのポリシーが気になってたのでちょっとテストしてみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*" }, { "Sid": "VisualEditor0", "Effect": "Deny", "Action": "s3:*", "Resource": "*" } ] } |
こんなポリシーでS3だけ使えないIAMユーザーでLookout For Visionでプロジェクトを作って、データセットを作ろうとしたら。
エラーになりました。
なので、操作しているIAMユーザーのポリシーによってS3バケットへのPutが行われるということですね。
そんなこんなことをしているうちにトレーニングが完了しました!
モデルを選択するとサンプルデータを使って、自動でテストされた結果が表示されます。
リコールが100%でしたので、異常が正常とされることはなかったと。
欠陥製品が正常と判断されることはなかったということですね。
安心です。
精度が83.3%で、正常な製品が2つ異常とされてしまったので、このままでは、不良品コストが増えるということになります。
なのでチューニングをしましょう。
[トライアル検出を実行]ボタンを押下しました。
トライアル用のサンプルデータを20枚アップロードしました。
10枚が異常と判断してほしい画像で、10枚が正常判断してほしい画像です。
このトライアル検出をした結果です。
10枚づつの正常、異常が正しい結果なので、まだまだ正しくないですね。
[マシン予測を検証]を押下しました。
正常、異常が正しい結果か、確認して補正します。
そして、データセットに追加してモデルを再学習しました。
こうやってモデルを賢くしていくのですね。
モデルは再学習すると上書きではなくて追加なのですね。
バージョン管理できていいですね。
このモデルを現場で実際に使う場合は、推論モデルを開始します。
そのためのコードスニペットが用意されています。
開始
1 2 3 4 5 |
aws lookoutvision start-model \ --project-name lofv-sample \ --model-version 1 \ --min-inference-units 1 |
実行してみました。
{
“Status”: “STARTING_HOSTING”
}
これでモデルがホスティング状態になり、推論課金がスタートします。
マネジメントコンソールで、モデル1が開始中になりました。
ホスト済になりました。
異常検出を実行するコマンドも用意されています。
1 2 3 4 5 6 |
aws lookoutvision detect-anomalies \ --project-name lofv-sample \ --model-version 1 \ --content-type image/png \ --body hole-002.png |
結果です。
{
“DetectAnomalyResult”: {
“Source”: {
“Type”: “direct”
},
“IsAnomalous”: true,
“Confidence”: 0.6220576167106628
}
}
異常な画像をリクエストして異常と教えてくれました。
実際にはboto3とかで、画像がアップロードされるたびに検出するとかですよね。
今回勉強会で、お助けマンこばさんがPythonのコード用意していただいてたので、それを使ってローカルで実行してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
import boto3 def detect_anomalies(project_name,model_version,photo): client=boto3.client('lookoutvision') #Call DetectAnomalies with open(photo, 'rb') as image: response = client.detect_anomalies(ProjectName=project_name, ContentType='image/png', Body=image.read(), ModelVersion=model_version) print ('Anomalous: ' + str(response['DetectAnomalyResult']['IsAnomalous'])) print ('Confidence: ' + str(response['DetectAnomalyResult']['Confidence'])) def main(): project_name='lofv-sample' photo="hole-002.png" model_version='1' anomalous=detect_anomalies(project_name,model_version,photo) if __name__ == "__main__": main() |
出力は以下でした。
Anomalous: True
Confidence: 0.6220576167106628
これ、使わないときホスティングしぱなっしにしたらコスト的にだめなやつですね。
停止忘れて放置とか最悪な未来しか見えないですね。
なのでちゃんと止めなければ!
停止するコマンドは以下でした。
1 2 3 4 |
aws lookoutvision stop-model \ --project-name lofv-sample \ --model-version 1 |
停止中になりました。
{
“Status”: “STOPPING_HOSTING”
}
面白いデモなので、プロジェクトとモデルは置いておこうと思います。
トレーニングとホスティングしなければ、S3の保存料金ぐらいかなと思うので。
念のためですが、少しの間は課金状況は確認しておきましょう。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
東大阪メーカーズ・ミートアップ Vol.2に行ってきました
今回初参加で行ってきました。 東大阪メーカーズ・ミートアップとは 「主に東大阪の …
-
「Botの王道:配達ピザの注文をさばくBotを2時間で開発するワークショップ@大阪」に参加しました
「Botの王道:配達ピザの注文をさばくBotを2時間で開発するワークショップ@大 …
-
DevLOVE関西 「サイボウズ開発の現場」に行ってきました
DevLOVE関西 「サイボウズ開発の現場」に行ってきました 所感 「KAIZE …
-
再会の日 ~re:Union 2018 Osaka by JAWS-UG~
8/5は大阪でre:Unionでした。 「再会」と名うったこのイベントは、6月に …
-
JAWS DAYSで人生が変わった話
明日はJAWS DAYS 2021です! JAWS DAYSが変えた私の人生 「 …
-
ヤマムギ vol.6(勉強会) 「LINEとAWS(Lambda,Step Functions,API Gateway)とTwilioとkintoneでBOTを作ってみるハンズオン」を開催しました
2017/8/18に ヤマムギ vol.6 「LINEとAWS(Lambda,S …
-
ヤマムギvol.11「AWSではじめるLinux入門ガイド」クイックスタート勉強会を開催しました
2020/7/15に、ヤマムギvol.11としまして、「AWSではじめるLinu …
-
JAWS-UG CLI専門支部に初めて参加してIAM入門してきた
JAWS-UG CLI専門支部に初参加してきました。 会場は茅場町のコワーキング …
-
AlexaのSmart HomeをAWSで作る方法(Alexa Day 2019でのブログ)
以下は、気になったことのメモとか感想を書いています。 登壇者、発表者、主催企業な …
-
YouTubeチャンネル「ヤマムギ」をはじめました
YouTubeチャンネル「ヤマムギ」をはじめました。 2021年GWチャレンジと …