ドキュメンテーション

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

信号ラベラー

解析または機械学習や深層学習の各アプリケーションの信号のラベル付け

説明

信号ラベラーは、解析のため、または機械学習と深層学習のアプリケーションで使用するために信号のラベル付けが可能な対話型のツールです。信号ラベラーを使用して、次のことができます。

  • 属性、領域、および関心点をもつ信号のラベル付け

  • logical、categorical、numerical、または string の値が付いたラベルの使用

  • ラベルまたはサブラベルの追加、編集、および削除

  • 信号とラベルの選択されたサブセットの表示

信号ラベラーは、データを信号アナライザーlabeledSignalSet オブジェクトとして保存します。labeledSignalSet オブジェクトを使用して、ネットワーク、分類器を学習させるか、データを解析して統計をレポートできます。

信号ラベラー を開く

信号アナライザー アプリの [アナライザー] タブで、[ラベル] をクリックします。

すべて展開する

クジラの歌の録音にはふるえ声とうめき声が含まれます。"ふるえ声" の音声は一連のクリックに似ています。"うめき声" は、船の警笛による音声に似た低周波数の鳴き声です。各信号を確認してラベルを付けて、クジラの種類、ふるえ声の領域、およびうめき声の領域を識別します。また、ふるえ声の各領域では、いくつかの選択された信号ピークにラベルを付けます。

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

クジラの歌の 2 つの記録を含むデータセットを読み込むことから開始します。信号は whale1whale2 と呼ばれ、4 kHz でサンプリングされます。whale1 は 1 つのふるえ声と、その後 3 つのうめき声で構成されます。whale2 は 2 つのうめき声、1 つのふるえ声、および別のうめき声で構成されます。

load labelwhalesignals

% To hear, type soundsc(whale1,Fs), pause(22), soundsc(whale2,Fs)

信号ラベラーに信号を移動します。

  1. 信号アナライザーを開始して、信号を信号テーブルにドラッグします。

  2. 信号を選択して時間情報を追加します。[アナライザー] タブで [時間値] をクリックし、Sample Rate and Start Time を選択して、サンプルレート Fs を入力します。

  3. 信号を選択して、[アナライザー] タブの [ラベル] をクリックします。

信号ラベル定義の追加

ラベルを定義して、信号に付加します。ラベルは次の 3 つのタイプです。

  • "属性" ラベルは信号の特性を定義します。

  • "関心領域" (ROI) ラベルは関心領域上の信号特性を定義します。

  • "点" ラベルは関心点での信号特性を定義します。

各ラベルは 4 つのデータ型のうち 1 つをもつことができます。

  • logical ラベルは、true または false のいずれかです。

  • categorical ラベルは、指定するカテゴリ セットの 1 つに属します。

  • 数値 ラベルは任意の数値をもちます。

  • string ラベルは文字列で表される任意の値をもちます。

ラベルは任意の数の "サブラベル" をもちます。サブラベル自体がサブラベルをもつことはできません。

クジラの歌の信号の場合:

  1. クジラの種類を格納する categorical 属性ラベルを定義します。これを WhaleType とします。使用するカテゴリは、シロナガスクジラ、ザトウクジラ、およびシロイルカです。

  2. うめき声の領域に対して true である logical の関心領域 (ROI) ラベルを定義します。これを MoanRegions とします。

  3. ふるえ声の領域に対して true である logical の (ROI) ラベルを定義します。これを TrillRegions とします。

  4. ふるえ声のピークを取得するための数値の点ラベルを定義します。これを TrillPeaks とします。このラベルは、TrillRegions ラベルのサブラベルとして設定します。

各ラベルを定義するには、[ラベル] タブの [ラベルの追加] をクリックします。サブラベルを定義するには、[ラベル定義] ブラウザーの TrillRegions ラベルを選択し、[定義の追加] ▼ をクリックして Add sublabel definition を選択します。

各信号ラベルまたはサブラベル定義に表示するダイアログ ボックスのフィールドに次の値を入力します。それぞれの場合で [既定の設定] フィールドを空のままにします。

LabelNameLabelTypeLabelDescriptionDataTypeCategoriesWhaleTypeAttributeWhaletypecategorical{bluehumpbackwhiteMoanRegionsROIRegionswheremoansoccurlogical---TrillRegionsROIRegionswheretrillsoccurlogical---TrillPeaksPointTrillpeaksnumeric---

[エクスポート] をクリックして、MAT ファイルに作成した信号定義をエクスポートできます。ファイル名に入力するためのダイアログ ボックスが表示されます。どの時点でも、[インポート] をクリックして、MAT ファイルに保存された信号定義をインポートできます。

信号属性のラベル付け

データの歌は、2 頭のシロナガスクジラのものです。両方の信号に WhaleType 値を設定します。

  1. [ラベルの定義] ブラウザーで WhaleType を選択します。

  2. [ラベル] ▼ をクリックし、Label Signals を選択します。

  3. 表示されるダイアログ ボックスで、whale1whale2 の両方が選択されて、[値] フィールドが blue に設定されていることを確認します (categorical 信号ラベル定義で既定値を指定しない場合、信号ラベラーは定義で指定された最初のカテゴリにラベルを設定します)。

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

名前の隣にあるチェック ボックスを選択して whale1 信号をプロットします。[ラベル付き信号セット] ブラウザー内とタイム プロットの両方で信号属性が表示されます。

信号領域のラベル付け

クジラの歌を可視化して、ふるえ声とうめき声の領域をラベル付けします。

  • ふるえ声の領域にはサイレンスで区切られた異なるバーストの音声があります。whale1 には約 2 秒で中央揃えされたふるえ声があります。

  • うめき声の領域は持続した低周波数のうめき声です。whale1 には約 7 秒、12 秒、17 秒で中央揃えされたうめき声があります。

一度に 1 つずつ信号をラベル付け

  1. [ラベル付き信号セット] ブラウザーの [プロット] 列で、信号名の隣のボックスをオンにして、信号をプロットします。

  2. うめき声をラベル付けするには、[ラベルの定義] ブラウザーで、MoanRegions のラベル定義を選択します。

  3. [ラベル] ▼ をクリックし、Label Plotted を選択します。アニメーションの破線によってフレーム化された、影付き領域が表示されます (アニメーション フレームは、領域が "アクティブ" であることを示します)。うめき声の領域を囲むまでアクティブな領域を移動してサイズ変更します。ラベルを適切に配置するには、[表示] タブに移動して、ズーム操作を選択するかパナーを有効にします。

  4. [確定] をクリックして、Enter キーを押すか、ダブルクリックして ROI をラベル付けします。領域は信号の色のグラデーションに変わります。論理ラベル定義で既定値を指定しない場合、信号ラベラーはラベルを true に設定します。

  5. 他の 2 つのうめき声に対して手順を繰り返します。

  6. ふるえ声をラベル付けするには、[ラベルの定義] ブラウザーで、TrillRegions ラベル定義を選択します。ステップ 3 と 4 を使用して、ふるえ声の領域をラベル付けします。

  7. 2 番目のクジラの歌の信号をラベル付けする前に、[ラベル付き信号セット] ブラウザーで名前の横にあるチェック ボックスをオフにしてプロットから最初のクジラの歌の信号を削除します。領域または点をラベル付けするときにプロットされた信号が 2 つある場合、信号ラベラーは両方の信号でラベルを関連付けます。

ラベル ビューアーの座標軸は関心領域の位置と幅を示します。各領域に割り当てられた値も表示します。

信号点のラベル付け

ふるえ声の領域には音声のバーストに対応する明確なピークがあります。ふるえ声の各領域の 3 つのピークにラベルを付けます。ふるえ声のピークはサブラベルのため、それぞれが特定の TrillRegions ラベルに関連付けられていなければなりません。

一度に 1 つずつ信号をラベル付け

  1. [ラベル付き信号セット] ブラウザーの [プロット] 列で、信号名の隣のボックスをオンにして、信号をプロットします。また、ピークをラベル付けするふるえ声の領域に対応するボックスをオンにします。

  2. [ラベルの定義] ブラウザーで、TrillPeaks を選択します。

  3. ツールストリップで、[値] に、最初のピークに対応する「1」と入力します。

  4. [ラベル付き信号セット] ブラウザーで、ふるえ声の領域を選択します。ふるえ声の領域がアクティブになり、アニメーションの破線でフレーム化されます。

  5. [ラベル] ▼ をクリックし、Label Plotted を選択します。ふるえ声の領域は実線によってフレーム化され、アニメーションの破線 (アクティブな線) がラベル付けされている点に対して表示されます。

  6. 選択したピークで信号が交差するまでアクティブな線を移動します。ラベルを適切に配置するには、[表示] タブに移動して、ズーム操作を選択するかパナーを有効にします。

  7. [確定] をクリックして、Enter キーを押すか、ダブルクリックしてピークをラベル付けします。破線が信号と同じ色の実線に変わります。

  8. 2」と「3」を入力してさらに 2 つのピークを繰り返し、識別します。

  9. 2 番目のクジラの歌の信号のふるえ声のピークをラベル付けする前に、[ラベル付き信号セット] ブラウザーの名前の横にあるチェック ボックスをオフにしてプロットから最初のクジラの歌の信号を削除します。

ラベル ビューアーの座標軸は、関心点の位置と各位置に割り当てられた値を示します。

2 つの信号をプロットして、ラベル ビューアーでラベルの概要を参照します。[ラベル付き信号セット] ブラウザーのラベル付き信号セット階層を展開して、すべてのラベルの詳細を参照します (階層を展開するには、ブラウザーの任意の信号を右クリックし、Expand All を選択します)。それぞれの信号に対して、最初のうめき声の領域と、ラベル付けした 3 つ目のふるえ声のピークをプロットします。

信号のラベル値の編集

任意の時点で、[ラベル付き信号セット] ブラウザーを使用して、任意の信号ラベルを編集できます。属性ラベルを編集するには、選択して右クリックし、[編集] を選択します。たとえば、2 番目のクジラが実際にシロイルカであることを検出した場合、whale2WhaleType 属性を選択して、右クリックし、[編集] を選択して、表示されるダイアログ ボックスのドロップダウン メニューから white を選択します。

ROI ラベルまたは点ラベルの値を編集する場合は、ダイアログ ボックスで値を変更できます。ROI ラベルまたは点ラベルの位置を変更するには、ダイアログ ボックスで位置フィールドを変更できます。または、以下が可能です。

  1. 名前の隣にあるボックスをオンにしてラベルをプロットします。

  2. ラベルを選択します。

  3. アクティブになるときに時間プロットの領域または点を移動します。

ラベル付き信号セットのエクスポート

ラベル付けの保存と新しい labeledSignalSet オブジェクトのエクスポートによってラベル付けした信号をエクスポートします。ツールストリップで [ラベルを保存] ボタンをクリックします。表示されるダイアログ ボックスで、ラベル付き信号セットに名前 whalesongs を指定します。[OK] ボタンをクリックすると、信号アナライザーに戻ります。信号ラベラーでラベル付き信号セットをエクスポートする方法の詳細については、信号ラベラーによる動作のインポートとエクスポートを参照してください。

信号テーブルで、whalesongs を選択して右クリックし、Whale_Songs.mat と呼ばれるファイルにエクスポートします。

クジラの歌のラベル付けの例で作成した MAT ファイルを MATLAB® ワークスペースに読み込みます。ラベル付き信号セットに信号ラベラーを使用して追加した定義が含まれていることを確認します。

load Whale_Songs

labelDefinitionsSummary(whalesongs)
ans=3×9 table
      LabelName        LabelType     LabelDataType     Categories     ValidationFunction    DefaultValue             Sublabels             Tag            Description         
    ______________    ___________    _____________    ____________    __________________    ____________    ___________________________    ___    ____________________________

    "WhaleType"       "attribute"    "categorical"    [3x1 string]         ["N/A"]               []         []                             ""     "Whale type"                
    "MoanRegions"     "roi"          "logical"        ["N/A"     ]         []                    []         []                             ""     "Regions where moans occur" 
    "TrillRegions"    "roi"          "logical"        ["N/A"     ]         []                    []         [1x1 signalLabelDefinition]    ""     "Regions where trills occur"

TrillPeaksTrillRegions のサブラベルであることを確認します。

labelDefinitionsHierarchy(whalesongs)
ans = 
    'WhaleType
       Sublabels: []
     MoanRegions
       Sublabels: []
     TrillRegions
       Sublabels: TrillPeaks
     '

セットの 2 番目のメンバーを取得します。timetable 変数の名前を取得します。

song = getSignal(whalesongs,2);

summary(song)
RowTimes:

    Time: 76579x1 duration
        Values:
            Min           0 sec       
            Median        9.5722 sec  
            Max           19.144 sec  
            TimeStep      0.00025 sec 

Variables:

    whale2: 76579x1 double

        Values:

            Min       -0.37326
            Median           0
            Max        0.37914

信号をプロットします。

t = song.Time;
sng = song.whale2;

plot(t,sng)

ラベル付けされた領域の可視化

ラベル付けした関心領域を表示および特定します。詳細については、例の最後の関数 labelIntervals のコードを参照してください。

mvals = getLabelValues(whalesongs,2,'MoanRegions');
tvals = getLabelValues(whalesongs,2,'TrillRegions');

cmap = lines;

hold on

tmoan = mvals.ROILimits;
for kj = 1:size(tmoan,1)
    tv = find(seconds(t)>tmoan(kj,1) & seconds(t)<tmoan(kj,2));
    plot(t(tv),sng(tv),'Color',cmap(2,:))
end

ttrill = tvals.ROILimits;
for kj = 1:size(ttrill,1)
    tv = find(seconds(t)>ttrill(kj,1) & seconds(t)<ttrill(kj,2));
    plot(t(tv),sng(tv),'Color',cmap(3,:))
end

labelIntervals(mvals,tvals,cmap(4,:))

hold off

ラベル付けされた点の可視化

ラベル付けしたふるえ声のピークを表示および特定します。

pk = getLabelValues(whalesongs,2,{'TrillRegions','TrillPeaks'});

locs  = zeros(size(pk,1),1);
for kj = 1:length(locs)
    locs(kj) = find(seconds(t) == pk.Location(kj));
end

hold on
plot(t(locs),sng(locs)+0.01,'v','MarkerSize',8,'Color',[0.929,0.694,0.125])
text(t(locs)+seconds(0.2),sng(locs)+0.05,int2str(cell2mat(pk.Value)), ...
    'HorizontalAlignment','center')
hold off

補助関数によって、関心領域が表示および特定されます。

function labelIntervals(mvals,tvals,clr)
    [X,Y] = meshgrid(seconds([mvals.ROILimits;tvals.ROILimits]),ylim);
    plot(X,Y,':k')
    topts = {'HorizontalAlignment','center','FontWeight','bold', ...
        'FontSize',12,'Color',clr};
    text((X(1,1:4)+X(1,5:end))/2,Y(2,5:end)-0.1, ...
        ["moan" "moan" "moan" "trill"],topts{:})
end

ヒント

信号ラベラーは、マルチチャネル信号に対応するラベルをレンダリングするときにチャネルの色を平均化します。最適な結果を得るには、指定した信号のチャネルすべてに対してまったく同じになるようにラインの色をカスタマイズします。信号ラベラーを入力する前に信号アナライザーでカスタマイズを実行します。

diffr のラベルの色 (チャネルが異なる色をもつ信号) を equal のラベルの色 (チャネルすべてが同じ色をもつ信号) と比較します。equal のいずれのラベルも、チャネルすべてが共有する青色の陰影でレンダリングされます。diffr のラベルは、チャネルの色のいずれにも一致しない茶色の陰影でレンダリングされます。

R2019a で導入