evaluateSemanticSegmentation

Оцените набор данных семантической сегментации относительно основной истины

Описание

пример

ssm = evaluateSemanticSegmentation(dsResults,dsTruth) вычисляет различные метрики для оценки качества результатов семантической сегментации, dsResults, против основной истины, dsTruth.

ssm = evaluateSemanticSegmentation(imageSetConfusion,classNames) вычисляет различные метрики, чтобы оценить качество результатов семантической сегментации из матриц неточностей, imageSetConfusion, с классами сегментации classNames.

[ssm,blockMetrics] = evaluateSemanticSegmentation(blockSetConfusion,classNames) вычисляет различные метрики, чтобы оценить качество основанных на блоках результатов семантической сегментации из матриц неточностей, blockSetConfusion с классами classNames.

[___] = evaluateSemanticSegmentation(___,Name,Value) вычисляет семантические метрики сегментации с помощью одного или нескольких Name,Value пара аргументов для управления оценкой.

Примеры

свернуть все

The triangleImages набор данных имеет 100 тестовых изображений с основной истиной метками. Определите местоположение набора данных.

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

Определите местоположение тестовых изображений.

testImagesDir = fullfile(dataSetDir,'testImages');

Определите местоположение меток основной истины.

testLabelsDir = fullfile(dataSetDir,'testLabels');

Создайте imageDatastore, содержащий тестовые изображения.

imds = imageDatastore(testImagesDir);

Задайте имена классов и связанные с ними идентификаторы меток.

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]

Отобразите точность классификации, пересечение через объединение и контур граничного 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   

Входные параметры

свернуть все

Предсказанные метки пикселей, следующие из семантической сегментации, заданные как datastore или массив ячеек объектов datastore. dsResults может быть любым datastore, который возвращает категориальные изображения, такие как PixelLabelDatastore или pixelLabelImageDatastore. read(dsResults) должен возвращать категориальный массив, массив ячеек или таблицу. Если read функция возвращает многополюсный массив ячеек или таблицу, второй столбец должен содержать категориальные массивы.

Основные истины, заданные как datastore или массив ячеек объектов datastore. dsResults может быть любым datastore, который возвращает категориальные изображения, такие как PixelLabelDatastore или pixelLabelImageDatastore. Используя read(dsTruth) должен возвращать категориальный массив, массив ячеек или таблицу. Если read функция возвращает многополюсный массив ячеек или таблицу, второй столбец должен содержать категориальные массивы.

Матрица неточностей для классов в сегментированных изображениях, заданная как одно из следующего, где F количество изображений в наборе данных.

  • Таблица с F строками и одной переменной с именем ConfusionMatrix. Каждая строка в таблице содержит массив ячеек с матрицей неточностей для соответствующего изображения.

  • F массив ячеек -by-one. Каждый элемент массива ячеек содержит матрицу неточностей для соответствующего изображения.

Матрицы неточностей для сегментированных блоков, заданные как таблица с B строками и тремя столбцами, где B - общее количество блоков во всех изображениях в наборе данных. Три столбца являются переменными ImageNumber, ConfusionMatrix, и BlockInfo. Вы можете получить таблицу правильного формата, используя segmentationConfusionMatrix функция в рамках вызова на основе блоков apply функция. Для получения примера смотрите Вычисление метрик сегментации в рабочем процессе на основе блоков.

Имена классов, заданные как массив строк или массив ячеек из векторов символов.

Пример: ["sky" "grass" "building" "sidewalk"]

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: metrics = evaluateSemanticSegmentation(pxdsResults,pxdsTruth,'Metrics',"bfscore") вычисляет только средний счет BF каждого класса, каждого изображения и всего набора данных.

Метрики сегментации в semanticSegmentationMetrics для вычисления, заданная как разделенная разделенными запятой парами, состоящая из 'Metrics' и вектор строк. Этот аргумент задает какие переменные в DataSetMetrics, ClassMetrics, и ImageMetrics таблицы для вычисления. ConfusionMatrix и NormalizedConfusionMatrix вычисляются независимо от значения 'Metric'.

ЗначениеОписаниеМетрика совокупного набора данныхМетрика изображенийМетрика класса
"all"

Оцените все метрики семантической сегментации.

Функция исключает MeanBFScore из семантических метрик сегментации, когда вы задаете матрицу неточностей (imageSetConfusion или blockSetConfusion) как вход в функцию.

Все совокупные метрики набора данныхВсе метрики изображенийВсе метрики классов
"accuracy"

Точность указывает процент правильно идентифицированных пикселей для каждого класса. Используйте метрику точности, если вы хотите знать, насколько хорошо каждый класс правильно идентифицирует пиксели.

  • Для каждого класса, Accuracy - отношение правильно классифицированных пикселей к общему количеству пикселей в этом классе, согласно основной истины. Другими словами,

    Счет точности = TP/( TP + FN)

    TP - это количество истинных срабатываний, а FN - это количество ложных срабатываний.

  • Для совокупного набора данных MeanAccuracy является средним Accuracy всех классов на всех изображениях.

  • Для каждого изображения, MeanAccuracy является средним Accuracy всех классов в этом конкретном изображении.

Точность классов является простой метрикой, аналогичной глобальной точности, но она может ввести в заблуждение. Например, маркировка всех пикселей «автомобиль» дает идеальный счет для класса «автомобиль» (хотя и не для других классов). Используйте точность классов в сочетании с IoU для более полной оценки результатов сегментации.

MeanAccuracyMeanAccuracyAccuracy
"bfscore"

Счет соответствия контура граничного F1 (BF) показывает, насколько хорошо предсказанная граница каждого класса выравнивается с истинной границей. Используйте счет BF, если вы хотите метрику, которая имеет тенденцию лучше коррелировать с качественной оценкой человека, чем метрика IoU.

  • Для каждого класса, MeanBFScore - средний счет BF этого класса по всем изображениям.

  • Для каждого изображения, MeanBFScore - средний счет BF для всех классов в этом конкретном изображении.

  • Для совокупного набора данных MeanBFScore - средний счет BF для всех классов на всех изображениях.

Для получения дополнительной информации см. bfscore.

Эта метрика недоступна, когда вы задаете матрицу неточностей (imageSetConfusion или blockSetConfusion) как вход в функцию.

MeanBFScoreMeanBFScoreMeanBFScore
"global-accuracy"

GlobalAccuracy - отношение правильно классифицированных пикселей, независимо от класса, к общему количеству пикселей. Используйте глобальную метрику точности, если вы хотите быстро и в вычислительном отношении недорогую оценку процента правильно классифицированных пикселей.

GlobalAccuracyGlobalAccuracyничего
"iou"

Перекресток над объединением (IoU), также известный как коэффициент подобия Жаккара, является наиболее часто используемой метрикой. Используйте метрику 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-на-один массив ячеек, где F количество изображений в наборе данных. Каждый элемент массива ячеек содержит информацию обо всех метриках, рассчитанных для всех блоков в соответствующем изображении, форматированных как таблица.

Каждая таблица имеет K (f) строки, где K (f) - количество блоков в f-м изображении в наборе данных. Таблица имеет до пяти переменных:

  • Таблица всегда включает в себя BlockInfo переменная. Данные этой таблицы в этой переменной являются структурами, которые обеспечивают пространственную информацию о блоке. Четыре поля struct BlockStartWorld, BlockEndWorld, DataStartWorld, и DataEndWorld. Для получения дополнительной информации об этих полях смотрите аргумент пары "имя-значение" 'IncludeBlockInfo' apply функция.

  • Таблица включает метрики в свойстве DataSetMetrics ssm выходной аргумент. По умолчанию метрики GlobalAccuracy, MeanAccuracy, MeanIoU, и WeightedIoU. Однако, если вы создаете ssm и задайте подмножество метрик для вычисления с помощью Metrics аргумент пары "имя-значение", тогда таблица включает только указанные метрики.

Ссылки

[1] Csurka, G., D. Larlus, and F. Perronnin. «Какова хорошая мера оценки для семантической сегментации?» Материалы конференции British Machine Vision Conference, 2013, pp. 32.1-32.11.

Расширенные возможности

Введенный в R2017b