Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

groundTruth

グラウンド トゥルース ラベル データ

説明

groundTruth オブジェクトには、一連のグラウンド トゥルース ラベルのデータ ソース、ラベル定義、およびマークされたラベルの注釈に関する情報が含まれます。groundTruth オブジェクトは、イメージ ラベラー アプリおよびビデオ ラベラー アプリからエクスポートまたはインポートできます。

  • groundTruth オブジェクトの配列からオブジェクト検出器の学習データを作成するには、関数 objectDetectorTrainingData を使用します。

  • groundTruth オブジェクトの配列からセマンティック セグメンテーション ネットワークの学習データを作成するには、関数 pixelLabelTrainingData を使用します。

作成

ラベル付けアプリから groundTruth オブジェクトをエクスポートするには、アプリのツールストリップで、[ラベルをエクスポート][ワークスペースへ] を選択します。アプリがオブジェクトを MATLAB® ワークスペースにエクスポートします。プログラムで groundTruth オブジェクトを作成するには、関数 groundTruth を使用します (ここで説明します)。

説明

gTruth = groundTruth(dataSource,labelDefs,labelData) は、イメージ ラベラー アプリおよびビデオ ラベラー アプリにインポートできるグラウンド トゥルース ラベルを含むオブジェクトを返します。

  • dataSource では、グラウンド トゥルース データのソースを指定し、DataSource プロパティを設定します。

  • labelDefs では、グラウンド トゥルース データのラベル、サブラベル、および属性の定義を指定し、LabelDefinitions プロパティを設定します。

  • labelData では、マークされたラベルの識別情報、位置、およびタイムスタンプを指定し、LabelData プロパティを設定します。

プロパティ

すべて展開する

グラウンド トゥルース データのソース。groundTruthDataSource オブジェクトとして指定します。オブジェクトには、ビデオ、イメージ シーケンス、またはグラウンドトゥルース データがラベル付けされたカスタムのデータ ソースを記述する情報が含まれます。

元のデータ ソースからイメージにアクセスするには、VideoReader または imageDatastore を使用します。また、カスタム リーダー関数を使用することもできます。詳細は、ラベル付けでのカスタム イメージ ソース リーダーの使用を参照してください。

このプロパティは読み取り専用です。

ラベル定義。テーブルとして指定します。このテーブルを作成するには、次のいずれかの方法を使用します。

  • ラベル付けアプリのいずれかにおいてラベル定義を作成し、それを groundTruth オブジェクトの一部としてエクスポートします。

  • labelDefinitionCreator オブジェクトを使用して、ラベル定義テーブルを生成します。このテーブルを MAT ファイルに保存すると、ラベル定義をラベル付けアプリのセッションに読み込めます。アプリのツールストリップで、[読み込み][ラベルの定義] を選択してください。

  • ラベル定義テーブルを MATLAB コマンド ラインで作成します。

次の表に、LabelDefinitions プロパティに指定するテーブルの必須およびオプションの列を示します。

説明必須またはオプション
Name各ラベル定義の名前を指定する文字列または文字ベクトル。

必須

Type各ラベル定義のタイプを指定する labelType 列挙。RectangleScene など。

必須

LabelColorラベル定義の色を指定する RGB 3 成分の 1 行 3 列の行ベクトル。値は [0, 1] の範囲内です。黄色 (RGB 3 成分 [1 1 0]) は、ラベル付けアプリにおける選択ラベルの色として予約されています。

オプション

ラベル付けアプリでラベルを定義する場合、色を指定しなければなりません。そのため、エクスポートされるラベル定義テーブルには必ずこの列が含まれます。

labelDefinitionCreator オブジェクトを使用して、色を指定せずにラベル定義を作成する場合、返されるラベル定義テーブルにはこの列が含まれますが、列の値はすべて空です。

PixelLabelIDスカラー、列ベクトル、または整数値ラベル ID の M 行 3 列の行列。PixelLabelID は、ラベル定義を表すために使用されるピクセル ラベル値を指定します。ピクセル ラベル ID の値は 0 ~ 255 の範囲でなければなりません。

オプション

ラベル付けアプリまたは labelDefinitionCreator オブジェクトでピクセル ラベルを定義する場合、生成されるラベル定義テーブルにはこの列が含まれます。

ラベル定義をプログラムで作成する場合、いずれかのラベルの TypelabelType.PixelLabel に設定すると、この列は必須になります。

Group各ラベル定義が属するグループを指定する文字列または文字ベクトル。

オプション

ラベル定義をプログラムで作成する場合、Group 列を含める必要はありません。

ラベル付けアプリからラベル定義をエクスポートする場合や、labelDefinitionCreator オブジェクトを使用してラベル定義を作成する場合、グループを指定していなくても、ラベル定義テーブルにはこの列が含まれます。各ラベル定義の Group の値として 'None' が割り当てられます。

Description各ラベル定義について説明する文字列または文字ベクトル。

オプション

ラベル定義をプログラムで作成する場合、Description 列を含める必要はありません。

ラベル付けアプリからラベル定義をエクスポートする場合や、labelDefinitionCreator オブジェクトを使用してラベル定義を作成する場合、説明を指定していなくても、ラベル定義テーブルにはこの列が含まれます。こうしたラベル定義の Description は空の文字ベクトルになります。

Hierarchy各ラベル定義のサブラベルと属性データを含む構造体。Hierarchy の形式の例については、イメージ ラベラー入門またはビデオ ラベラー入門を参照してください。

オプション

ラベル付けアプリでサブラベルまたは属性を定義する場合、エクスポートされる groundTruth オブジェクトにはこの列が含まれます。

たとえば、SkyVegetationLanesStopSign、および Vehicle という名前のラベル定義をもつテーブルについて考えます。これがビデオ ラベラー アプリからエクスポートされたものとします。

  • ラベル定義にはピクセル ラベルが含まれているため、テーブルには PixelLabelID 列があります。

  • ラベルのうち 2 つに属性があるため、アプリは Hierarchy 列を作成しました。これがすべてのラベル定義に適用されています。

  • ラベル定義にはグループが割り当てられていないため、すべてのラベル定義の Group 列が 'None' になっています。

このプロパティは読み取り専用です。

各 ROI とシーン ラベルのラベル データ。イメージ コレクションの場合は table、ビデオまたはイメージ シーケンスの場合は timetable として指定します。LabelData の各列が 1 つのラベル定義のラベルを保持し、LabelDefinitions の各行の Name の値に対応します。これらの LabelData はテーブルの要素を表します。ラベル カテゴリは labelType 列挙値として指定されます。

ラベルのタイプ各タイムスタンプでのラベルのストレージ形式
labelType.Rectangle

[x, y, w, h] 形式の M 行 4 列の数値行列。ここで、

  • M は、フレームに含まれるラベルの数です。

  • xy は四角形の左上隅を指定します。

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

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

labelType.ProjectedCuboid

[xctr, yctr, zctr, xlen, ylen, zlen, xrot, yrot, zrot] 形式の行をもつ M 行 9 列の数値行列。ここで、

  • M は、フレームに含まれるラベルの数です。

  • xctryctr、および zctr は直方体の中心を指定します。

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

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

次の図は、これらの値で直方体の位置がどのように決定されるかを示しています。

labelType.Line

cell 配列の M 行 1 列のベクトル。ここで、M は、フレームに含まれるラベルの数です。各 cell 配列に、ポリラインの N 個の点に関する [x1 y1; x2 y2; ... ; xN yN] 形式の N 行 2 列の数値行列が含まれています。

labelType.PixelLabelすべてのピクセル ラベル定義のラベル データは、カテゴリカル ラベルの行列として単一の PixelLabelData 列に保存されます。ラベル行列はディスクに uint8 イメージとして保存されなければなりません。ピクセル ラベル データをもつ ROILabelData オブジェクトを作成する場合、イメージ ファイル名は labelData 入力で文字ベクトルとして指定しなければなりません。ラベル行列には 1 チャネルまたは 3 チャネルを含めなければなりません。3 チャネル行列の場合、RGB ピクセル値はラベル ID を表します。
labelType.Customラベルは、timetable で指定されているとおりに正確に保存されます。カスタム ラベル データを含む groundTruthMultisignal オブジェクトをグラウンド トゥルース ラベラー アプリにインポートする場合、このデータはアプリにインポートされません。学習用のラベル データを収集し、アプリでラベル付けされたデータと組み合わせる場合は、カスタム データを使用します。

サポートされる GroundTruth オブジェクト

 ビデオ ラベラー アプリイメージ ラベラー アプリ
データ ソースビデオ ファイル、イメージ シーケンス フォルダー、カスタム リーダーイメージ ファイル
ラベル定義RectangleLinePixelLabel、または Scene ラベル タイプRectangleLinePixelLabel、または Scene ラベル タイプ
ラベル データRectangleLinePixelLabel、または Scene ラベル タイプの timetableRectangleLinePixelLabel、または Scene ラベル タイプの table (timetable なし)

ROI (RectangleLinePixelLabel) または Scene ラベル カテゴリではないグラウンド トゥルース データを groundTruth オブジェクトに追加するには、CustomlabelType を使用するラベル定義を指定します。カスタム データは、ラベル付けアプリに読み込むときに表示されません。

オブジェクト関数

selectLabelsByGroupSelect ground truth labels by label group
selectLabelsByTypeSelect ground truth labels by label type
selectLabelsByNameSelect ground truth labels by label name
changeFilePathsChange file paths in ground truth data

すべて折りたたむ

イメージのコレクションからデータ ソースを作成します。

data = load('stopSignsAndCars.mat');
imageFilenames = data.stopSignsAndCars.imageFilename(1:2)
imageFilenames = 2x1 cell
    {'stopSignImages/image001.jpg'}
    {'stopSignImages/image002.jpg'}

imageFilenames = fullfile(toolboxdir('vision'),'visiondata',imageFilenames);
dataSource = groundTruthDataSource(imageFilenames);

グラウンド トゥルースを指定するために使用されるラベルを定義します。ラベル定義の table を作成するには、labelDefinitionCreatorを使用します。

ldc = labelDefinitionCreator();
addLabel(ldc,'stopSign',labelType.Rectangle);
addLabel(ldc,'carRear',labelType.Rectangle);
labelDefs = create(ldc)
labelDefs=2×5 table
        Name          Type       LabelColor     Group      Description
    ____________    _________    __________    ________    ___________

    {'stopSign'}    Rectangle    {0x0 char}    {'None'}       {' '}   
    {'carRear' }    Rectangle    {0x0 char}    {'None'}       {' '}   

四角形 ROI のラベル データを初期化します。

stopSignTruth = {[856   318    39    41];[445   523    52    54]};
carRearTruth = {[398   378   315   210];[332   633   691   287]};

ラベル データの table を構築します。

labelNames = {'stopSign';'carRear'};
labelData = table(stopSignTruth,carRearTruth,'VariableNames',labelNames)
labelData=2×2 table
      stopSign        carRear   
    ____________    ____________

    {1x4 double}    {1x4 double}
    {1x4 double}    {1x4 double}

グラウンド トゥルース オブジェクトを作成します。

gTruth = groundTruth(dataSource,labelDefs,labelData)
gTruth = 
  groundTruth with properties:

          DataSource: [1x1 groundTruthDataSource]
    LabelDefinitions: [2x5 table]
           LabelData: [2x2 table]

マークした車線を表すデータを格納する groundTruth オブジェクトを作成します。

イメージからデータ ソースを作成します。

dataSource = groundTruthDataSource({'stopSignTest.jpg'});

グラウンド トゥルースを指定するために使用されるラベルを定義します。ラベル定義の table を作成するには、labelDefinitionCreatorを使用します。

ldc = labelDefinitionCreator();
addLabel(ldc,'Lane',labelType.Line);
labelDefs = create(ldc);

イメージに 2 つの車線マーカーを割り当てます。

laneMarkerTruth = {[257 254;311 180] [327 183;338 205;374 250]};

ラベル データの table を構築します。

labelNames = {'Lane'};
labelData = table(laneMarkerTruth,'VariableNames',labelNames)
labelData=table
                Lane            
    ____________________________

    {2x2 double}    {3x2 double}

groundTruth オブジェクトを作成します。

gTruth = groundTruth(dataSource,labelDefs,labelData)
gTruth = 
  groundTruth with properties:

          DataSource: [1x1 groundTruthDataSource]
    LabelDefinitions: [1x5 table]
           LabelData: [1x1 table]

シーンの各部分を表すデータを格納する groundTruth オブジェクトを作成します。

データ ソースを作成します。

dataSource = groundTruthDataSource({'visionteam.jpg'});

ラベル定義の table を作成するには、labelDefinitionCreatorを使用します。ラベル 'Person''Background' を定義します。対応するラベルのタイプを PixelLabel として割り当てます。

ldc =labelDefinitionCreator();
addLabel(ldc,'Person',labelType.PixelLabel);
addLabel(ldc,'Background',labelType.PixelLabel);
labelDefs = create(ldc)             
labelDefs=2×6 table
         Name            Type       LabelColor    PixelLabelID     Group      Description
    ______________    __________    __________    ____________    ________    ___________

    {'Person'    }    PixelLabel    {0x0 char}       {[1]}        {'None'}       {' '}   
    {'Background'}    PixelLabel    {0x0 char}       {[2]}        {'None'}       {' '}   

イメージのピクセル ラベル データの位置を指定します。

dataFile = {'visionteamPixelLabels.png'}    
dataFile = 1x1 cell array
    {'visionteamPixelLabels.png'}

ピクセル ラベル データ用のラベル データの table を作成します。

labelData = table(dataFile,'VariableNames',{'PixelLabelData'})
labelData=table
           PixelLabelData        
    _____________________________

    {'visionteamPixelLabels.png'}

groundTruth オブジェクトを作成します。

gTruth = groundTruth(dataSource,labelDefs,labelData)
gTruth = 
  groundTruth with properties:

          DataSource: [1x1 groundTruthDataSource]
    LabelDefinitions: [2x6 table]
           LabelData: [1x1 table]

ビデオからデータ ソースを作成します。

videoName = 'caltech_cordova1.avi';
dataSource = groundTruthDataSource(videoName);

グラウンド トゥルースを指定するために使用されるラベルを定義します。ラベル定義の table を作成するには、labelDefinitionCreator オブジェクトを使用します。

ldc = labelDefinitionCreator();
addLabel(ldc,'Cars',labelType.Rectangle);
addLabel(ldc,'LaneMarkers',labelType.Line);
labelDefs = create(ldc)
labelDefs=2×5 table
         Name            Type       LabelColor     Group      Description
    _______________    _________    __________    ________    ___________

    {'Cars'       }    Rectangle    {0x0 char}    {'None'}       {' '}   
    {'LaneMarkers'}    Line         {0x0 char}    {'None'}       {' '}   

自動車と車線マーカーのラベル データを作成します。

numRows = numel(dataSource.TimeStamps);
carsTruth = cell(numRows,1);
laneMarkerTruth = cell(numRows,1);

2 つの自動車ラベルと 2 つの車線マーカーを最初のフレームに追加します。

carsTruth{1} = [182 186 31 22;404 191 53 34];
laneMarkerTruth{1} = {[257 254;311 180] [327 183;338 205;374 250]};

ラベル データの table を作成します。

labelNames = {'Cars','LaneMarkers'};
labelData = table(carsTruth,laneMarkerTruth,'VariableNames',labelNames);

groundTruth オブジェクトを作成します。このオブジェクトをラベル付けアプリにインポートするには、[開く]、[ラベルをインポート] メニューのオプションを選択します。

gTruth = groundTruth(dataSource,labelDefs,labelData)
gTruth = 
  groundTruth with properties:

          DataSource: [1x1 groundTruthDataSource]
    LabelDefinitions: [2x5 table]
           LabelData: [250x2 timetable]

ヒント

  • ビデオベースのデータ ソースの groundTruth オブジェクトは、オペレーティング システムのビデオ読み取り機能に依存します。ビデオ データ ソースを使用して作成された groundTruth オブジェクトは、そのオブジェクトを作成するために使用された同じプラットフォームでのみ整合性を維持します。プラットフォーム固有の groundTruth オブジェクトを作成するには、ビデオをイメージのシーケンスに変換します。

R2017a で導入