Amazon Lookout for Visionで異常検出 その１

# はじめに
[Amazon AI by ナレコム アドベントカレンダー 2020](https://qiita.com/advent-calendar/2020/knowcom-amazonai)の13日目の記事です。
Amazon Lookout for Visionは、画像から欠陥のある製品を検出する新しいMLサービスになります。
早速使ってみましょう！

# 導入 

1．[MVTEC ANOMALY DETECTION DATASET](https://www.mvtec.com/company/research/datasets/mvtec-ad/)を用います。Capsule (385 MB)をダウンロードしてください。

2．AWS Consoleを開き、「Amazon Lookout for Vision」を検索し、開始方法をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/ab512224-f05d-68d8-0fec-bed6a33cb934.png)

3．初回セットアップでは、S3にバケットを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/d39041c2-69f9-44d4-6a9d-ba94bfde50d3.png)

4．ダッシュボードを開いたら、プロジェクトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/c7e04913-8c6b-dfad-7566-6083e2b5dfc7.png)

5．プロジェクト名を適当に入力し、プロジェクトを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/ee46275b-d634-6cb5-67a2-445668e2ef54.png)

6．まずは、データセットを作成しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/bd39f912-dbef-3fe0-d706-3e4b3a200773.png)

7．「1つのデータセットを作成する」を選択、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/7272a664-ada0-659e-ca85-9f3c044a56fe.png)

8．「コンピュータからイメージをアップロードする」を選択し、データセットを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/4a57b5e3-f5d5-453f-8bc1-96e9df20de3d.png)

9．イメージを追加します。最低でも10枚の異常イメージと、20枚の正常イメージが必要みたいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/98c8bfef-b13b-7f75-16c6-c1d39e3d62cd.png)

10．30個まで一度にアップロードできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/dcb506d2-cd08-fbb9-7150-98c86f360dc8.png)

11．画像を確認したらアップロードしましょう。capsule\train\goodから欠陥のない画像を30枚アップロードしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/9180b1ea-231e-6224-2fd7-df4d0d84e7ea.png)

12．アップロードしたら、ラベルを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/18ee35b1-b96a-bb67-c549-ad7cc5f62f1a.png)

13．画像を選んで、Normal（正常）かAnomaly（異常）に分類します。30枚はすべて正常に分類します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/9a2e67df-bcf9-5201-05f2-6c687af29fce.png)

14．右上のアクションからトレーニングデータセットにイメージを追加していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/f3f9dd40-3df4-dded-e9c5-3bbea40e3b9d.png)

15．capsule\test\scratchフォルダから欠陥のある画像を11枚アップロードしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/2320ea25-0c29-8364-8ee4-b3d29c52623b.png)

16．11枚を異常に分類します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/c62ab743-6da9-94dd-a361-f8edb8edce30.png)

17．30枚の正常な画像と11枚の異常な画像のトレーニングデータが集まったので、モデルをトレーニングします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/69fcc953-dce3-783d-2e7a-03f63d1780ba.png)

18．モデルをトレーニングします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/bdbcbaf5-0f45-72b1-212f-cd187f3f67d4.png)

19．確認事項が表示されますが、モデルをトレーニングします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/1f124e08-e52b-c2b8-ca08-7656d698b4ef.png)

20．トレーニングが進行しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/80c80c3c-6897-3fc7-f034-0344d7d128b2.png)

21．40分ほどでトレーニングが完了しました。スコアは90.9%となっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/10dce886-c09d-7bd8-db8f-efc8b957eada.png)

22．約半数（21枚）テストされ、11枚正常と予測したもののうち1枚が不正解、10枚異常として予測したもののうち1枚が不正解となりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/911e8fd8-ea12-ee12-80d5-16bd26a06748.png)

| | | | | 
|:--|:--|:--|:--|
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/10da8c25-b71a-7d0c-ba21-7f457d456b7f.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/5c589465-74d8-3af8-c3e4-02ddf46648d9.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/45b0e673-8c2a-36fe-1441-819bdcd395e2.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/b72fca76-a088-10bb-7cbd-2f235c40f154.png)|

23．トライアル検出では、作ったモデルのテストを行うことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/e8400494-67a1-bf82-4eb6-f3b125bb26e2.png)

24．タスク名を入力し、「モデル１」を選択、「コンピュータからイメージをアップロードする」を選択、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/d391c351-99a5-5e08-f932-10a97d2b2dd0.png)

25．「異常を検出」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/763a061b-f993-e542-7170-b36a052ace1e.png)

26．確認事項が表示されるので、「トライアル検出を実行」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/4edcca31-a7a2-13a5-fdbd-d4478183cf49.png)

27．30個まで画像をアップロードします。capsule\test\crackから10枚アップロードしました。すべて異常となる必要があります。（crackは学習していないため期待はできません。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/b6c70be2-48c8-c0e6-dfdd-f626faa7428c.png)

28．8割異常と予測されました。なかなか優秀ではないでしょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/83f80ec2-1f37-b136-a044-a949bc00b712.png)

| | |
|:--|:--|
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/5f7470fc-a8a8-2be8-0e14-a641616ffeea.png)|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/5f89b257-381d-d210-0985-3c032628a6e5.png)|
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/c56e66ef-7ede-7a12-982a-9b6933b2eb0f.png)| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/9f03eef6-36bc-047a-3d19-a68afe6c4e5c.png)|

29．「マシン予測を検証」から結果が正しいか誤りかを教えてあげましょう。今回はすべて異常でないといけません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/9987f755-67ae-a887-624b-f6ad54b383ae.png)

30．検証済みイメージをデータセットに追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/df818821-9037-d4c6-a5e9-41a86df69de2.png)

31．データセットに移動したら、検証済みイメージが追加されているので、再学習することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63863/cf5d3afa-3aab-0c99-0dc2-c89483311860.png)

# まとめ
Amazon Lookout for Visionを用いて、カプセルの欠陥検出を行いました。このサービスを利用することで、簡単に学習・評価・改善のサイクルをまわせますね。
作ったモデルは、AWS SDKまたはCLIから使えるようです。これはまた[次回](https://qiita.com/SatoshiGachiFujimoto/items/cde22d0a647b16be2964)ご紹介したいと思います。
お疲れ様でした。

# 参考
- [Amazon Lookout for Vision — 新しい ML サービスにより、製造の欠陥検出を簡素化](https://aws.amazon.com/jp/blogs/news/amazon-lookout-for-vision-new-machine-learning-service-that-simplifies-defect-detection-for-manufacturing/)