Amazon Rekognitionのカスタムラベルで犬と猫を判定してみる


## 今回試したこと
Amazon Rekognition カスタムラベルを使ってどの程度正確に犬と猫を画像判定できるか試してみました

## Amazon Rekognition カスタムラベルを使ってみる
### データセット準備
適当なS3を作って学習用のデータセットを格納しておきます
![スクリーンショット 2021-10-28 0.20.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226680/685a42ea-2665-bea2-4851-57fac3b6a460.png)
catフォルダの中身
![スクリーンショット 2021-10-28 0.22.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226680/238beca8-9c02-f1e6-2842-11b63ff222b5.png)
Amazon Rekognition でデータセットを作成
![スクリーンショット 2021-10-28 0.26.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226680/c3e26528-6581-db89-5ca6-46d68490f383.png)
先ほど用意したS3を指定して、Automatin labering にチェックを入れる
![スクリーンショット 2021-10-28 0.31.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226680/0cb81360-8185-e395-74b7-1bcb4d809b3a.png)
Importが完了すると、データセットが表示される
![スクリーンショット 2021-10-28 0.33.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226680/9aa814bd-04c9-4633-09e8-4fdd51450d64.png)

### トレーニング
先ほどのデータセットを選択して、トレーニング開始
![スクリーンショット 2021-10-28 0.35.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226680/e309c63e-997c-2136-95b5-a05a2bac6c18.png)

トレーニングが完了すると、TRAINING_COMPLETEDになる
![スクリーンショット 2021-10-28 0.38.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226680/46a038eb-fe92-ed4f-acaa-79b15384b5ce.png)

モデルを選択すると詳細を確認できる
![スクリーンショット 2021-10-28 0.39.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226680/0aaa4e94-087b-84d6-3343-85aa7be967df.png)

### 判定用の画像を用意
判定用の画像を用意して、適当なS3に格納

![スクリーンショット 2021-10-28 22.59.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226680/c9f91092-1a66-4e3e-6b5d-66478adb4ae7.png)

### 確認
確認方法はコンソールに表示されているものを使う
![スクリーンショット 2021-10-28 0.59.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226680/f8b43018-7aa2-166e-5fb4-382319e06dae.png)

<details><summary>コマンド実行結果</summary><div>

```bash
% docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli rekognition detect-custom-labels \
  --project-version-arn "arn:aws:rekognition:ap-northeast-1:ACCOUNT_ID:project/WhatAnimal/version/WhatAnimal.2021-10-26T23.22.59/1635258179669" \
  --image '{"S3Object": {"Bucket": "rekognition-image-n74bc4ed9zxjm8t5esf6","Name": "test-1.jpg"}}' \
  --region ap-northeast-1
{
    "CustomLabels": [
        {
            "Name": "cat",
            "Confidence": 96.83799743652344
        }
    ]
}

$ docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli rekognition detect-custom-labels \
  --project-version-arn "arn:aws:rekognition:ap-northeast-1:ACCOUNT_ID:project/WhatAnimal/version/WhatAnimal.2021-10-26T23.22.59/1635258179669" \
  --image '{"S3Object": {"Bucket": "rekognition-image-n74bc4ed9zxjm8t5esf6","Name": "test-2.jpg"}}' \
  --region ap-northeast-1
{
    "CustomLabels": [
        {
            "Name": "cat",
            "Confidence": 99.81999969482422
        }
    ]
}

$ docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli rekognition detect-custom-labels \
  --project-version-arn "arn:aws:rekognition:ap-northeast-1:ACCOUNT_ID:project/WhatAnimal/version/WhatAnimal.2021-10-26T23.22.59/1635258179669" \
  --image '{"S3Object": {"Bucket": "rekognition-image-n74bc4ed9zxjm8t5esf6","Name": "test-3.jpg"}}' \
  --region ap-northeast-1
{
    "CustomLabels": [
        {
            "Name": "dog",
            "Confidence": 56.49899673461914
        }
    ]
}

$ docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli rekognition detect-custom-labels \
  --project-version-arn "arn:aws:rekognition:ap-northeast-1:ACCOUNT_ID:project/WhatAnimal/version/WhatAnimal.2021-10-26T23.22.59/1635258179669" \
  --image '{"S3Object": {"Bucket": "rekognition-image-n74bc4ed9zxjm8t5esf6","Name": "test-4.jpg"}}' \
  --region ap-northeast-1
{
    "CustomLabels": [
        {
            "Name": "dog",
            "Confidence": 99.97799682617188
        }
    ]
}

$ docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli rekognition detect-custom-labels \
  --project-version-arn "arn:aws:rekognition:ap-northeast-1:ACCOUNT_ID:project/WhatAnimal/version/WhatAnimal.2021-10-26T23.22.59/1635258179669" \
  --image '{"S3Object": {"Bucket": "rekognition-image-n74bc4ed9zxjm8t5esf6","Name": "test-5.jpg"}}' \
  --region ap-northeast-1
{
    "CustomLabels": [
        {
            "Name": "dog",
            "Confidence": 66.59500122070312
        }
    ]
}
$ docker run --rm -it -v ~/.aws:/root/.aws amazon/aws-cli rekognition detect-custom-labels \
  --project-version-arn "arn:aws:rekognition:ap-northeast-1:ACCOUNT_ID:project/WhatAnimal/version/WhatAnimal.2021-10-26T23.22.59/1635258179669" \
  --image '{"S3Object": {"Bucket": "rekognition-image-n74bc4ed9zxjm8t5esf6","Name": "test-6.jpg"}}' \
  --region ap-northeast-1
{
    "CustomLabels": [
        {
            "Name": "cat",
            "Confidence": 97.85400390625
        }
    ]
}
```
</div>
</detail>

### 画像と結果
test-1.jpg
"Name": "cat", "Confidence": 96.83799743652344
![test-1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226680/4803cc5c-22d7-53cf-0934-58fce457551c.jpeg)
test-2.jpg
"Name": "cat", "Confidence": 99.81999969482422
![test-2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226680/238b0e0a-845d-1f32-e4ac-be2403585e1b.jpeg)
test-3.jpg
"Name": "dog", "Confidence": 56.49899673461914
![test-3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226680/2b5b6cee-e551-d29f-339a-60d8aa4e2780.jpeg)
test-4.jpg
"Name": "dog", "Confidence": 99.97799682617188
![test-4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226680/e1106f4e-0a11-f683-6a69-01a552aad425.jpeg)
test-5.jpg
"Name": "dog", "Confidence": 66.59500122070312
![test-5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226680/d09729d7-a36d-a760-90c5-330a9533c363.jpeg)
test-6.jpg
"Name": "cat", "Confidence": 97.85400390625
![test-6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1226680/3f874cbc-9e1a-cd06-64e8-3fdd4228a06e.jpeg)

## 終わりに
元々学習用に提供されている犬と猫の画像を使ったためか、とても高い精度で犬猫判定ができました。
手軽に機械学習を利用できるのはいいですね。

## 参考
[[Amazon Rekognition] よく似たパッケージの商品をカスタムラベル（イメージ分類）で判別してみました](https://dev.classmethod.jp/articles/rekognition-custom-labels-with-lawson/)
[kaggle](https://www.kaggle.com/)
[フリー素材.com](https://free-materials.com/)
[機械学習に使うデータセットの著作権について Qiita](https://qiita.com/rekia/items/907d24d0dd4a2c3dc2b8)