exponenta event banner

countEachLabel

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

Синтаксис

Описание

пример

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

Примеры

свернуть все

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

load('vehicleTrainingData.mat');

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

load('stopSignsAndCars.mat');

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

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

Создайте боксLabelDatastore, используя 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');

Создание хранилища данных изображения метки пикселя с использованием изображений истинности земли в 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'

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

свернуть все

Хранилище данных с помеченными данными для обучения сети семантической сегментации или сети обнаружения объектов, указанное как pixelLabelDatastore, pixelLabelImageDatastore, или boxLabelDatastore объект.

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

свернуть все

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

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

Переменные счетчика пикселейОписание
NameИмя класса меток пикселей
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