balancePixelLabels

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

Описание

пример

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

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

blockLocations = balancePixelLabels(blockedImages,blockSize,numObservations,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);

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

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. The axes 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. The axes with title Balanced dataset labels contains an object of type categoricalhistogram.

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

свернуть все

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

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

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

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами 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 (false). Если параллельный пул не активен, то новый пул открывается на основе настроек параллели по умолчанию. The DataSource свойство всех входных blockedImage объекты должны быть допустимыми путями к каждому из параллельных рабочих процессов.

Для этого синтаксиса требуется Parallel Computing Toolbox™.

Типы данных: logical

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

свернуть все

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

Алгоритмы

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

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

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

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

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

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

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

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

расширить все

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

Введенный в R2020a