countEachLabel

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

Синтаксис

Описание

пример

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

Примеры

свернуть все

Загрузите таблицу, которая содержит ограничительные рамки с метками для транспортных средств.

load('vehicleTrainingData.mat');

Загрузите таблицу, которая содержит ограничительные рамки с метками для знаков Стоп и автомобилей.

load('stopSignsAndCars.mat');

Объедините основные блоки истинности и метки, исключая имена файла образа в первом столбце.

vehiclesTbl  = vehicleTrainingData(:,2:end);
stopSignsTbl = stopSignsAndCars(:,2:end);

Создайте boxLabelDatastore, который использование 2 таблиц, один с данными о метке транспортного средства и другим со знаками Стоп помечает данными.

blds = boxLabelDatastore(vehiclesTbl,stopSignsTbl);
tbl = countEachLabel(blds)
tbl=4×3 table
     Label      Count    ImageCount
    ________    _____    __________

    vehicle      336        295    
    stopSign      42         41    
    carRear       10          9    
    carFront       9          8    

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

histogram('Categories',tbl.Label,'BinCounts',tbl.Count);

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

hold on;
histogram('Categories',tbl.Label,'BinCounts',tbl.ImageCount);

Figure contains an axes. The axes contains 2 objects of type categoricalhistogram.

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

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 с маркированными данными для того, чтобы обучить сеть семантической сегментации или сеть обнаружения объектов в виде pixelLabelDatastore, pixelLabelImageDatastore, или boxLabelDatastore объект.

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

свернуть все

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

Для pixelLabelDatastore и pixelLabelImageDatastore входные параметры, counts выход содержит:

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

Для boxLabelDatastore входные параметры, counts выходная таблица содержит:

Переменные количества поляОписание
LabelИмя класса метки поля
CountОбщее количество меток класса через все изображения
ImageCountОбщее количество изображений, которые содержат один или несколько экземпляров класса

Советы

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

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

    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