Main Content

evaluateSemanticSegmentation

グラウンド トゥルースに対してセマンティック セグメンテーション データ セットを評価する

説明

ssm = evaluateSemanticSegmentation(dsResults,dsTruth) は、さまざまなメトリクスを計算し、グラウンド トゥルース セグメンテーション dsTruth に対してセマンティック セグメンテーションの結果 dsResults の品質を評価します。

ssm = evaluateSemanticSegmentation(imageSetConfusion,classNames) は、さまざまなメトリクスを計算し、セグメンテーション クラス classNames をもつ混同行列 imageSetConfusion からのセマンティック セグメンテーションの結果の品質を評価します。

[ssm,blockMetrics] = evaluateSemanticSegmentation(blockSetConfusion,classNames) は、さまざまなメトリクスを計算し、クラス classNames をもつ混同行列 blockSetConfusion からのブロックベース セマンティック セグメンテーションの結果の品質を評価します。

[___] = evaluateSemanticSegmentation(___,Name,Value) は、評価を制御するために、1 つ以上の Name,Value の引数のペアを使用してセマンティック セグメンテーション メトリクスを計算します。

すべて折りたたむ

triangleImages データセットには、グラウンド トゥルース ラベルの付いた 100 個のテスト イメージがあります。データセットの場所を定義します。

dataSetDir = fullfile(toolboxdir('vision'),'visiondata','triangleImages');

テスト イメージの場所を定義します。

testImagesDir = fullfile(dataSetDir,'testImages');

グラウンド トゥルース ラベルの場所を定義します。

testLabelsDir = fullfile(dataSetDir,'testLabels');

テスト イメージを保持する imageDatastore を作成します。

imds = imageDatastore(testImagesDir);

クラス名と関連するラベル ID を定義します。

classNames = ["triangle","background"];
labelIDs   = [255 0];

テスト イメージのグラウンド トゥルース ピクセル ラベルを保持する pixelLabelDatastore を作成します。

pxdsTruth = pixelLabelDatastore(testLabelsDir,classNames,labelIDs);

triangleImages の学習イメージで学習させられたセマンティック セグメンテーション ネットワークを読み込みます。

net = load('triangleSegmentationNetwork');
net = net.net;

テスト イメージでネットワークを実行します。予測されたラベルは、一時ディレクトリのディスクに書き込まれ、pixelLabelDatastore として返されます。

pxdsResults = semanticseg(imds,net,"WriteLocation",tempdir);
Running semantic segmentation network
-------------------------------------
* Processed 100 images.

グラウンド トゥルースに対して予測結果を評価します。

metrics = evaluateSemanticSegmentation(pxdsResults,pxdsTruth);
Evaluating semantic segmentation results
----------------------------------------
* Selected metrics: global accuracy, class accuracy, IoU, weighted IoU, BF score.
* Processed 100 images.
* Finalizing... Done.
* Data set metrics:

    GlobalAccuracy    MeanAccuracy    MeanIoU    WeightedIoU    MeanBFScore
    ______________    ____________    _______    ___________    ___________

       0.90624          0.95085       0.61588      0.87529        0.40652  

semanticSegmentationMetrics オブジェクトのプロパティを表示します。

metrics
metrics = 
  semanticSegmentationMetrics with properties:

              ConfusionMatrix: [2x2 table]
    NormalizedConfusionMatrix: [2x2 table]
               DataSetMetrics: [1x5 table]
                 ClassMetrics: [2x3 table]
                 ImageMetrics: [100x5 table]

各クラスの分類の精度、Intersection over Union、および境界 F-1 スコアを表示します。これらの値は ClassMetrics プロパティに保存されています。

metrics.ClassMetrics
ans=2×3 table
                  Accuracy      IoU      MeanBFScore
                  ________    _______    ___________

    triangle            1     0.33005     0.028664  
    background     0.9017      0.9017      0.78438  

NormalizedConfusionMatrix プロパティに保存されている正規化された混同行列を表示します。

metrics.ConfusionMatrix
ans=2×2 table
                  triangle    background
                  ________    __________

    triangle        4730            0   
    background      9601        88069   

入力引数

すべて折りたたむ

セマンティック セグメンテーションの結果として得られる予測されたピクセル ラベル。データストア、またはデータストア オブジェクトの cell 配列として指定します。dsResults には、PixelLabelDatastorepixelLabelImageDatastore など、categorical イメージを返す任意のデータストアを指定できます。read(dsResults) は categorical 配列、cell 配列または table を返さなければなりません。関数 read が複数列の cell 配列または table を返す場合、2 番目の列には categorical 配列が含まれていなければなりません。

グラウンド トゥルース ピクセル ラベル。データストア、またはデータストア オブジェクトの cell 配列として指定します。dsResults には、PixelLabelDatastorepixelLabelImageDatastore など、categorical イメージを返す任意のデータストアを指定できます。read(dsTruth) を使用した場合は、categorical 配列、cell 配列または table が返されなければなりません。関数 read が複数列の cell 配列または table を返す場合、2 番目の列には categorical 配列が含まれていなければなりません。

セグメント化されたイメージのクラスの混同行列。次のいずれかとして指定します。ここで、F はデータ セット内のイメージの数です。

  • F 行で、ConfusionMatrix という名前の 1 つの変数をもつ table。table の各行には、対応するイメージの混同行列をもつ cell 配列が含まれます。

  • F 行 1 列の cell 配列。cell 配列の各要素には、対応するイメージの混同行列が含まれます。

セグメント化されたブロックの混同行列。B 行 3 列の table として指定します。ここで、B はデータ セット内のすべてのイメージにおけるブロックの総数です。3 列は、変数 ImageNumberConfusionMatrix、および BlockInfo です。ブロックベースの関数 apply の呼び出しで関数 segmentationConfusionMatrix を使用すると、正しい形式の table を取得できます。例については、ブロックベースのワークフローにおけるセグメンテーション メトリクスの計算 を参照してください。

クラス名。string の配列、または文字ベクトルの cell 配列として指定します。

例: ["sky" "grass" "building" "sidewalk"]

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

例: metrics = evaluateSemanticSegmentation(pxdsResults,pxdsTruth,'Metrics',"bfscore") は、各クラス、各イメージ、およびデータセット全体の平均 BF スコアのみを計算します。

計算する semanticSegmentationMetrics のセグメンテーション メトリクス。'Metrics' と string のベクトルで構成されるコンマ区切りのペアで指定します。この引数は、DataSetMetricsClassMetrics、および ImageMetrics table のどの変数を計算するかを指定します。ConfusionMatrix および NormalizedConfusionMatrix は、'Metric' の値に関係なく計算されます。

説明集計データセット メトリクスイメージ メトリクスクラス メトリクス
"all"

すべてのセマンティック セグメンテーション メトリクスを評価します。

関数への入力として混同行列 (imageSetConfusion または blockSetConfusion) を指定する場合、関数は MeanBFScore をセマンティック セグメンテーション メトリクスから除外します。

すべての集計データセット メトリクスすべてのイメージ メトリクスすべてのクラス メトリクス
"accuracy"

精度は、各クラスに正しく識別されたピクセルの割合を示します。各クラスがどの程度正しくピクセルを識別するかを知る必要がある場合は、精度メトリクスを使用します。

  • 各クラスの Accuracy は、グラウンド トゥルースを基準に、正しく分類されたピクセル数と、そのクラスに含まれる合計ピクセル数の比率です。つまり、

    精度スコア = TP / (TP + FN)

    TP は真陽性の数、FN は偽陰性の数です。

  • 集計データセットの MeanAccuracy は、すべてのイメージのすべてのクラスの平均 Accuracy です。

  • 各イメージの MeanAccuracy は、その特定のイメージのすべてのクラスの平均 Accuracy です。

クラス精度は、グローバル精度に似た簡単なメトリクスですが、誤解を招く可能性があります。たとえば、すべてのピクセルに "自動車" のラベルを付けると、"自動車" クラスに対して完全なスコアが与えられます (ただし、他のクラスのスコアは完全ではありません)。セグメンテーション結果をより完全に評価するには、クラス精度を IoU と合わせて使用します。

MeanAccuracyMeanAccuracyAccuracy
"bfscore"

Boundary F1 (BF) の輪郭マッチング スコアは、各クラスの予測境界が真の境界にどの程度一致しているかを示します。IoU メトリクスよりも人間の定性評価との相関性が高い傾向のあるメトリクスが必要な場合は、BF スコアを使用します。

  • 各クラスの MeanBFScore は、すべてのイメージに対するそのクラスの平均 BF スコアです。

  • 各イメージの MeanBFScore は、その特定のイメージに含まれるすべてのクラスの平均 BF スコアです。

  • 集計データセットの MeanBFScore は、すべてのイメージに含まれるすべてのクラスの平均 BF スコアです。

詳細については、bfscore を参照してください。

関数への入力として混同行列 (imageSetConfusion または blockSetConfusion) を指定する場合は、このメトリクスを使用できません。

MeanBFScoreMeanBFScoreMeanBFScore
"global-accuracy"

GlobalAccuracy は、クラスに関係なく、正しく分類されたピクセル数と合計ピクセル数の比率です。正しく分類されたピクセルの割合の推定をすばやく、計算コストを低く得る必要がある場合は、グローバル精度メトリクスを使用します。

GlobalAccuracyGlobalAccuracyなし
"iou"

Intersection over Union (IoU、別名: Jaccard 類似度係数) は、最も一般的に使用されるメトリクスです。偽陽性にペナルティを課す統計的な精度測定値が必要な場合は、IoU メトリクスを使用します。

  • 各クラスの IoU は、正しく分類されたピクセル数と、そのクラスに含まれるグラウンド トゥルースと予測されたピクセルの合計数の比率です。つまり、

    IoU スコア = TP / (TP + FP + FN)

    イメージは、真陽性 (TP)、偽陽性 (FP)、および偽陰性 (FN) を表します。

  • 各イメージの MeanIoU は、その特定のイメージに含まれるすべてのクラスの平均 IoU スコアです。

  • 集計データセットの MeanIoU は、すべてのイメージに含まれるすべてのクラスの平均 IoU スコアです。

詳細については、jaccard を参照してください。

MeanIoUMeanIoUIoU
"weighted-iou"そのクラスに含まれるピクセル数によって重み付けされた、各クラスの平均 IoU。イメージに不釣り合いなサイズのクラスがある場合、このメトリクスを使用して、集計画質スコアへの小さいクラスの誤差の影響を低減します。WeightedIoUWeightedIoUなし

例: metrics = evaluateSemanticSegmentation(pxdsResults,pxdsTruth,'Metrics',["global-accuracy","iou"]) は、データセット、イメージ、およびクラスのグローバル精度と IoU メトリクスを計算します。

データ型: string

コマンド ウィンドウに評価の進行状況の情報を表示するかどうかのフラグ。'Verbose' と、1 (true) または 0 (false) のいずれかで構成されるコンマ区切りのペアとして指定します。

表示される情報には、進行状況バー、経過時間、推定の残り時間、およびデータセット メトリクスが含まれます。

例: metrics = evaluateSemanticSegmentation(pxdsResults, pxdsTruth,'Verbose',0) は、進行状況情報を表示せずに、セグメンテーション メトリクスを計算します。

データ型: logical

出力引数

すべて折りたたむ

セマンティック セグメンテーション メトリクス。semanticSegmentationMetrics オブジェクトとして返されます。

ブロックベースのセマンティック セグメンテーション メトリクス。F 行 1 列の cell 配列として返されます。ここで、F は、データ セットのイメージの数です。cell 配列の各要素には、対応するイメージのすべてのブロックについて計算したすべてのメトリクスの情報が含まれます。これらは、table として書式化されます。

各 table は K(f) 行です。ここで、K(f) はデータ セットの f 番目のイメージにおけるブロックの数です。table には最大 5 つの変数があります。

  • table には常に変数 BlockInfo が含まれています。この変数のこの table データは、ブロックに関する空間情報を提供する struct です。構造体の 4 つのフィールドは、BlockStartWorldBlockEndWorldDataStartWorld、および DataEndWorld です。これらのフィールドの詳細については、関数 apply の名前と値のペアの引数 'IncludeBlockInfo' を参照してください。

  • table には、出力引数 ssmDataSetMetrics プロパティのメトリクスが含まれています。既定では、メトリクスは GlobalAccuracyMeanAccuracyMeanIoU、および WeightedIoU です。ただし、ssm を作成し、Metrics の名前と値のペアの引数を使用して計算するメトリクスのサブセットを指定する場合、table には指定したメトリクスのみが含まれます。

参照

[1] Csurka, G., D. Larlus, and F. Perronnin. "What is a good evaluation measure for semantic segmentation?" Proceedings of the British Machine Vision Conference, 2013, pp. 32.1–32.11.

拡張機能

R2017b で導入