Amazon Web Services ブログ

Amazon SageMaker Ground Truth ジョブをチェーン化して、ラベルを段階的に作成する

Amazon SageMaker Ground Truth は、機械学習用の高精度なトレーニングデータセットを構築するお手伝いをします。自動ラベル付け機能を使用して、ラベル付けコストを最大 70% 下げることができます。

このブログ投稿では、Amazon SageMaker Ground Truth チェーン機能について、いくつかの例とデータセットのラベル付けの可能性について説明しています。Amazon SageMaker Ground Truth がすでにラベル付けされているオブジェクトを判別し、自動データラベル付けモード用にデータを最適化するため、連鎖により時間とコストが大幅に削減されます。前提条件として、Amazon SageMaker Ground Truth を使用して階層型ラベル分類法を作成するという投稿を確認してください。この記事では、マルチステップの階層ラベル付けを実現する方法と、拡張マニフェスト機能の使用方法に関するドキュメントを示しています。

ラベリングジョブのチェーン

チェーンは、次のシナリオで役立ちます。

  • 分的に完了したラベル付けジョブ – ラベルがほとんど含まれていない入力マニフェストがあり、残りはラベル付けされているラベル付けジョブです。
  • 失敗したラベル付けジョブ – いくつかのラベルを生成し、残りのラベルが失敗または期限切れになったラベル付けジョブです。
  • 停止されたラベル付けジョブ – ユーザーが停止したラベル付けジョブです。停止する前にいくつかのラベルが生成された可能性があります。

チェーン機能により、これらの以前のラベルを再利用し、残りのラベルを一貫して取得できます。詳細については、ラベル付けジョブのチェーンを参照してください。

チェーンでは、前のジョブの出力を後続のジョブの入力として使用します

以下は、新しいチェーンラベル付けジョブのブートストラップに使用されるアーティファクトです。

  1. LabelAttributeName
  2. 前のラベル付けジョブからマニフェストファイルの内容を出力する
  3. モデル (利用可能な場合)

Amazon Sagemaker Ground Truth コンソールからジョブを開始する場合、デフォルトでは、LabelingJob 名が LabelAttributeName として使用されます。詳細については、LabelAttributeName を参照してください。

部分的に完了したジョブをチェーンしている場合、コンソールは親ジョブの LabelAttributeName を使用して、既にラベル付けされているオブジェクトとラベル付けされていないオブジェクトを決定します。その結果、ラベル付けされていないオブジェクトまたは以前に失敗したオブジェクトのみがラベル付けのために送信されます。別の LabelAttributeName を指定することでこの動作を上書きできます。その場合、以前のラベルはカウントされず、新しいラベル付けジョブはラベル付けのためにすべてのデータを送信します。このプロセスについては、この投稿の後半で詳しく説明します。

API または SDK を使用している場合、これらのフィールドを適切に構成する必要があります。これについては、この投稿で後述します。

自動データラベル付けを有効にすると、Amazon Sagemaker Ground Truth は LabelAttributeName を使用して、自動データラベル付けモードを開始するために使用する既存のラベルを決定し、早期にトレーニングする資格があるかどうかを確認します。既存のラベルで機械学習の最大のメリットを享受できます。ラベルを再び人間のラベラーに送信する代わりに既存のラベルを使用するため、ラベル付けタスクのコストが削減されます。

ソリューションの概要

次の図は、このソリューションのワークフローを示しています。

ステップ 1: ラベルのない初期データセットの構築

ステップ 2: ラベル付けジョブを起動して停止する (停止/失敗ステータスをシミュレートする)

ステップ 3: 最初のジョブをチェーンする

ステップ 1: ラベルのない初期データセットの構築

最初のステップは、ラベルのない初期データセットを構築することです。このプロセスの詳細については、Amazon SageMaker Ground Truth を使用して階層型ラベル分類法を作成するのステップ 1 を参照してください。

この投稿では、約 3,547 個の画像を含む CBCL StreetScenes データセットを使用します。完全なデータセットは約 2 GB です。ラベル付けのために、データセットの一部またはすべてを S3 にアップロードすることを選択できます。以下の手順を実行します。

  1. zip ファイルをダウンロードします。
  2. .zip アーカイブをフォルダに解凍します。デフォルトで、フォルダーは Output です。
  3. 使用する小さなサンプルデータセットを作成するか、データセット全体を使用してください。

入力マニフェストの作成については、Amazon SageMaker Ground Truth を使用して階層型ラベル分類法を作成するのステップ 2 を参照してください。

マニフェストの行は次のコードとして表示されます。

{"source-ref":"s3://bucket_name/datasets/streetscenes/SSDB00001.JPG"}
{"source-ref":"s3://bucket_name/datasets/streetscenes/SSDB00006.JPG"}
{"source-ref":"s3://bucket_name/datasets/streetscenes/SSDB00016.JPG"}
... ...

ステップ 2: ラベル付けジョブを起動して停止する

コンソールから、画像分類タスクタイプを使用してラベル付けジョブを開始し、写真を車両、信号機、または歩行者として分類します。以前に作成したマニフェストファイルを入力として使用し、Streetscenes-Job1 をジョブ名として使用します。ラベリングジョブの開始については、Amazon SageMaker Ground Truth – 高い精度のデータセットを構築し、ラベル付けのコストを最大 70% 削減を参照してください。

停止状態または失敗状態をシミュレートするために、この投稿では 1,000 ラベル後にジョブを手動で停止しました。

ラベリングジョブの出力は、対応するラベルがマニフェストの各 JSON 行で拡張された拡張マニフェストです。これらの一部にはラベルがあり、一部にはラベルがありません。次のコードをご覧ください。

1. {
  "source-ref": "s3://bucket_name/datasets/streetscenes/SSDB00001.JPG",
  "Streetscenes-Job1": 0,
  "Streetscenes-Job1-metadata": {
    "confidence": 0.95,
    "job-name": "labeling-job/streetscenes-job1",
    "class-name": "vehicles",
    "human-annotated": "yes",
    "creation-date": "2019-04-09T21:13:37.730999",
    "type": "groundtruth/image-classification"
  }
}
2. {"source-ref":"s3://bucket_name/datasets/streetscenes/SSDB00002.JPG"}
3. {
  "source-ref": "s3://bucket_name/datasets/streetscenes/SSDB00003.JPG",
  "Streetscenes-Job1": 1,
  "Streetscenes-Job1-metadata": {
    "confidence": 0.95,
    "job-name": "labeling-job/streetscenes-job1",
    "class-name": "traffic signals",
    "human-annotated": "yes",
    "creation-date": "2019-04-09T21:25:51.111094",
    "type": "groundtruth/image-classification"
  }
}
4. {"source-ref":"s3://bucket_name/datasets/streetscenes/SSDB00004.JPG"}
5. {"source-ref":"s3://bucket_name/datasets/streetscenes/SSDB00005.JPG"}
6. {"source-ref":"s3://bucket_name/datasets/streetscenes/SSDB00006.JPG"}
7. {"source-ref":"s3://bucket_name/datasets/streetscenes/SSDB00007.JPG"}
8.
  "source-ref": "s3://bucket_name/datasets/streetscenes/SSDB00008.JPG",
  "Streetscenes-Job1": 0,
  "Streetscenes-Job1-metadata": {
    "confidence": 0.95,
    "job-name": "labeling-job/streetscenes-job1",
    "class-name": "vehicles",
    "human-annotated": "yes",
    "creation-date": "2019-04-09T21:28:54.752427",
    "type": "groundtruth/image-classification"
  }
}
...
...
...

さまざまなモダリティ形式の詳細については、出力データを参照してください。

ステップ 3: 最初のジョブをチェーンする

これで、Streetscenes-Job1 をチェーンできます。ジョブのラベル付けで、アクションドロップダウンからチェーンを選択します。

コンソールは、以前停止したジョブから出力マニフェストを取得するときに、入力データセットの場所を事前入力します。ラベル属性名は前のジョブと同じままです。

ジョブの開始後、コンソールにはカウンターが 1,000 として表示され、既にラベル付けされたデータが反映されます。

ジョブが完了すると、すべてのラベルが生成されます。

次のコードは、出力マニフェストからのものです。出力マニフェストのすべての行にはラベルがあります

1. {
  "source-ref": "s3://bucket_name/datasets/streetscenes/SSDB00006.JPG",
  "Streetscenes-Job1": 3,
  "Streetscenes-Job1-metadata": {
    "confidence": 0.59,
    "job-name": "labeling-job/streetscenes-job1-chain",
    "class-name": "None",
    "human-annotated": "yes",
    "creation-date": "2019-04-10T01:37:07.663801",
    "type": "groundtruth/image-classification"
  }
}

2. {
  "source-ref": "s3://bucket_name/datasets/streetscenes/SSDB00007.JPG",
  "Streetscenes-Job1": 0,
  "Streetscenes-Job1-metadata": {
    "job-name": "labeling-job/streetscenes-job1-chain",
    "confidence": 0.99,
    "class-name": "vehicles",
    "type": "groundtruth/image-classification",
    "creation-date": "2019-04-10T01:23:05.309990",
    "human-annotated": "no"
  }
}

...

シリーズのチェーン

前のシナリオでは、1 つのレベルのチェーンのみが示されていました。チェーンは、あるジョブの出力を別のジョブへの入力としてフィードできる強力な機能です。

チェーンのシナリオ

次の表は、チェーンを試すことができるいくつかのシナリオを示しています。AL は、自動データラベル付けモードが有効であることを示します。Non-AL は、自動データラベル付けモードが有効になっていないことを示します。詳細については、Amazon SageMaker Ground Truth と自動化されたデータのラベル付けによる低コストでのデータのアノテーションを参照してください。

親のラベル付けジョブ 連鎖ラベル付けジョブ 詳細
1 Non-AL Non-AL Non-AL モードでラベル付けジョブを開始しましたが、すべてのオブジェクトにラベル付けする前に失敗または停止しました。Non-AL モードでジョブを再開して、残りのラベルのないオブジェクトに人間がラベルを付けたいとします。
2 Non-AL AL Non-AL モードでラベル付けジョブを開始しましたが、すべてのオブジェクトにラベル付けする前に失敗または停止しました。AL モードでジョブを再開して、既存のラベルに基づいて残りのラベルのないオブジェクトに自動的にラベルを付けます。
3 AL Non-AL AL モードでラベル付けジョブを開始しましたが、すべてのオブジェクトにラベル付けする前に失敗または停止しました。Non-AL モードでジョブを再開して、残りのラベルのないオブジェクトに人間がラベルを付けたいとします。
4 AL AL AL モードでラベル付けジョブを開始しましたが、すべてのオブジェクトにラベル付けする前に失敗または停止しました。AL モードでジョブを再開して、既存のラベルまたは事前トレーニング済みのモデルに基づいて、残りのラベルのないオブジェクトに自動的にラベルを付けます。
5 サードパーティーのラベル付け Non-AL 他のソース (Amazon SageMaker Ground Truth またはサードパーティー) からいくつかのラベルを取得し、ラベル付きオブジェクトとラベルなしデータを含むマニフェストを持っています。Non-AL モードで新しいジョブを再開して、既存のラベルに基づいて残りのラベルのないオブジェクトに自動的にラベルを付けます。
6 サードパーティーのラベル付け AL 他のソース (Amazon SageMaker Ground Truth またはサードパーティー) からいくつかのラベルを取得し、ラベル付きオブジェクトとラベルなしデータを含むマニフェストを持っています。AL モードで新しいジョブを再開して、既存のラベルに基づいて残りのラベルのないオブジェクトに自動的にラベルを付けます。

これらのシナリオの一部では、AL モードで、モデルの生成後にジョブが停止した場合、後続の AL ジョブは最初のステップのモデルを使用するため、トレーニング時間が短縮されます。詳細については、Amazon SageMaker Ground Truth: データラベリングを高速化するための事前トレーニング済みモデルの使用を参照してください。

また、事前にラベル付けされたオブジェクトが十分にある場合、これらのラベルをブートストラップして、自動ラベル付けループのトレーニングに設定することができます。このメソッドは、人間のアノテーターからラベルを取得しないため、時間とコストを節約できます。

サードパーティーのラベルを使用

このセクションでは、前の表の最後の 2 つのシナリオについて詳しく説明します。Amazon Sagemaker Ground Truth ラベル形式に準拠している限り、サードパーティーのラベルを持ち込むことができます。詳細については、出力データをご参照ください。

たとえば、マニフェストに 989/3450 サードパーティーラベルが含まれるジョブがあるとします。サードパーティーのラベルを含む次のコードを使用して、ラベル付けジョブを開始できます。

{
  "source-ref": "s3://bucket-name/datasets/streetscenes/SSDB03295.JPG",
  "third-party-label": 0,
  "third-party-label-metadata": {
    "confidence": 0.95,
    "job-name": "labeling-job/third-party-label",
    "class-name": "vehicles",
    "human-annotated": "yes",
    "creation-date": "2019-04-09T21:25:51.110794",
    "type": "groundtruth/image-classification"
  }
}
...

ジョブが開始すると、カウンターが自動的に更新されます。

時間とコストの節約

チェーンは、時間とコストを節約するための多くの利点を提供します。

まず、既にラベル付けされているオブジェクトは再度処理されません。さらに、自動データラベル付けが有効になっている場合は、できるだけ早く自動ラベル付けが試行されます。データがすでに部分的にラベル付けされている場合、作業セットを全従業員に送信することにより検証セットが収集されます。その後、部分的にラベル付けされた入力データをブートストラップしてトレーニングセットにし、Amazon Sagemaker Ground Truth は、既存のラベルの数に応じて自動ラベル付けを実行します。これにより、データの自動ラベル付けプロセスが促進されます。トレーニングがより早く開始され、トレーニングジョブの全体的な時間が短縮されます。

さらに、ラベル付きオブジェクトをスキップすると、コストが削減されます。既存のデータから生成された ML モデルを使用することにより、トレーニングコストも削減されます。

API を使用したチェーン

API または AWS CLI を使用してチェーンを実行することもできます。詳細については、create-labeling-job を参照してください。

失敗したジョブを再開する場合は、前のジョブと同じ LabelAttributeName を使用して、失敗したジョブと同じ create-labeling-job 情報を入力し、チェーンされたジョブの入力として出力マニフェストファイルを使用する必要があります。

同様に、すべてのオブジェクトを異なる種類のラベルでラベル付けするためにジョブをチェーン化する場合は、前のラベル付けジョブとは異なる LabelAttributeName を使用する必要があります。

次のコードは、チェーン CLI の例です。

>> aws sagemaker create-labeling-job --labeling-job-name "Streetscenes-Job1-chain" --label-attribute-name "Streetscenes-Job1" --input-config DataSource={S3DataSource={ManifestS3Uri="s3://<bucket_name>/streetscenes/output/Streetscenes-Job1/manifests/output/output.manifest"}},DataAttributes={ContentClassifiers=["FreeOfPersonallyIdentifiableInformation"]} --output-config S3OutputPath="s3://<bucket_name>/streetscenes/output/Streetscenes-Job1-chain/" --role-arn "arn:aws:iam::accountID:role/<rolename>" --label-category-config-s3-uri "s3://<path_to_label_category_file>/labelcategory.json" --stopping-conditions MaxPercentageOfInputDatasetLabeled=100 --human-task-config WorkteamArn="arn:aws:sagemaker:region:394669845002:workteam/public-crowd/default",UiConfig={UiTemplateS3Uri="s3://<bucket_name>/template.liquid"},PreHumanTaskLambdaArn="arn:aws:lambda:us-west-2:081040173940:function:PRE-ImageMultiClass",TaskKeywords="Images","classification",TaskTitle="Image Categorization",TaskDescription="Categorize images into specific classes",NumberOfHumanWorkersPerDataObject=3,TaskTimeLimitInSeconds=300,TaskAvailabilityLifetimeInSeconds=21600,MaxConcurrentTaskCount=1000,AnnotationConsolidationConfig={AnnotationConsolidationLambdaArn="arn:aws:lambda:us-west-2:081040173940:function:ACS-ImageMultiClass"}

このコードは、最初のジョブ Streetscenes-Job1 と同じラベル属性名 (label-attribute-name) を使用します。

まとめ

この投稿では、Amazon SageMaker Ground Truth チェーン機能が時間節約とコスト削減のメリットを提供する方法について示しました。これは非常に強力な機能であり、この投稿は Amazon SageMaker Ground Truth チェーンでできる作業のほんの一部にすぎません。コメント欄でぜひご意見をお聞かせください。ドキュメントの「はじめに」ページにアクセスして、Amazon Sagemaker Ground Truth を開始できます。


著者について

Priyanka Gopalakrishna は、Amazon AI のソフトウェアエンジニアです。彼女は、機械学習のために分散システムを使用したスケーラブルなソリューションの構築に取り組んでいます。余暇には、ハイキングを満喫し、宇宙科学に関連するものを楽しむか、カルビンとホッブスの古き良きストリップを読みます。

 

 

 

Zahid Rahman は AWS AI の SDE であり、複雑な機械学習の問題を解決するために大規模な分散システムを構築しています。彼は主に、ビッグデータの問題を「分割して征服する」革新的な技術に焦点を当てています。