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

evaluateSemanticSegmentation

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

説明

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

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

すべて折りたたむ

各クラス、各イメージ、およびデータセット全体の混同行列とメトリクスを計算して、セマンティック セグメンテーションの結果を評価します。

セマンティック セグメンテーションの実行

一連のイメージに含まれる各ピクセルに、オブジェクトまたは背景としてラベルを付けます。この例では、グラウンド トゥルース ラベルの付いた 100 個の三角形のテスト イメージを含んだ triangleImages データセットを使用します。

データセット、テスト イメージ、およびグラウンド トゥルース ラベルの場所を定義します。

dataSetDir = fullfile(toolboxdir('vision'),'visiondata','triangleImages');
testImagesDir = fullfile(dataSetDir,'testImages');
testLabelsDir = fullfile(dataSetDir,'testLabels');

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

imds = imageDatastore(testImagesDir);

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

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

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

pxdsTruth = pixelLabelDatastore(testLabelsDir,classNames,labelIDs);

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

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

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

pxdsResults = semanticseg(imds,net,"WriteLocation",tempdir);
Running semantic segmentation network
-------------------------------------
* Processing 100 images.
* Progress: 100.00%

混同行列とセグメンテーション メトリクスの計算

グラウンド トゥルースに対して予測結果を評価します。既定では、evaluateSemanticSegmentation は、混同行列、正規化された混同行列、データセット メトリクス、クラス メトリクス、およびイメージ メトリクスを含む、利用可能なすべてのメトリクスを計算します。

metrics = evaluateSemanticSegmentation(pxdsResults,pxdsTruth)
Evaluating semantic segmentation results
----------------------------------[==================================================] 100%
Elapsed time: 00:00:02
Estimated time remaining: 00:00:00
* Finalizing... Done.
* Data set metrics:

    GlobalAccuracy    MeanAccuracy    MeanIoU    WeightedIoU    MeanBFScore
    ______________    ____________    _______    ___________    ___________

       0.90624          0.95085       0.61588      0.87529        0.40652  
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  

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

    triangle            1            0  
    background     0.0983       0.9017  

入力引数

すべて折りたたむ

セマンティック セグメンテーションの結果として得られる予測されたピクセル ラベル。PixelLabelDatastore オブジェクトまたは PixelLabelDatastore オブジェクトの cell 配列として指定します。

グラウンド トゥルース ピクセル ラベル。PixelLabelDatastore オブジェクトまたは PixelLabelDatastore オブジェクトの cell 配列として指定します。

名前と値のペアの引数

オプションの引数 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"すべてのセマンティック セグメンテーション メトリクスを評価します。すべての集計データセット メトリクスすべてのイメージ メトリクスすべてのクラス メトリクス
"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 を参照してください。

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 オブジェクトとして返されます。

参照

[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 で導入