[Amazon SageMaker] Ground Truthで物体検出用のデータセットを作成してみました

2020.05.06

1 はじめに

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

Amazon SageMaker Ground Truth(以下、Ground Truth)は、データセットのラベル付けをチーム等に依頼して管理できるサービスですが、作業できるタスクの種類は、以下のようになっています。

  • 画像
    • Image Classification (Single Label)
    • Image Classification (Multi-label)
    • Bounding box
    • Semantic segmentation
    • Label verification
  • テキスト
    • Text Classification (Single Label)
    • Text Classification (Multi-label)
    • Named entity recognition
  • カスタム
    • Custom

ここDevelopers.IOでも、画像 - Image Classificationについては、下記で詳しく紹介されています。

今回は、物体検出で利用するためのデータセットである、画像 - Bounding boxについて、作業してみました。

2 S3への画像配置

S3に画像を配置するためのバケット(ここでは、sagemake-working-bucket-001としました)及び、フォルダ(ここでは、AHIRU_40-DOG_40としました)を準備します。

作成したフォルダに、画像をアップロードします。ここでは、80枚の画像をアップロードしました。

3 ラベリングジョブ

SageMakerのコンソールから、Grounf Truth > Labeling jobs > Create labeling jobと辿り、ラベリングジョブを作成します。

(1) Specify job details

最初に、ジョブの詳細を設定します。

Job name

ジョブの名前を指定します。

Input dataset locationInfo

マニフェストファイルが保存されているS3のパスを指定します。(バケットは、同一リージョンにある必要があります)

Output dataset locationInfo

最終的な出力を保存するS3のパスを指定します。

IAM Role

AmazonSageMakerFullAccessがアタッチされたロールを指定します。

もし、Input dataset locationInfoに指定するマニフェストファイルが、まだ無い場合は、create manifest fileをクリックすることで、自動生成が可能です。

create manifest fileで表示されたダイアログで、画像を配置したS3のバケットを入力して、Createを選択します。

画像を認識し、マニュフェストが生成できる旨のメッセージが表示されますが、Use this manifestをクリックすることで、これを利用(上書き)する事になります。

Task typoe

Rask CategoryimageTask SelectionBounding Boxとします。

全ての設定が完了したら、Nextを選択します。

(2) Select workers and configure tool

続いて、作業者の選択及び、ツールの構成(作業画面)を設定します。

Worker types

作業者の種類は、Amazon Mechanical TurkPrivate及び、Vendor managedの3種類から選択可能ですが、今回は、Privateとしています。

Private treams

予め作成されたプライベートチームから選択します。

なお、プライベートチームは、Labeling workforcesPrivateのタブを開くと、新規作成や、編集が可能です。

Bounding box labeling tool

作業者に表示される作業画面の編集ですが、上部の「説明文」と右側の「labels」の設定が必要です。

左側の「良い例、悪い例」などの部分は、H1 H2 Bなどのボタンを使用して自由に編集できますが、こちらは必須では有りません。

Createのボタンを押すと、ジョブの一覧に追加され、Statusは、In progressとなります。

4 アノテーション作業

指定したプライベートチームに所属する作業者が、ログインすると、ジョブが到着している事を確認できるでの、Start workingで作業を開始します。

ラベルを選択し、矩形を指定します。

全てのアノテーション作業が完了すると、ジョブの一覧で、ステータスがComplateとなります。(実際の作業が完了してから、Complateになるまで、少し時間がかかります)

ジョブを開くと、作業した内容を閲覧することも可能です。

5 output.manifest

Ground Truthによる最終的な出力は、Output dataset locationInfoで指定したパスの下のmanifests/output/output.manifestと言う名前で置かれます。

内容を確認すると、1画像のアノテーション情報が1行となっています。

一つの行を確認しやすようにJSONとして展開すると以下のようになります。

{
    "source-ref": "s3://sagemaker-working-bucket-001/AHIRU_40-DOG_40/AHIRU-1586397259091391.jpg",
    "AHIRU-40-DOG-40": {
        "annotations": [
            {
                "class_id": 0,
                "width": 260,
                "top": 200,
                "height": 276,
                "left": 207
            }
        ],
        "image_size": [
            {
                "width": 800,
                "depth": 3,
                "height": 600
            }
        ]
    },
    "AHIRU-40-DOG-40-metadata": {
        "job-name": "labeling-job/ahiru-40-dog-40",
        "class-map": {
            "0": "AHIRU"
        },
        "human-annotated": "yes",
        "objects": [
            {
                "confidence": 0.09
            }
        ],
        "creation-date": "2020-05-05T23:39:32.628761",
        "type": "groundtruth/object-detection"
    }
}

6 最後に

今回は、Ground Truthを使用して、物体検出で利用するためのデータセットを作成してみました。

こちらのデータセットは、SageMakerの組み込みアルゴリズム(object detection)や、Amazon RekognitionのCustom Labelsでそのまま利用可能です。


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