[Amazon SageMaker] 動画から生成したデータセットで商品棚の商品を検出してみました

2020.05.15

1 はじめに

CX事業本部の平内(SIN)です。

前回、回転台を使って動画を撮影し、イメージ分類用のデータセットを作ってみました。

今回は、上記の要領で生成したデータセットで、棚に釣られている商品を検出してみた記録です。

以下が、動作している様子です。

2 動画

撮影した動画は、17個 (17ラベル) です。

少し照明を変化させながら、800✕600で3回転分ぐらい撮影して、20MByte程度となってます。

フレーム数は、1400〜1500です。

3 Ground Truth形式

最初に、動画からGround Truth形式のデータセットを作成します。 生成数を200に設定して各動画から静止画を切り出し、3400(17✕200)件のデータセットができました。

output.manifestは、3400行となります。

4 Image形式

続いて、画像分類アルゴリズムで利用するために、イメージ形式に変換します。 学習用と検証用で8対2に分割して、それぞれ、2720件と680件になっています。

全データ: 3400件 
PORIPPY(GREEN) (200件) => 160:40
OREO (200件) => 160:40
CUNTRY_MAM (200件) => 160:40
PORIPPY(RED) (200件) => 160:40
BANANA (200件) => 160:40
CHEDDER_CHEESE (200件) => 160:40
PRETZEL(YELLOW) (200件) => 160:40
FURUGURA(BROWN) (200件) => 160:40
NOIR (200件) => 160:40
PRIME (200件) => 160:40
CRATZ(RED) (200件) => 160:40
CRATZ(GREEN) (200件) => 160:40
PRETZEL(BLACK) (200件) => 160:40
CRATZ(ORANGE) (200件) => 160:40
ASPARA (200件) => 160:40
FURUGURA(RED) (200件) => 160:40
PRETZEL(GREEN) (200件) => 160:40

train:2720 validation:680

サイズは、画像とラベルを併せて300Mbyte程度です。

データセットは、S3にアップロードしています。

$ aws s3 sync . s3://sagemaker-working-bucket-002/Sweets/ --p developer

5 Traning

トレーニングに要した時間は、ml.p2.8xlarge1 で約8分でした。(試行錯誤した時間は含まれてません)

パラメータは、最終的に、以下のようになりました。

初期学習レート(learning_rate)は、0.1とか0.01では、全然学習が進まなくて、0.001mini_batch_size=32でやっと進むようになりました。ネットワークのレイヤー数(num_layers)は、当初18から始めたのですが、一定以上の精度が出なくて、最終的に50となりました。

epochは、一旦、30と設定していますが、early_stoppingで適当なところで止まります。

推論の速度向上のため、サイズを下げようとして、保存のサイクル(checkpoint_frequency)4となっています。

以下は、CloudWatch Logsからaccuracyに関するログを抜き出し、整形したものです。early_stoppingによりepochは、20回で止まってます。

epoch   Train-accuracy  Validation-accuracy
-----------------------------------------
0       0.173   0.149
1       0.185   0.381
2       0.45    0.695
3       0.675   0.824
4       0.793   0.874
5       0.867   0.943
6       0.888   0.942
7       0.886   0.967
8       0.886   0.92
9       0.902   0.964
10      0.887   0.954
11      0.896   0.96
12      0.901   0.932
13      0.924   0.972
14      0.933   0.991
15      0.935   1.0
16      0.933   0.997
17      0.967   0.997
18      0.969   0.999
19      0.973   1.0
20      0.982   1.0
Early stopping criteria met.

出来上がったモデルのサイズは、417MByteとなっています。

6 最後に

今回は、回転台で撮影したデータセットで実際の商品棚を検出してみました。最終的に、それなりの精度が出たのですが、実際は、結構試行錯誤してます。

動画のフレーム数から、1万件ぐらいのデータセットも作成可能なのですが、あんまり多いと、精度が0.92〜0.95ぐらいで頭落ちになって、それ以上、上げることができませんでした。

本日の成果は・・・・「3回転で200件ぐらいが丁度いい」 を私が学習したことです。