この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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を、そのまま利用することは出来ないようなので、適切な変換は必要です。