countEachLabel

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

Описание

пример

counts = countEachLabel(bigds) возвращает количество каждой пиксельной метки для всех больших изображений в большом datastore изображений bigds.

Примеры

свернуть все

Загрузите данные о пиксельных метках.

load('buildingPixelLabeled.mat');

Задайте классы и пиксельную метку IDs данных о пиксельных метках.

pixelLabelID = [1 2 3 4];
classNames = ["sky" "grass" "building" "sidewalk"];

Создайте bigimage управлять данными о пиксельных метках.

bigLabeledImage = bigimage(uint8(label),'Classes',classNames,'PixelLabelIDs',pixelLabelID);
bigimageshow(bigLabeledImage)

Создайте bigimageDatastore это читает блоки размера 200 150 пиксели на самом прекрасном уровне разрешения от bigLabeledImage.

level = 1;
blockSize = [200 150];
biglabelds = bigimageDatastore(bigLabeledImage,level,'BlockSize',blockSize);

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

tbl = countEachLabel(biglabelds)
tbl=4×3 table
       Name       PixelCount    BlockPixelCount
    __________    __________    _______________

    "sky"              81525        1.58e+05   
    "grass"            32983           51200   
    "building"    1.8036e+05       3.072e+05   
    "sidewalk"         10491           51200   

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

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

    0.0307
    0.0758
    0.0139
    0.2383

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

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

    3.7456
    9.2580
    1.6931
   29.1067

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

freq = tbl.PixelCount ./ tbl.BlockPixelCount;
medFreqClassWeights = median(freq) ./ freq
medFreqClassWeights = 4×1

    1.0689
    0.8562
    0.9394
    2.6917

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

свернуть все

Большой datastore изображений в виде bigimageDatastore объект.

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

свернуть все

Пометьте информацию, возвращенную как таблица, которая содержит три переменные.

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

Советы

Можно использовать информацию о метке, возвращенную countEachLabel вычислить веса класса для балансировки класса. Например, для помеченной информации о пиксельных данных в tbl:

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

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

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

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

  • Веса балансировки медианной частоты каждый класс с помощью медианной частоты:

    imageFreq = tbl.PixelCount ./ tbl.ImagePixelCount
    classWeights = median(imageFreq) ./ imageFreq
    

Можно передать расчетные веса класса pixelClassificationLayer.

Введенный в R2020a