exponenta event banner

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

Этот синтаксис требует Toolbox™ параллельных вычислений.

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

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

свернуть все

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

Алгоритмы

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

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

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

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

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

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

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

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

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

Не рекомендуется начинать с R2021a

Представлен в R2020a