countEachLabel

Считайте вхождение пиксельной метки для изображений источника данных

Синтаксис

tbl = countEachLabel(datastore)

Описание

пример

tbl = countEachLabel(datastore) возвращает таблицу, содержащую информацию о пиксельных метках, и значьте datastore.

Примеры

свернуть все

Установите местоположение изображения и пиксельных данных о метке.

dataDir = fullfile(toolboxdir('vision'),'visiondata');
imDir = fullfile(dataDir,'building');
pxDir = fullfile(dataDir,'buildingPixelLabels');

Создайте пиксельный datastore метки изображений с помощью наземных изображений истины в imds и пикселе маркированные изображения в pxds.

imds = imageDatastore(imDir);
classNames = ["sky" "grass" "building" "sidewalk"];
pixelLabelID = [1 2 3 4];
pxds = pixelLabelDatastore(pxDir,classNames,pixelLabelID);
pximds = pixelLabelImageDatastore(imds,pxds);

Плоская пиксельная метка рассчитывает в наборе данных.

tbl = countEachLabel(pximds)
tbl=4×3 table
       Name       PixelCount    ImagePixelCount
    __________    __________    _______________

    'sky'         3.1485e+05       1.536e+06   
    'grass'       1.5979e+05       1.536e+06   
    'building'    1.0312e+06       1.536e+06   
    'sidewalk'         25313       9.216e+05   

Сбалансируйте классы с помощью универсального предшествующего взвешивания.

prior = 1/numel(classNames);
uniformClassWeights = prior./tbl.PixelCount
uniformClassWeights = 4×1
10-5 ×

    0.0794
    0.1565
    0.0242
    0.9876

Сбалансируйте классы с помощью обратного взвешивания частоты.

totalNumberOfPixels = sum(tbl.PixelCount);
frequency = tbl.PixelCount / totalNumberOfPixels;
invFreqClassWeights = 1./frequency
invFreqClassWeights = 4×1

    4.8632
    9.5827
    1.4848
   60.4900

Сбалансируйте классы с помощью среднего взвешивания частоты.

freq = tbl.PixelCount ./ tbl.ImagePixelCount
freq = 4×1

    0.2050
    0.1040
    0.6714
    0.0275

medFreqClassWeights = median(freq) ./ freq
medFreqClassWeights = 4×1

    0.7538
    1.4852
    0.2301
    5.6252

Передайте веса класса с помощью среднего взвешивания частоты для слоя классификации пикселей.

layer = pixelClassificationLayer('Classes',tbl.Name, ...
  'ClassWeights', medFreqClassWeights)
layer = 
  PixelClassificationLayer with properties:

            Name: ''
         Classes: [sky    grass    building    sidewalk]
    ClassWeights: [4x1 double]
      OutputSize: 'auto'

   Hyperparameters
    LossFunction: 'crossentropyex'

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

свернуть все

Datastore для того, чтобы обучить семантическую сеть сегментации, заданную как объект pixelLabelImageDatastore или pixelLabelDatastore.

Выходные аргументы

свернуть все

Информация о метке Pixel, возвращенная как таблица. Таблица содержит три переменные:

ПеременнаяОписание
NameИмя класса метки Pixel
PixelCountКоличество пикселей в классе
ImagePixelCountОбщее количество пикселей в изображениях, которые имели экземпляр класса

Советы

Вывод countEachLabel может использоваться, чтобы вычислить веса класса для балансировки класса. Например:

  • Универсальная балансировка класса взвешивает каждый класс, таким образом, что каждый содержит универсальную априорную вероятность:

    numClasses = height(tbl)
    prior = 1/numClasses;
    classWeights = prior./tbl.PixelCount

  • Обратная балансировка частоты взвешивает каждый класс, таким образом, что недостаточно представленным классам дают более высокий вес:

    totalNumberOfPixels = sum(tbl.PixelCount)
    frequency = tbl.PixelCount / totalNumberOfPixels;
    classWeights = 1./frequency

  • Средние веса балансировки частоты каждый класс с помощью средней частоты. Вес для каждого класса задан как медиана (imageFreq)/imageFreq (c), где imageFreq (c) представляет количество пикселей класса, разделенного на общее количество пикселей в изображениях, которые имели экземпляр класса (c):

    imageFreq = tbl.PixelCount ./ tbl.ImagePixelCount
    classWeights = median(imageFreq) ./ imageFreq
    
    Расчетные веса класса могут быть переданы pixelClassificationLayer

Введенный в R2017b