Amazon SageMaker ラベリングジョブを使用して画像データにラベルを付与してみる
こんにちは!よしななです。
今回は、Amazon SageMaker Ground Truth を使用して、S3 にアップロードした画像データにラベルを付与し、教師データを作ってみたいと思います。
目次
- 前提
- Amazon SageMaker Ground Truth とは
- 利用料金について
- プライベート
- Amazon Mechanical Turk
- ベンダー管理下
- 前準備
- S3 の作成
- Amazon SageMaker Ground Truth で画像にラベルを付与
- Step 1:ジョブの詳細の指定
- Step 2:ワーカーの選択とツールの設定
- ラベリングツールでラベル付与を行う
- 実行結果
- 最後に
前提
- OS
- Windows 11
- 本記事の実行には AWS アカウントが必要となります。
Amazon SageMaker Ground Truth とは
公式から引用:
Amazon SageMaker Ground Truth はフルマネージド型のデータラベル付けサービスで、機械学習のための高精度なトレーニングデータセットを簡単に構築することができます。カスタム、または組み込み済みのデータラベル付けワークフローを使用して、SageMaker Ground Truth コンソールから数分でデータのラベル付けを開始することができます。
公式ホームページ:
また、ラベル付けは、社内の限られたメンバーでプライベートチームを作成し、チーム内でラベル付け作業を分担したり、Amazon Mechanical Turk を指定し、AWS が指定する請負業者に依頼したり、Marketplace で依頼するといったことが可能です、
利用料金について
Amazon SageMaker Ground Truth の利用料金ですが、ラベル付与を行う作業者(ワーカーと呼ばれる)により異なります。
- 対象ワーカー
- Amazon Mechanical Turk
- AWS 側でラベル付けを行う業者を用意してくれる
- プライベート
- Amazon Cognite からメールアドレスで招待したメンバーでラベル付けを行う
- 社内メンバーに限定したい場合はこちらを使用
- ベンダー管理下
- データラベリングサービスの提供を専門とするサードパーティベンダーの厳選リスト
- AWS Marketplace から選べる
- Amazon Mechanical Turk
各ワーカーの料金は以下の通りです。
プライベート
ラベル付けをしたオブジェクト(画像、テキスト、動画)毎に料金が発生します。
料金は以下の通りです。(日本円は 1USD = ¥146.7 で試算)
ラベル付けをしたオブジェクトが 1,200,000 オブジェクトの場合、
(50,000 オブジェクト × 0.08USD) + (950,000 オブジェクト × 0.04USD) + (200,000 オブジェクト × 0.02USD) = 46,000USD / ¥6,161,400 となります。
Amazon Mechanical Turk
プライベートの料金に合わせて、以下の料金がラベル付けをしたオブジェクト(画像、テキスト、動画)毎に発生します。
料金は以下の通りです。(日本円は 1USD = ¥146.7 で試算)
Amazon Mechanical Turk にラベル付けを依頼したオブジェクトが 1,200,000 オブジェクト
ラベル付け精度を向上させるため3人のワーカーを手配した場合、
(50,000 オブジェクト × 0.08USD) + (950,000 オブジェクト × 0.04USD) + (200,000 オブジェクト × 0.02USD) + (3人のワーカー × 0.012USD × 1,200,000 オブジェクト) = 89,200 USD / ¥12,498,840 となります。
ベンダー管理下
こちらはラベル付けベンダー毎に料金に違いが発生します。
前準備
S3 の作成
アノテーションする画像データを格納 / アノテーション結果を出力するための S3 バケットを作成します。
データセットは以下 URL のものを使用しました。
Kaggle : https://www.kaggle.com/c/dogs-vs-cats/data
それぞれ、dog 画像と cat 画像を10枚ずつ引用し、以下のように S3 バケットにアップロードします。
Amazon SageMaker Ground Truth で画像にラベルを付与
コンソール画面 > Amazon SageMaker > ラベリングジョブ から ラベリングジョブの作成
をクリックすると、ジョブの作成画面に遷移します。
Step 1:ジョブの詳細の指定
以下の項目を入力します。
〇ジョブ名
ラベリングジョブ名を入力します。
今回はtest_nyoshida
を入力します。
〇ラベル属性名の指定
ラベリングジョブ実行結果のフォルダ名について、ジョブ名と同じ or 独自に指定ができます。
今回はジョブ名と同じにするため、チェックを入れないようにします。
〇入力データのセットアップ
自動化されたデータセットアップ or 手動によるデータのセットアップ を選択できます。
- 自動化されたデータセットアップ
- ラベルを付けるデータセットの S3 の場所を指定し、Ground Truth が自動的に接続してジョブにこのデータセットを使用するようにすることができます。
- 手動によるデータのセットアップ
- ラベルを付けるデータオブジェクトを識別するファイル (入力マニフェストファイル) の S3 の場所を指定します
今回は自動化されたデータセットアップ
を指定します。
〇データセットアップ - 入力データセットのS3の場所 / 出力データセットのS3の場所
Amazon SageMaker Ground Truth でラベル付けするデータが格納された S3 バケット のパス、
ラベリングジョブの実行結果の出力先を指定します。
〇データタイプ
ラベル付けするデータの形式を選択します。
画像、テキスト、動画、動画フレームから選択できます。
今回は画像を選択します。
〇IAMロール
Amazon SageMaker が S3 バケットにアクセスするための IAM ロールを指定します。
既存のロールを選択するか、Create new role
でAmazonSageMakerFullAccess
IAM ポリシーがアタッチされたロールを作成します。
必要な権限は以下となります。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "sagemakergroundtruth",
"Effect": "Allow",
"Action": [
"cognito-idp:CreateGroup",
"cognito-idp:CreateUserPool",
"cognito-idp:CreateUserPoolDomain",
"cognito-idp:AdminCreateUser",
"cognito-idp:CreateUserPoolClient",
"cognito-idp:AdminAddUserToGroup",
"cognito-idp:DescribeUserPoolClient",
"cognito-idp:DescribeUserPool",
"cognito-idp:UpdateUserPool"
],
"Resource": "*"
}
]
}
〇データセットアップの完了
ジョブ名
~IAMの作成
まで一通り完了したら、データセットアップの完了
をクリックします。以下の画面の通り入力データ接続に成功しました
が出力されればセットアップは完了となります。
〇タスクカテゴリ
今回ラベル付けを行うデータの形式を選択します。
以下が選択可能となります。
- 画像
- 単一ラベル
- 画像分類を行う作業者に、画像を見てそれぞれのクラスに分類してもらう
- ex.1つの画像を見て、それぞれ 犬 / 猫 に分類する
- マルチラベル
- 画像分類を行う作業者に、画像を見て1つまたは複数のクラスに分類してもらう
- 1つの画像を見て、その画像に写っているものをラベル付けしてもらう
- 境界ボックス
- 画像を見て、画像に指定されたオブジェクトの周りに境界ボックスを描画してもらう
- 意味論的なセグメント化
- 画像内の特定のオブジェクトやセグメントの周りにピクセルレベルのラベルを描画してもらう
- ラベルの検証
- すでにラベル付けされているデータに対し、ラベル付けが間違っていないかを確認してもらう
その他、動画に対しても作業者にどのようにラベル付けをしてほしいのか、細かく指示を出すことが可能です。
Step 2:ワーカーの選択とツールの設定
〇ワーカータイプ
冒頭でも説明した通り、画像 / テキスト / 動画データに対するラベル付けは人力で行います。
ラベル付けを実施する人員を以下から選ぶことができます。
- Amazon Mechanical Turk
- AWS 側でラベル付けを行う業者を用意してくれる
- プライベート
- Amazon Cognite からメールアドレスで招待したメンバーでラベル付けを行う
- 社内メンバーに限定したい場合はこちらを使用
- ベンダー管理下
- データラベリングサービスの提供を専門とするサードパーティベンダーの厳選リスト
- AWS Marketplace から選べる
今回は検証なので、プライベート
を選択します。
〇プライベートチーム
ワーカーをプライベート
にする場合、プライベートチームの作成が必要になります。
Amazon SageMaker > Ground Truth > ラベリングワークフォース を選択し、プライベートチームの作成をクリックします。
プライベートチームの作成 画面で以下の情報を入力します。
- チーム名の入力
- ワーカーの追加
- 新規作成のため`新しい Amazon Cognito ユーザーグループを作成する`を選択
次に、作成したプライベートチームに新しいワーカーを招待します。
Amazon SageMaker > Ground Truth > ラベリングワークフォース を選択し、新しいワーカーを招待をクリックします。
新しいワーカーの招待 画面で、招待したいメンバーのメールアドレスを入力します。
入力したメールアドレスに、以下のメールが届きます。
こちらのURLから画像のラベル付けを行っていきます。
〇画像分類 (単一ラベル) ラベル付けツール
ラベリングの指示を入力します。
画面上部にラベリングジョブの概要を入力し、画面左側でラベリングジョブの詳細を入力します。
画面右部で画像に付与するラベル名を入力します。
今回は、ラベリングジョブの概要部分に犬猫の画像分類タスク
を入力し、
ラベル名はdog
、cat
を入力します。
ラベリングツールでラベル付与を行う
ラベリングジョブが設定できたら、実際にラベル付け作業を行います。
作成したプライベートチームに登録したメールアドレスに、以下のようなメールが届いているのでこちらからラベル付けワークスペースにサインインします。
ログインに成功すると、以下のワークスペースが表示されます。
select an option
から画像にラベルを付与します。
ラベルの付与が完了したらsubmit
をクリックすると次の画像に遷移します。
全ての画像のラベル付けが完了すると、ラベリングジョブのステータスが完了になります。
実行結果
ラベル付けの出力結果が指定した S3 バケットに保存されます。
このデータを用いて、機械学習モデルの構築などが行えるようになります。
以上で、「Amazon SageMaker ラベリングジョブを使用して画像データにラベルを付与してみる」は以上となります。
最後に
Amazon SageMaker Ground Truth は名前は聞いたことはあるものの、どんなサービスかは詳しく知らないところもあったので、今回は勉強になりました。
ここまで読んでいただきありがとうございました!