Amazon Lookout for Visionを試してみました（森口さんvs森田さん）

AWSには画像から異常検知を行う`Amazon Lookout for Vision`というサービスがあります。

https://aws.amazon.com/jp/lookout-for-vision/

* わずか 30 枚のイメージで、ライブのプロセスラインから異常を発見する機械学習 (ML) モデルを簡単に作成できます。
* 視覚的な異常をリアルタイムで特定し、欠陥の削減と防止、生産品質の向上を実現します。
* 計画外のダウンタイムを防ぎ、運用コストを削減するために、目視検査データを使って潜在的な問題を発見し、是正措置を講じます。

このサービスを試してみました。

# 題材

画像からの異常検知なので、画像を用意する必要があります。
事前に準備されているサンプル画像を使ってもいいのですが、自分で用意したいと思いました。
そこで用意したのがこちら。

![20220125_111717764_iOS.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180441/35c5cb04-4169-7285-ef42-a0631c2a564a.jpeg)


はんこです。
`森口`と`森田`です。
`森口`を異常とすると失礼なので、森口印を正常、森田印を異常として検証しました。


（ちなみに、プリント基板のサンプル画像はこちらで提供されています。）

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

# 手順

## 画像の準備

Lookout for Visionでは、正常の画像が20枚以上、異常の画像が10枚以上必要になります。
せっせとはんこをおして、iPhoneで撮影しました。できるだけ同じアングルになるように取りました。

正常（森口印）

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f313138303434312f39656636663337362d633034342d343264612d353962642d3037383236646333303939362e6a706567.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180441/dfcf0a7d-6b67-aa37-61a5-a21087dd10c7.jpeg)


異常（森田印）

![20220125_112023894_iOS.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180441/c5297615-5d71-b372-cff5-9fdf35809812.jpeg)

判別できそうな予感！


## ワークスペースの作成

ここからはマネジメントコンソール上で行います。まずは、Lookout for Visionの画面に移動します。

https://ap-northeast-1.console.aws.amazon.com/lookoutvision

![ap-northeast-1.console.aws.amazon.com_lookoutvision(Surface Pro 7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180441/8bb535f8-308a-f236-0c12-d2ce73b2735c.png)

左メニューのプロジェクトから、プロジェクトを作成します。名前をつけるだけです。
プロジェクトが作成できたら、「データセットを作成」をクリックします。

![ap-northeast-1.console.aws.amazon.com_lookoutvision(Surface Pro 7) (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180441/3539000b-ee42-bf91-afc6-e0f8ff1b1473.png)

次の画面では、以下の項目を選択しました。

| 項目 | 選択肢 |
| --- | --- |
| 設定オプション　| 1つのデータセットを作成する |
| イメージをインポート | コンピュータからイメージをアップロードする |

選択したら、「データセットを作成」をクリックします。

すると、このような画面になりますので、イメージを追加ボタンをクリックし、用意した画像をドラッグアンドドロップしてアップロードできます。

まずは正常画像（森口印）20枚をアップロードします。アップロード直後の画面はこのようになります。

![ap-northeast-1.console.aws.amazon.com_lookoutvision(Surface Pro 7) (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180441/88de6c45-c714-34cc-84db-fe4d1b8286e2.png)

「ラベルを追加」→「このページのすべてのイメージを選択」→「正常として分類」と操作を行い、「正常」のラベルを付けます。
1ページあたりの表示が9枚までなのでページングを切り替えてすべての画像に「正常」のラベルを付けた後、「変更を保存」ボタンを押します。

同じようにして、異常画像（森田印）をアップロードし、「異常」のラベルをつけます。
画像の追加アップロードは、「アクション」→「トレーニングデータセットにイメージを追加します」から行います。
フィルターで「ラベルなし」を選ぶと作業がはかどります。

30枚の画像全てにラベルをつけたら、モデルをトレーニングボタンを押し、トレーニングを開始します。

トレーニングが完了すると、トレーニング結果が表示されます。

![ap-northeast-1.console.aws.amazon.com_lookoutvision_region=ap-northeast-1(Surface Pro 7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180441/fbbfcf97-4093-539a-7ec6-71122bb45238.png)

# モデル精度の検証

## 1回目

トライアル検出で、モデルの精度を検証してみます。
画像は正常3つと異常3つ用意しました。
結果はこちら！

![ap-northeast-1.console.aws.amazon.com_lookoutvision_region=ap-northeast-1(Surface Pro 7) (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180441/7e22cb90-fb01-f957-e726-27f3f1f6e33f.png)

そんなバカな。。全部異常に分類されました。（3勝3敗）

検証用に使った画像についても手動でラベルをつけることができ、この画像を追加してモデルの再学習ができます。
このあたりのフローが簡単にできるのはいいですね。

## 2回目

1回目の検出に使った6枚の画像を追加して再学習し、再度トライアル検出を行ってみました。

トライアル検出に使用する画像を間違えてしまい、6件全部を正常（森口印）にしてしまいました。（後で間違いに気づきました）

その結果がこちらです。

![ap-northeast-1.console.aws.amazon.com_lookoutvision_region=ap-northeast-1(Surface Pro 7) (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180441/beb9a9e6-3200-01f5-0117-08ce7687a14d.png)

全部不正解（0勝6敗）です。　(´・ω・｀)
やり方が悪いのか、、そもそも題材が悪いのか。。

## 3回目

予め用意していた画像全部つぎ込んで、最後の実施です。（全部で60枚の画像）

ちなみにこのトライアル検出も使用する画像は間違えたので、すべて正常（森口印）で行っています。

![ap-northeast-1.console.aws.amazon.com_lookoutvision_region=ap-northeast-1(Surface Pro 7) (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180441/d3fb0e46-77dd-ae7a-0486-2b74a7c3d0d6.png)

なんと！ここに来て全部正解！！！

やったね。

## おまけ

異常を検知できたかがよくわからない検証になったので、改めて、はんこを押しました。
3回目と同じモデルで、森口印10枚、森田印10枚で最終検証です！

![ap-northeast-1.console.aws.amazon.com_lookoutvision_region=ap-northeast-1(Surface Pro 7) (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180441/1d97a677-9adb-167e-8c32-c687f4d4f206.png)

| 期待値 | 検証数 | 正解数 | 不正解数 |
| --- | --- |--- | --- |
| 正常（森口印） | 10 | 10 | 0 |
| 異常（森田印） | 10 | 3 | 7 |

正常（森口印）はすべて正しく判定されました。


浅い知識ですが、、、
あってるか自信はありません。そしてどう判断していいかはわからない。。

| 指標 | 値 |
| --- | --- |
| 正解率(Accuracy) | 13/20 = 65% |
| 適合率（Precision） | 10/17 = 58.9% |
| 再現率（Recall） | 10/10 = 100% |


# まとめ

* もっと接写して撮ると結果が違うかも？
* 正常20枚、異常10枚の最小枚数でいい精度を出すのは無理がありそう

* おそらく一生分の森口さん印を押しました（笑）

![20220125_132804482_iOS.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1180441/a1b7ac0b-82b0-2a77-90c8-c1581a79a7fe.jpeg)