[Amazon Sagemaker] Ground Truthによるビデオラベル付けを試してみました
1 はじめに
CX事業本部の平内(SIN)です。
先日、Amazon Sagemaker Ground Truth(以下、Ground Truth)でビデオのラベル付けがサポートされるようになりました。
新機能 – Amazon SageMaker Ground Truth による動画のラベル付け
こちらを利用すると、動画に対するアノテーション作業が、効率的に行えるということで、とりあえず、試してみました。
以下、作業している様子です。
2 動画の配置
元となる画像データは、動画(MP4)のままでも、また、フレームごと切り出した連続した画像のセットでも利用可能です。
今回は、動画(MP4)を元データとし、Ground Truthでフレームごとの画像を自動的に生成する要領で試してみました。
※使用するGround Truthと同じリージョンに配置する必要があります。
3 ラベリングジョブ作成
(1) 入力
ジョブ名(今回は、Video-Annotation-Sample-001としました)を指定し、S3 location for input datasetsで動画を配置したS3をバケットを選択します。
(2) 出力先
S3 location for output datasetsには、出力先を指定します。
(3) データセット
下記のように設定し、下記のsetupボタンを押すことで、入力バケットにある動画(MP4)からフレームを抽出してデータ画像を生成します。
Frame extractionでは、切り出すフレームの間隔を指定できますが、あまり間隔を開けすぎると、せっかくの自動推定がうまく機能しないので、動画の変化具合によって注意が必要そうです。
- Data type : Video - individual frames
- Video frames : Extract frames from videoInfo
- Frame extraction : Use every 60 frame from a video to create a labeling task.
なお、Use all frames extracted from the video to create a labeling task.の方にチェックすると、時前で抽出したフレームを使用して、ラベリングタスクを作成します。
使用するロールを指定して、Complate data setupボタンを押すと、フレームの切り出しが開始されます。
下記は、生成が完了した様子です。
生成されたデータは、入力に指定したバケットに展開されます。
dataset-20200731T073094.manifest
{ "source-ref": "s3://sagemaker-working-bucket-000/VideoAnotation/input/AHIRU_AND_TOMATO.mp4/AHIRU_AND_TOMATO.mp4-sequence-1596148398.json" }
dataset-20200731T073094.manifest.json
{ "document-version": "2018-11-28", "labels": [ { "label": "test_label" }, { "label": "nested" }, { "label": "nested2" } ] }
動画ファイルと同じ名前のフォルダには、切り出された画像が出力されています。
AHIRU_AND_TOMATO.mp4-sequence-1596148398.json
{ "seq-no":1, "prefix":"s3://sagemaker-working-bucket-000/VideoAnotation/input/AHIRU_AND_TOMATO.mp4/", "number-of-frames":540, "frames":[ { "frame-no":0, "frame":"frame_0000.jpeg" }, { "frame-no":1, "frame":"frame_0001.jpeg" }, { "frame-no":2, "frame":"frame_0002.jpeg" },
(4) タスク
タスクのタイプVideoとし、Video object detection
(5) ワーカ
今回は、自分で作業してみるということで、プライベートなチームをワーカーとしました。
説明と、ラベル(ここでは、AHIRUとTOMATOの2つを設定しました)を指定してジョブを生成します。
4 ラベリング作業
チームに登録されているユーザーでログインすると、作成したジョブが確認できます。
ラベルを選択してアノテーションの作業に入ります。
コマごとにラベリング作業を行いますが、次を予測のボタンを押すと、次のフレームに移動すると同時に、現在のフレームで設定されているアノテーションを元に、予測されたアノテーションが自動的に追加されます。
予測されたアノテーションが、問題なければ、そのフレームでの作業は完了です。もし、ズレがある場合は、ここで修正して、また次のフレームに移ります。
ちょっと注意が必要なのは、既にアノテーションが設定されているフレームに、次を予測で移動すると、更に予測されたアノテーションも追加されるので、ボックスがダブルことになります。 右側の設定済みラベル数に注意しながら作業を進めて下さい。
次を予測で追加されるアノテーションは、時々大きくずれる事もありますが、うまく追従していると思います。
今回試した動画は、540フレームでしたが、2種類のラベルを設定するぐらいなら、正直な所、大した作業では無いという印象です。
最後に作業完了のボタンを押すと、ジョブは完了となります。
5 出力データ
完了したデータセットは、出力先に指定した場所に「ジョブ名」のフォルダ配下に出力されます。
output/Video-Anotation-Sample-001/manifests/output/output.manifest
output.manifestを確認すると、ソースが、先に確認したフレーム画像の一覧jsonとなっており、アノテーション情報は、SeqLabel.jsonとなっています。また、クラス名が記録されています。
{ "source-ref": "s3://sagemaker-working-bucket-000/VideoAnotation/input/AHIRU_AND_TOMATO.mp4/AHIRU_AND_TOMATO.mp4-sequence-1596148398.json", "Video-Anotation-Sample-001-ref": "s3://sagemaker-working-bucket-000/VideoAnotation/output/Video-Anotation-Sample-001/annotations/consolidated-annotation/output/0/SeqLabel.json", "Video-Anotation-Sample-001-ref-metadata": { "class-map": { "0": "AHIRU", "1": "TOMATO" }, "job-name": "labeling-job/video-anotation-sample-001", "human-annotated": "yes", "creation-date": "2020-07-31T01:51:26.543000", "type": "groundtruth/video-object-detection" } }
SeqLabel.jsonでは、、各画像ごとのアノテーション情報が確認できます。
frame-noは、0から順に並んでいるわけでは無いようなので、フレーム順に何かを検討する場合は、注意が必要です。
output/Video-Anotation-Sample-001/annotations/consolidated-annotation/output/0/SeqLabel.json
{ "detection-annotations": [ { "annotations": [ { "height": 220, "width": 268, "top": 377, "left": 24, "class-id": "1", "label-category-attributes": {} } ], "frame-no": "0", "frame": "frame_0000.jpeg" }, { "annotations": [ { "height": 220, "width": 268, "top": 377, "left": 24, "class-id": "1", "label-category-attributes": {} } ], "frame-no": "1", "frame": "frame_0001.jpeg" }, { "annotations": [ { "height": 220, "width": 268, "top": 377, "left": 24, "class-id": "1", "label-category-attributes": {} } ], "frame-no": "2", "frame": "frame_0002.jpeg" }, { "annotations": [ { "height": 220, "width": 268, "top": 377, "left": 24, "class-id": "1", "label-category-attributes": {} } ], "frame-no": "3", "frame": "frame_0003.jpeg" },
6 最後に
今回は、Ground Truthの新しい機能で、動画から物体検出用のデータセットの作成を試してみましたが、推測により、アノテーション作業が格段に捗ることが体験できました。
なお、残念ながら、SageMaker組み込みのObject Detectionでも、ここで生成されたoutput.manifestを、そのまま利用することは出来ないようなので、適切な変換は必要です。