[Amazon SageMaker] オブジェクト検出で利用可能な3種類のデータ形式のそれぞれの指定方法

2020.05.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

1 はじめに

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

Amazon SageMaker(以下、SageMaker)の組み込みアルゴリズムである「オブジェクト検出」では、トレーニングの入力として以下の3種類のデータ形式が利用可能です。

形式 入力モード
RecordIO形式 PIPE,FILE
イメージ形式 FILE
拡張マニフェストイメージ形式 PIPE

今回は、コンソールからトレーニングジョブを作成する際のそれぞれの指定方法について整理してみました。

確認のために使用したデータは、以下のようなものです。

  • 画像数 50
  • ラベル (AHIRU×50、DOG×10)

2 RecordIO形式

(1) データセットの準備

RecordIO形式のデータは、以下の手順で作成しました。

[Amazon SageMaker] Amazon SageMaker Ground Truth で作成したデータをオブジェクト検出で利用可能なRecordIO形式に変換してみました

全データ: 50件 [0]DOG: 10件 [1]AHIRU: 50件
DOG => 8:2 残り:40件
AHIRU => 30:10 残り:0件
Train: 38件

「学習用38件」「検証用12件」のRecordIO形式のデータをS3に配置します。

  • s3://sagemaker-working-bucket-001/DataSetSample/train.rec
  • s3://sagemaker-working-bucket-001/DataSetSample/validation.rec

(2) データセットの指定

データセットの指定は、以下のとおりです。(その他はデフォルト値)

  • Channel name

train及び、validation

  • Content type

application/x-recordio

  • S3 location

S3のURL

3 イメージ形式

(1) データセットの準備

イメージ形式のデータは、以下の手順で作成しました。

[Amazon SageMaker] Amazon SageMaker Ground Truth で作成したデータをオブジェクト検出で利用可能なイメージ形式に変換してみました

全データ: 50件 [0]DOG: 10件 [1]AHIRU: 50件
DOG => 8:2 残り:40件
AHIRU => 30:10 残り:0件

「学習用38件」「検証用12件」のイメージ形式のデータをS3に配置します。

  • s3://sagemaker-working-bucket-001/DataSetSample/train (学習用画像)
  • s3://sagemaker-working-bucket-001/DataSetSample/train_annotation(学習用アノテーション)
  • s3://sagemaker-working-bucket-001/DataSetSample/validation(検証用画像)
  • s3://sagemaker-working-bucket-001/DataSetSample/validation_annotation(検証用アノテーション)

(2) データセットの指定

データセットの指定は、以下のとおりです。(その他はデフォルト値)

  • Channel name

train、train_annotation、validation及び、validation_annotation

  • Content type

application/x-image

  • S3 location

S3のURL

4 拡張マニフェストイメージ形式

(1) データセットの準備

データは、以下の手順で作成しました。

[Amazon SageMaker] Amazon SageMaker Ground Truth で作成したデータを使用してオブジェクト検出でモデルを作成してみました

全データ: 50件
[0]DOG: 10件
[1]AHIRU: 50件
DOG =>
train :8
validation :2
残り:40件
AHIRU =>
train :30
validation :10
残り:0件

「学習用38件」「検証用12件」のデータをS3に配置します。

  • s3://sagemaker-working-bucket-001/DataSetSample/train
  • s3://sagemaker-working-bucket-001/DataSetSample/validation
  • s3://sagemaker-working-bucket-001/DataSetSample/images (画像ファイル)

※ 画像ファイルのURLは、train及び、validationのJSONの中で指定されるので、上記の関係位置である必要はありません。

(2) データセットの指定

データセットの指定は、以下のとおりです。(その他はデフォルト値)

  • Channel name

train及び、validation

  • input mode

Pipe

  • Record wrapper

RecordIO

  • S3 data type

AugmentedManifestFile

  • AugumentedManifestFile attribute names

source-ref/AHIRU-Project

  • S3 location

S3のURL

AugumentedManifestFile attribute namesに指定しているのは、JSONを読み込むための各属性です(最後の-metadataは必要ない)。今回のデータは、下記のようになっているので、「source-ref」と「AHIRU-Project」を指定しています。

{
"source-ref":"s3://xxxxxxx/xxxx.jpg",
"AHIRU-Project":{
"annotations":[
(略)
],
"image_size":[
(略)
]
}
"AHIRU-Project-metadata":{
"job-name":"xxxxx"
(略)
}
}

S3 data typeの設定では、ManifestFileと間違わないように注意が必要です。 また、Record wrapperRecordIOが無いと、うまく動作しませんでした。

5 最後に

今回は、オブジェクト検出のトレーニングをコンソール上から行う場合の、データの指定方法について整理してみました。

ちょっと、ハマったのは、「拡張マニフェストイメージ形式」の場合に、Record wrapperRecordIOを指定しないとうまく動作しなかったところです。改めてドキュメントを読み直すと、ちゃんと書いてありました・・・

6 参考にさせて頂いたリンク

Amazon SageMaker Ground Truth でラベル付けしたデータセットを使用して、モデルを簡単にトレーニングする