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');

Создайте pixel метки image 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Имя класса метки пикселя
PixelCountКоличество пикселей в классе
ImagePixelCountОбщее количество пикселей в изображениях, которые имели образец класса

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

Переменные Box CountОписание
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