Main Content

カスタム JSON ファイルおよび COCO JSON ファイルへのグラウンド トゥルース オブジェクトのエクスポート

この例では、グラウンド トゥルース オブジェクトをカスタム データ形式の JavaScript Object Notation (JSON) ファイルと COCO [1] データ形式の JSON ファイルにエクスポートする方法を説明します。

JSON ファイルを解析して、機械学習フレームワークの学習と推論に使用できます。カスタム データ形式の JSON ファイルの形式は、COCO データ形式に似ています。違いは、JSON ファイルのラベル注釈を表す形式が、グラウンド トゥルース オブジェクトでサポートされている、さまざまなラベル タイプが含まれるように変更されていることです。

この例では、ビデオ ラベラー アプリを使用して以前に生成されたラベルを含むグラウンド トゥルース オブジェクトを使用します。

ラベラー アプリからグラウンド トゥルース オブジェクトを JSON ファイルにエクスポートするには、次の手順に従います。

  1. イメージ ラベラー アプリまたはビデオ ラベラー アプリを使用して、イメージまたはビデオにそれぞれラベルを付けます。

  2. ラベルをファイルまたはワークスペースにエクスポートして、グラウンド トゥルース オブジェクトを生成します。

  3. この例の手順に従います。

グラウンド トゥルース オブジェクトの読み込み

グラウンド トゥルース オブジェクトを読み込みます。

load("VehicleImageSequenceGroundTruth.mat")

ラベル定義を表示します。

VehicleImageSequenceGroundTruth.LabelDefinitions
ans=3×6 table
      Name        Type               LabelColor                 Group       Description     Hierarchy  
    _________    _______    _____________________________    ___________    ___________    ____________

    {'Car'  }    Polygon     0.5862     0.8276     0.3103    {'Vehicle'}    {0x0 char}     {1x1 struct}
    {'Lane' }    Line       0.49412    0.18431    0.55686    {'Road'   }    {0x0 char}     {0x0 double}
    {'Sunny'}    Scene            1    0.41176    0.16078    {'None'   }    {0x0 char}     {0x0 double}

情報とライセンス情報の追加 (オプション)

名前と値のペア Info および License を指定して、注釈にメタデータを追加します。

info = struct( ...
    'year', 2020, ...
    'version', '1', ...
    'description', 'Vehicles Dataset', ...
    'date_created', datetime ...
    );

licenses = struct( ...
    'url', {'www.mathworks.com', 'www.mathworks.com'}, ...
    'name', {'License 1', 'License 2'} ...
    );

カスタム データ形式 JSON ファイルへのグラウンド トゥルース オブジェクトのエクスポート

関数 exportGroundTruthToJSON を使用して、グラウンド トゥルース オブジェクトを JSON ファイルにエクスポートします。

関数 exportGroundTruthToJSON は、グラウンド トゥルース オブジェクトのデータを解析し、以下で説明するカスタム データ形式で符号化してから、JSON ファイルを生成します。

annotationsFileName = 'vehicles_annotations.json';
exportGroundTruthToJSON(VehicleImageSequenceGroundTruth, annotationsFileName, 'Info', info, 'License', licenses)

COCO データ形式 JSON ファイルへのオブジェクト検出グラウンド トゥルース オブジェクトのエクスポート

名前と値のペア 'COCO'true に設定して exportGroundTruthToJSON を使用し、多角形を使用してラベル付けされたオブジェクト検出データを COCO オブジェクト検出データ形式の JSON ファイルにエクスポートします。

COCO データ形式の JSON ファイルにエクスポート可能な、オブジェクト検出用のグラウンド トゥルース オブジェクトを作成するには、次の手順に従います。

  1. 多角形ラベル タイプを使用して、オブジェクト インスタンスにラベルを付けます。

  2. ピクセル ラベル タイプを使用して、オブジェクトの密集領域にラベルを付けます。そのラベル名は polygonLabelName_crowd (polygonLabelName は対応する多角形ラベルのラベル名) のようになります。

次に例を示します。

人物インスタンスと密集領域の両方を含むイメージに注釈を付けるには、次のようにします。

  1. 人物インスタンスに注釈を付けるために、'person' という名前の多角形タイプのラベルを作成します。

  2. 'person_crowd' という名前の対応するピクセル ラベルを作成して、人物密集領域に注釈を付けます。

2 つのラベルを結合するには、'_crowd' の接尾辞を使用します。したがって、密集ピクセル ラベルごとに対応する多角形ラベルが確実に存在するようにしてください。

メモ: COCO オブジェクト検出データ形式にエクスポートするときは、無視されるラベル タイプを示す予期された警告がスローされます。以下の場合、ライン ラベルをもつグラウンド トゥルース オブジェクトが無視されます。

annotationsFileName = 'vehicles_annotations_coco.json';
exportGroundTruthToJSON(VehicleImageSequenceGroundTruth, annotationsFileName, ...
    'Info', info, 'License', licenses, 'COCO', true)
Warning: Label types, Line, Scene, are not supported and are ignored during export to a COCO data format JSON file

カスタム JSON データ形式

エクスポートされた JSON ファイルには、次の 5 つのフィールドが含まれます。

  1. info

  2. licenses

  3. categories

  4. images/ video

  5. annotations

Info

Info フィールドでは、名前と値のペアの引数 'Info' を使用して、データセットと注釈の情報を指定します。値はスカラー構造体でなければなりません。

既定値:

{
  "year": Current year,
  "version": "1",
  "description": "Created using MATLAB",
  "date_created": Current datetime
}

Licenses

Licenses フィールドは、名前と値のペアの引数 License を使用して、ライセンスに関する情報を指定します。値は構造体配列でなければなりません。

既定値: []

Categories

Categories フィールドには、グラウンド トゥルース ラベル定義 table の内容が含まれます。table の変数名がフィールドとして使用され、COCO データ形式と類似するように変更されます。追加のフィールド ID で各ラベル定義を識別します。

各カテゴリ オブジェクトには、変数 'Hierarchy' が存在する場合にそれを置き換える次の 2 つの追加フィールドが含まれます。

  1. 属性: ラベルの属性定義が含まれる。

  2. サブラベル: ラベルのサブラベルの定義が含まれる。

Images/ Video

Images/ Video フィールドには、イメージ オブジェクト (またはビデオ オブジェクト) と関連情報のリストが含まれます。

データ形式:

{
  "id": Unique Image ID,
  "time_stamp": Time stamp of the image frame (Only applicable to data sources with timestamps),
  "width": Width of the image/video,
  "height": Height of the image/video,
  "file_name": Name of the file,
  "file_path": Absolute file path,
  "date_captured": Last modified date of the image/ Current datetime
}

Annotations

Annotations フィールドには、注釈オブジェクトのリストが含まれます。注釈オブジェクトのデータ形式は、ラベル タイプによって異なり、以下のとおりです。

Rectangle ROI (四角形 ROI)

{
  "id": Unique Annotation ID,
  "image_id": Image ID , 
  "category_id": Category ID,
  "position":  [x,y,width,height] bounding box location,
  "attributes": Contains attributes data,
  "sublabels": Contains sublabels data
}
  • xy は四角形の左上隅を指定し、0 ベースのインデックスが付けられます。

  • w は四角形の幅、つまり x 軸に沿った長さを指定します。

  • h は四角形の高さ、つまり y 軸に沿った長さを指定します。

Polygon ROI (多角形 ROI)

{
  "id": Unique Annotation ID,
  "image_id": Image ID , 
  "category_id": Category ID,
  "position":  [[x1 y1 x2 y2 ...  xN yN]] for N points in the polygon,
  "attributes": Contains attributes data,
  "sublabels": Contains sublabels data
}

PolyLine ROI (ポリライン ROI)

{
  "id": Unique Annotation ID,
  "image_id": Image ID,
  "category_id": Category ID,
  "position": [x1 y1 x2 y2 ...  xN yN] for N points in the polyline.,
  "attributes": Contains attributes data,
  "sublabels": Contains sublabels data
}
  • x1、y1、... は点の位置を指定し、0 ベースのインデックスが付けられます。

ProjectedCuboid ROI (投影された直方体 ROI)

{
"id": Unique Annotation ID,
"image_id": Image ID,
"category_id": Category ID,
"position": List of the form [xctr, yctr, zctr, xlen, ylen, zlen, xrot, yrot, zrot],
  "attributes": Contains attributes data,
  "sublabels": Contains sublabels data
}
  • xctryctr、およびzctr は投影された直方体の中心を指定し、0 ベースのインデックスが付けられます。

  • xlenylen、および zlen はそれぞれ、回転の適用前における x 軸、y 軸、および z 軸に沿った、投影された直方体の長さを指定します。

  • xrotyrot、および zrot はそれぞれ、x 軸、y 軸、および z 軸に沿った、投影された直方体の回転角度を指定します。これらの角度は、それぞれが対応する軸の正方向を見たときに、時計回りが正となります。

PixelLabel ROI (ピクセルラベル ROI)

{
  "image_id": Image ID,
  "file_name": Name of the pixel label image file,
  "file_path": Path to the pixel label image file,
  "segments_info": List of segment objects
}

セグメント オブジェクトの形式: ピクセル ラベル イメージの各セグメントが、セグメント オブジェクトとして表されます。

{
"id": PixelLabelID of the label or R+G*256+B*256^2 in case if PixeLabelID is an array,
"category_id": Category ID,
"area": Area covered by the pixels
}

シーン

{
  "id": Unique Annotation ID,
  "image_id": Image ID,
  "category_id": Category ID of the scene label applicable to the image
}

制限

  1. カスタム ラベル タイプを JSON ファイルにエクスポートすることはできません。

  2. カスタム リーダーのグラウンド トゥルース データソースから JSON ファイル形式にデータをエクスポートすることはできません。

  3. COCO オブジェクト検出データ形式にエクスポートできるのは、「多角形 ROI」と密集の「ピクセル ラベル ROI」のみです。

  4. 補助関数 "exportGroundTruthToJSON" によって生成された JSON ファイルをグラウンド トゥルース オブジェクトとして MATLAB にインポートし直すことはできません。

参考文献

[1] Lin TY. et al. (2014) Microsoft COCO: Common Objects in Context. In: Fleet D., Pajdla T., Schiele B., Tuytelaars T. (eds) Computer Vision – ECCV 2014. ECCV 2014. Lecture Notes in Computer Science, vol 8693. Springer, Cham. https://doi.org/10.1007/978-3-319-10602-1_48