最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ビデオ ラベラー入門

ビデオ ラベラー アプリには、ビデオやイメージ シーケンス内で四角形の関心領域 (ROI) ラベル、ポリライン ROI ラベル、ピクセル ROI ラベル、シーン ラベルを簡単にマークできる方法が用意されています。この例では、以下の方法を示して、アプリの使用方法を紹介します。

  • ビデオのイメージ フレームに手動でラベルを付ける。

  • オートメーション アルゴリズムを使用して、イメージ フレーム全体に自動的にラベルを付ける。

  • ラベル付きのグラウンド トゥルース データをエクスポートする。

ラベル付けされていないデータの読み込み

アプリを開き、高速道路を運転している車両のビデオを読み込みます。ビデオは VideoReader で読み取り可能なファイル形式でなければなりません。

videoLabeler('visiontraffic.avi')

または、[アプリ] タブの [イメージ処理とコンピューター ビジョン] からアプリを開きます。その後、[読み込み] メニューから、ビデオ データ ソースを読み込みます。

ビデオを調査します。再生ボタン をクリックしてビデオ全体を再生するか、スライダー を使用してフレーム間を移動します。

アプリでは、[読み込み][イメージのシーケンス] を選択して、対応するタイムスタンプを持つイメージ シーケンスを読み込むこともできます。イメージは imread によって読み取り可能でなければなりません。

VideoReader または imread によって読み取り可能なカスタム データ ソースを読み込むには、カスタム データ ソース リーダーを使用したグラウンド トゥルースのラベル付けを参照してください。

ラベルを付ける時間間隔の設定

ビデオ全体にラベルを付けることや、ビデオの一部から開始することができます。この例では、読み込んだビデオ内に 5 秒の時間間隔でラベルを付けます。ビデオの下のテキスト ボックスに、次の時間を秒単位で入力します。

  1. [開始時間] ボックスに 5 と入力します。

  2. [現在時間] ボックスに 5 と入力し、スライダーが時間間隔の開始位置にあるようにします。

  3. [終了時間] ボックスに 10 と入力します。

オプションとして、時間間隔に調整を加えるには、赤色の間隔フラグをクリックしてドラッグします。

これで、アプリ全体がこの特定の時間間隔に焦点を当てるように設定できました。ビデオはこの間隔内のみ再生され、この間隔のみにラベル付けとオートメーション アルゴリズムが適用されます。間隔は、フラグを移動することでいつでも変更できます。

時間間隔が再生セクション全体に広がるように拡張するには、[時間区間へのズームイン] をクリックします。

ラベル定義の作成

ビデオ フレームに描画するラベルを定義します。この例では、アプリ内でラベルを直接定義します。代わりに MATLAB® コマンド ラインからラベルを描画するには、labelDefinitionCreator を使用します。

ROI ラベルの作成

"ROI ラベル" は、関心領域 (ROI) に対応するラベルです。これらのタイプの ROI ラベルを定義できます。

ROI ラベル説明例: 運転シーン
Rectangleオブジェクトの周りに四角形の ROI ラベル (境界ボックス) を描画します。

車両、歩行者、道路標識

Line線を表す線形 ROI ラベルを描画します。ポリライン ROI を描画するには、2 つ以上の点を使用します。

車線境界線、ガード レール、縁石

Pixel labelセマンティック セグメンテーション用にピクセルにラベルを割り当てます。セマンティック セグメンテーションのピクセルのラベル付けを参照してください。

車両、路面、木、歩道

この例では、ラベル付けの種類が車両である vehicle グループを定義してから、Car および Truck[Rectangle] ROI ラベルを作成します。

  1. 左側の [ROI ラベルの定義] ペインで [ラベル] をクリックします。

  2. Car という名前の [Rectangle] のラベルを作成します。

  3. [グループ] ドロップダウン メニューから、[新規グループ] を選択し、Vehicle のグループに名前を付けます。

  4. [OK] をクリックします。

    [Vehicle] のグループ名は、ラベル [Car] が作成された [ROI ラベルの定義] ペインに表示されます。ラベルを左クリックしてドラッグすると別の位置またはグループに移動できます。

  5. 2 番目のラベルを追加します。[ラベル] をクリックします。ラベル [Truck] に名前を付け、[Vehicle] グループが選択されていることを確認します。[OK] をクリックします。

  6. 時間間隔内の最初のビデオ フレームで、2 台の車両の周りに、マウスを使って四角形の [Car] ROI を描画します。

サブラベルの作成

"サブラベル" は、親 ROI ラベルに対応する ROI ラベルのタイプです。各サブラベルは、[ROI ラベルの定義] ペインで定義された特定のラベルに属している (特定のラベルの子である) 必要があります。たとえば、運転シーンの場合、vehicle ラベルにヘッドライト、ナンバー プレート、ホイールなどのサブラベルがある可能性があります。

ヘッドライトのサブラベルを定義します。

  1. 左側の [ROI ラベルの定義] ペインで [乗用車] ラベルをクリックします。

  2. [サブラベル] をクリックします。

  3. headlight という名前の [Rectangle] のサブラベルを作成し、必要に応じて説明を記述します。[OK] をクリックします。

    [ROI ラベルの定義] ペインに [headlight] サブラベルが表示されます。サブラベルは、選択した ROI ラベル [Car] の下に入れ子にされており、親ラベルと同じ色が付けられています。

    ラベルに複数のサブラベルを追加できます。サブラベルをドラッグ アンド ドロップし、リスト内で並べ替えることもできます。さらに編集を行うにはラベルを右クリックします。

  4. [ROI ラベルの定義] ペインで [headlight] サブラベルを選択します。

  5. ビデオ フレームで、[Car] ラベルを選択します。選択するとラベルは黄色に変化します。[Car] ラベル (親 ROI) を選択してからサブラベルを追加しなければなりません。

    それぞれの乗用車の [headlight] のサブラベルを描画します。

  6. 前の手順を繰り返して、別の乗用車のヘッドライトにラベルを付けます。ラベルをより正確に描画するには、ツールストリップから利用できる [パン][ズーム イン][ズーム アウト] オプションを使用します。

サブラベルは四角形 ROI ラベルまたはポリライン ROI ラベルと一緒にしか使用できません。また、サブラベルが独自のサブラベルを持つことはできません。サブラベルの使用の詳細については、サブラベルと属性を使用したグラウンド トゥルース データへのラベル付けを参照してください。

属性の作成

"属性" は、ROI ラベルやサブラベルにさらなる分類を提供します。分類は、描画可能なラベルに関する追加情報を指定します。たとえば、運転シーンの場合、属性は車両のタイプや色を含む場合があります。

これらのタイプの属性を定義できます。

属性タイプ属性定義のサンプル既定値のサンプル

Numeric Value

String

Logical

List

車両タイプの属性を追加します。

  1. 左側の [ROI ラベルの定義] ペインで [Car] ラベルを選択し、[属性] をクリックします。

  2. [属性名] ボックスに carType と入力します。属性タイプを [List] に設定します。

  3. [リスト項目] セクションに、SedanHatchbackWagon など、さまざまな乗用車のタイプを 1 行に 1 つ入力します。必要に応じて属性に説明を加えて、[OK] をクリックします。

  4. ビデオの最初のフレームで、[Car] ROI ラベルを選択します。[属性とサブラベル] ペインで、その車両に適切な [carType] 属性を選択します。

  5. 前の手順を繰り返して、別の車両に [carType] 属性を割り当てます。

サブラベルに属性を追加することもできます。[headlight] サブラベルに、ヘッドライトが点灯しているかどうかを示す属性を追加します。

  1. 左側の [ROI ラベルの定義] ペインで [headlight] サブラベルを選択し、[属性] をクリックします。

  2. [属性名] ボックスに isOn と入力します。属性タイプを [Logical] に設定します。[既定値][Empty] の設定のままにしておき、必要に応じて説明を記述して、[OK] をクリックします。

  3. ビデオ フレームでヘッドライトを選択します。適切な [isOn] 属性値を設定するか、属性値を [Empty] に設定されたままにします。

  4. 前の手順を繰り返して、別の車両の [isOn] 属性を設定します。

属性を削除するには、ROI ラベルまたはサブラベルを右クリックして、削除する属性を選択します。属性を削除すると、以前に作成したすべての ROI ラベルの注釈から属性情報が削除されます。

シーン ラベルの作成

"シーン ラベル" は、シーン全体に関する追加情報を定義します。シーン ラベルは、ライティングのような条件、気象条件、または車線変更などのイベントの説明に使用します。

ビデオで使用するシーン ラベルを作成します。

  1. 左側の [シーン ラベルの定義] ペインで [新しいシーン ラベルの定義] をクリックし、sunny という名前のシーン ラベルを作成します。[グループ]None に設定されていることを確認します。[OK] をクリックします。

    [シーン ラベルの定義] ペインにシーン ラベルの定義が表示されます。現在のフレームに適用されているシーン ラベルは、右側の [シーン ラベル] ペインに表示されます。[sunny] シーン ラベルは、まだフレームに適用されていないため、空 (白色) です。

  2. シーン全体が晴れなので、時間間隔全体に [sunny] シーン ラベルを適用するように指定します。[シーン ラベルの定義] ペインで [sunny] シーン ラベル定義が選択された状態で、[時間間隔] を選択します。

  3. [ラベルの追加] をクリックします。

これで、時間間隔に含まれるすべてのフレームに [sunny] ラベルが適用されました。

グラウンド トゥルースのラベル付け

ここまでは、ビデオ内の 1 つのフレームのみにラベルを付けてきました。残りのフレームにラベルを付けるには、いかのいずれかのオプションを選択します。

グラウンド トゥルースに手動でラベルを付ける

右矢印キーをクリックして次のフレームに進む場合、前のフレームの ROI ラベルは引き継がれません。[sunny] シーン ラベルは時間間隔全体に適用したので、このラベルのみが各フレームに適用されます。

フレームを 1 つずつ進み、ラベルとサブラベルの ROI を手動で描画します。また、これらの ROI の属性情報も更新します。

オートメーション アルゴリズムを使用してグラウンド トゥルースにラベルを付ける

ラベル付け処理を高速化するために、アプリ内でオートメーション アルゴリズムを使用できます。独自のオートメーション アルゴリズムを定義する (ラベル付け用オートメーション アルゴリズムの作成および時間的オートメーション アルゴリズム参照) ことも、組み込みのオートメーション アルゴリズムを使用することもできます。この例では、組み込みの点追跡アルゴリズムを使用してグラウンド トゥルースにラベルを付けます。

この例では、[Car] ROI ラベルのラベル付けのみを自動化します。組み込みのオートメーション アルゴリズムは、サブラベルと属性の自動化はサポートしていません。

  1. 自動化するラベルを選択します。ビデオの最初のフレームで、Ctrl キーを押しながら、2 つの [Car] ラベルの注釈をクリックして選択します。ラベルは黄色で強調表示されます。

  2. アプリのツールストリップから、[アルゴリズムの選択][ポイント トラッカー] を選択します。このアルゴリズムは、Kanade-Lucas-Tomasi (KLT) アルゴリズムを使用して短い間隔における 1 つ以上の四角形 ROI を追跡します。

  3. (オプション) オートメーション設定を構成します。[オートメーションの構成] をクリックします。既定で、オートメーション アルゴリズムは時間間隔の開始から終了までのラベルに適用されます。アルゴリズムの方向と開始時間を変更するには、この表に示すオプションのいずれかを選択します。

    オートメーションの方向アルゴリズムの実行

    選択した [Car] ラベルをオートメーション セッションにインポートできるように、[選択した ROI をインポート] を選択しなければなりません。

  4. [自動化] をクリックして、オートメーション セッションを開きます。アルゴリズムの指示が左側のペインに表示され、選択したラベルを自動化に使用できます。

  5. [実行] をクリックして、選択した ROI をその区間で追跡します。

  6. アルゴリズムの実行結果を確認します。

    後でシーンに現れる車両にはラベルが付いていません。ラベルの付いていない車両には初期 ROI ラベルがなかったため、アルゴリズムによって追跡されませんでした。[実行を元に戻す] をクリックします。スライダーを使用して、各車両が最初に現れるフレームを探します。各車両の周りに [vehicle] ROI を描画して、再度 [実行] をクリックします。

  7. フレームを 1 つずつ進み、ROI を手動で移動、サイズ変更、削除、または追加して、オートメーション アルゴリズムの結果を改善します。

    アルゴリズムの結果に満足した場合は、[確定] をクリックします。または、セッション中に生成されたラベルを破棄して、代わりに手動でラベルを付ける場合は、[キャンセル] をクリックします。[キャンセル] ボタンでは、アプリ セッションではなく、アルゴリズム セッションがキャンセルされます。

これで、オプションでサブラベルと属性情報を使用して、残りのフレームに手動でラベルを付けられるようになりました。

ラベルをさらに評価するために、ラベル付きのグラウンド トゥルースの視覚的な概要を表示できます。アプリのツールストリップから、[ラベルの概要を表示] を選択します。この概要を使用して、フレーム、ラベルの頻度、およびシーンの状態を比較できます。詳細は、グラウンド トゥルース ラベルの概要の表示を参照してください。この概要は、サブラベルや属性をサポートしていません。

ラベル付きのグラウンド トゥルースのエクスポート

ラベル付きのグラウンド トゥルースを MAT ファイルや、MATLAB ワークスペースの変数にエクスポートできます。いずれの場合も、ラベル付きのグラウンド トゥルースは groundTruth オブジェクトとして保存されます。このオブジェクトを使用して、深層学習ベースのコンピューター ビジョン アルゴリズムを学習させることができます。詳細は、グラウンド トゥルース データからオブジェクト検出器やセマンティック セグメンテーション ネットワークを学習させるを参照してください。

メモ

ピクセル データをエクスポートする場合、ピクセル ラベル データとグラウンド トゥルース データは別個のファイルに保存されますが、フォルダーは同一です。エクスポートしたピクセル ラベルを扱う場合の考慮事項については、ラベラー アプリにおけるエクスポートしたピクセル ラベルの保存方法を参照してください。

この例では、ラベル付きのグラウンド トゥルースを MATLAB ワークスペースにエクスポートします。アプリのツールストリップから、[ラベルをエクスポート][ワークスペースへ] を選択します。エクスポートした MATLAB 変数 gTruth は、groundTruth オブジェクトです。

エクスポートした groundTruth オブジェクトのプロパティを表示します。エクスポートしたオブジェクトの情報は、以下に示す情報と異なる可能性があります。

gTruth
gTruth = 

  groundTruth with properties:

          DataSource: [1×1 groundTruthDataSource]
    LabelDefinitions: [3×5 table]
           LabelData: [531×3 timetable]

データ ソース

DataSource は、ビデオのパスとビデオのタイムスタンプを含む groundTruthDataSource オブジェクトです。このオブジェクトのプロパティを表示します。

gTruth.DataSource
ans = 

groundTruthDataSource for a video file with properties

        Source: ...matlab\toolbox\vision\visiondata\visiontraffic.avi
    TimeStamps: [531×1 duration]

ラベル定義

LabelDefinitions は、ラベル定義に関する情報を含む table です。この table は、ビデオ フレームに描画されたラベルに関する情報を含みません。固有の MAT ファイルにラベル定義を保存するには、アプリのツールストリップから、[保存][ラベルの定義] を選択します。次に、[ファイルのインポート] を選択することで、これらのラベル定義を別のアプリ セッションにインポートできます。

ラベル定義 table を表示します。各行は、ROI ラベル定義またはシーン ラベル定義に関する情報を含みます。ピクセル ラベル データをエクスポートした場合、LabelDefinitions table には、各ピクセル ラベル定義の ID 番号を含む PixelLabelID 列も含まれます。

gTruth.LabelDefinitions
ans =

  3×5 table

     Name        Type         Group      Description     Hierarchy  
    _______    _________    _________    ___________    ____________

    'Car'      Rectangle    'Vehicle'        ''         [1×1 struct]
    'Truck'    Rectangle    'Vehicle'        ''         []          
    'sunny'    Scene        'None'           ''         []  

LabelDefinitions 内の Hierarchy 列は、親 ROI ラベルのサブラベルと属性定義に関する情報を格納します。

Car ラベルのサブラベルと属性情報を表示します。

gTruth.LabelDefinitions.Hierarchy{1}
ans = 

  struct with fields:

        carType: [1×1 struct]
      headlight: [1×1 struct]
           Type: Rectangle
    Description: ''

headlight サブラベルに関する情報を表示します。

gTruth.LabelDefinitions.Hierarchy{1}.headlight
ans = 

  struct with fields:

           Type: Rectangle
    Description: ''
           isOn: [1×1 struct]

carType 属性に関する情報を表示します。

gTruth.LabelDefinitions.Hierarchy{1}.carType
ans = 

  struct with fields:

      ListItems: {3×1 cell}
    Description: ''

ラベル データ

LabelData は、ビデオ全体の各タイムスタンプで描画された ROI ラベルに関する情報を含む timetable です。この timetable は、1 つのラベルにつき 1 つの列を含みます。

timetable の最初の数行を表示します。最初のいくつかのタイムスタンプは、車両が何も検出されなかったことを示しています。また、sunny シーン ラベルは false です。このような結果になったのは、ビデオのこの部分にラベルが付けられていなかったからです。5 ~ 10 秒の時間間隔のみにラベルが付けられていました。

labelData = gTruth.labelData;
head(labelData)
ans =

  8×3 timetable

       Time           Car            Truck        sunny
    __________    ____________    ____________    _____

    5.005 sec     [1×2 struct]    [1×0 struct]    true 
    5.0384 sec    [1×2 struct]    [1×0 struct]    true 
    5.0717 sec    [1×2 struct]    [1×0 struct]    true 
    5.1051 sec    [1×2 struct]    [1×0 struct]    true 
    5.1385 sec    [1×2 struct]    [1×0 struct]    true 
    5.1718 sec    [1×2 struct]    [1×0 struct]    true 
    5.2052 sec    [1×2 struct]    [1×0 struct]    true 
    5.2386 sec    [1×2 struct]    [1×0 struct]    true 
    ...

ラベルを含む 5 ~ 10 秒の間隔の timetable の最初の数行を表示します。

gTruthInterval = labelData(timerange('00:00:05','00:00:10'),:);
head(gTruthInterval)
ans =

  8×3 timetable

       Time           Car            Truck        sunny
    __________    ____________    ____________    _____

    5.005 sec     [1×2 struct]    [1×0 struct]    true 
    5.0384 sec    [1×2 struct]    [1×0 struct]    true 
    5.0717 sec    [1×2 struct]    [1×0 struct]    true 
    5.1051 sec    [1×2 struct]    [1×0 struct]    true 
    5.1385 sec    [1×2 struct]    [1×0 struct]    true 
    5.1718 sec    [1×2 struct]    [1×0 struct]    true 
    5.2052 sec    [1×2 struct]    [1×0 struct]    true 
    5.2386 sec    [1×2 struct]    [1×0 struct]    true 

Car ラベルに関して、構造体は境界ボックスの位置と、サブラベルと属性に関する情報を含んでいます。

時間間隔の開始位置における車両の境界ボックスの位置を表示します。境界ボックスの位置は、次に示すものと異なる可能性があります。

gTruthInterval(1,:).Car{1}.Position % [x y width height], in pixels
ans =

  1×4 single row vector

  415.8962   82.4737  130.8474  129.3805


ans =

  1×4 single row vector

  235.2182    1.0000  117.0611   55.3500

アプリ セッションの保存

アプリのツール ストリップから [保存] を選択し、アプリ セッションの MAT ファイルを保存します。保存されたセッションには、データ ソース、ラベル定義、およびラベル付きのグラウンド トゥルースが含まれます。また、アプリのレイアウトなど、セッションの設定も含まれます。レイアウト オプションを変更するには、[レイアウト] を選択します。

アプリ セッション MAT ファイルは、[エクスポート][ファイルから] を選択してエクスポートするグラウンド トゥルース MAT ファイルとは別のものです。ラベル付きのグラウンド トゥルース データを共有するには、ベスト プラクティスとして、アプリ セッション MAT ファイルを共有するのではなく、groundTruth オブジェクトを含むグラウンド トゥルース MAT ファイルを共有します。詳細は、ラベル付きのグラウンド トゥルース データの共有と保存を参照してください。

参考

アプリ

オブジェクト

関連するトピック