balancePixelLabels

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

Описание

пример

blockLocations = balancePixelLabels(blockedImages,blockSize,numObservations) создает список местоположений блока в больших помеченных изображениях, blockedImages, тот результат в классе сбалансировал набор данных путем сверхдискретизации областей изображений, которые содержат менее - общие метки. numObservations необходимое количество местоположений блока и blockSize задает размер блока.

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

blockLocations = balancePixelLabels(blockedImages,blockSize,numObservations,Name,Value) задает дополнительные аспекты выбранных блоков с помощью аргументов name-value.

Примеры

свернуть все

Задайте местоположение помеченного набора данных изображений.

dataDir = fullfile(toolboxdir('vision'), 'visiondata');
labelDir = fullfile(dataDir, 'buildingPixelLabels');
fileSet = matlab.io.datastore.FileSet(labelDir, "FileExtensions", {'.png'});

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

blockedImages = blockedImage(fileSet);

Установите размер блока изображений. Примите самый прекрасный уровень разрешения.

blockSize = [20 15];

Создайте blockedImageDatastore от матрицы изображений.

blabelds = blockedImageDatastore(blockedImages, 'BlockSize', blockSize);

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

pixelLabelID = [1 2 3 4];
classNames = ["sky" "grass" "building" "sidewalk"];
labelCounts = countEachLabel(blabelds,...
                 'Classes', classNames, 'PixelLabelIDs', pixelLabelID);

Количество Speciy местоположений блока к выборке от набора данных.

numObservations = 2000;

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

locationSet = balancePixelLabels(blockedImages, blockSize, numObservations,...
                 'Classes', classNames, 'PixelLabelIDs', pixelLabelID);

Создайте blockedImageDatastore использование местоположений блока после балансировки.

blabeldsBalanced = blockedImageDatastore(blockedImages, 'BlockLocationSet', locationSet);

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

labelCountsBalanced = countEachLabel(blabeldsBalanced,...
                     'Classes', classNames, 'PixelLabelIDs', pixelLabelID);

Сравните исходные несбалансированные метки и метки после балансировки метки.

figure
h1 = histogram('Categories',labelCounts.Name,...
    'BinCounts',labelCounts.PixelCount)
h1 = 
  Histogram with properties:

              Data: [0x0 categorical]
            Values: [314849 159787 1031235 25313]
    NumDisplayBins: 4
        Categories: {'sky'  'grass'  'building'  'sidewalk'}
      DisplayOrder: 'manual'
     Normalization: 'count'
      DisplayStyle: 'bar'
         FaceColor: 'auto'
         EdgeColor: [0 0 0]

  Show all properties

title(h1.Parent,'Original dataset labels')

Figure contains an axes object. The axes object with title Original dataset labels contains an object of type categoricalhistogram.

figure
h2 = histogram('Categories',labelCountsBalanced.Name,...
    'BinCounts',labelCountsBalanced.PixelCount)
h2 = 
  Histogram with properties:

              Data: [0x0 categorical]
            Values: [131906 241546 81006 143167]
    NumDisplayBins: 4
        Categories: {'sky'  'grass'  'building'  'sidewalk'}
      DisplayOrder: 'manual'
     Normalization: 'count'
      DisplayStyle: 'bar'
         FaceColor: 'auto'
         EdgeColor: [0 0 0]

  Show all properties

title(h2.Parent,'Balanced dataset labels')

Figure contains an axes object. The axes object with title Balanced dataset labels contains an object of type categoricalhistogram.

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

свернуть все

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

Размер блока считанных данных в виде двухэлементного вектора-строки из положительных целых чисел, [numrows, numcols]. Первый элемент задает количество строк в блоке. Второй элемент задает количество столбцов.

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

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'Classes',classNames,'PixelLabelIDs',pixelLabelID

Уровни разрешения изображения в виде числового скаляра или вектора с целочисленным знаком из той же длины как вектор из blockedImages. Если вы задаете скалярное значение, то все блокированные блоки предоставления изображений на заданном уровне разрешения.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

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

Необходимо задать этот аргумент когда blockedImages числовые данные выражений, такой как тогда, когда данные о пиксельных метках хранится как изображение RGB. Не задавайте этот аргумент когда blockedImages категориальные данные выражений.

Типы данных: char | string

Числовые идентификаторы, которые сопоставляют метки с именами классов в виде вектора из числовых идентификаторов для каждой метки или M-by-3 матрица, где M является количеством имен классов. Длина вектора должна равняться количеству имен классов. Каждая строка является трехэлементным вектором, представляющим пиксельное значение RGB, сопоставленное с каждым именем класса.

Необходимо задать этот аргумент когда blockedImages числовые данные выражений, такой как тогда, когда данные о пиксельных метках хранится как изображение RGB. Не задавайте этот аргумент когда blockedImages категориальные данные выражений.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Используйте новый или существующий параллельный пул в виде числового или логического 1 TRUE) или 0 ложь). Если никакой параллельный пул не активен, то новый пул открыт на основе параллельных настроек по умолчанию. DataSource свойство всего входа blockedImage объекты должны быть допустимыми путями на каждом из параллельных рабочих.

Этот синтаксис требует Parallel Computing Toolbox™.

Типы данных: логический

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

свернуть все

Блокируйте местоположения, возвращенные как a blockLocationSet объект. Объект содержит numObservations количество местоположений сбалансированных блоков, каждого размера blockSize.

Алгоритмы

Чтобы сбалансировать пиксельные метки, функция сверхдискретизировала классы меньшинства во входных изображениях. Класс меньшинства определяется путем вычисления полной пиксельной метки, значит полный набор данных. Алгоритм выполняет эти шаги.

  1. Изображения во входной матрице изображений разделены на макро-блоки, который является кратным blockSize входное значение.

  2. Функция считает пиксельные метки для всех классов в каждом макро-блоке. Затем это выбирает макро-блок с самыми большими случаями классов меньшинства с помощью, взвесил случайный выбор.

  3. Алгоритм использует случайное местоположение блока в выбранном макро-блоке, чтобы выполнить сверхдискретизацию. Источник местоположения блока должен всегда быть полностью в рамках макро-блока.

  4. Функция обновляет полные количества метки на основе пиксельных количеств метки классов, найденных для выбранного макро-блока.

  5. Функция включает новые (сверхдискретизированные) классы, чтобы вычислить новый класс меньшинства.

  6. Этот процесс повторения до количества обработанных местоположений блока равняется значению, заданному numObservations входное значение.

Вопросы совместимости

развернуть все

Не рекомендуемый запуск в R2021a

Смотрите также

Объекты

Введенный в R2020a