balancePixelLabels

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

Описание

пример

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

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

blockLocations = (___,'UseParallel',logical) дополнительно задает, использовать ли новый или существующий параллельный пул. Задайте этот аргумент в дополнение к входным параметрам от предыдущего синтаксиса.

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

Примеры

свернуть все

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

dataDir = fullfile(toolboxdir('vision'),'visiondata');
imDir = fullfile(dataDir,'building');
labelDir = fullfile(dataDir,'buildingPixelLabels');
imageFileList = dir(imDir);
labelFileList = dir(labelDir);

imageFileList = imageFileList(3:end);
labelFileList = labelFileList(3:end);

pixelLabelID = [1 2 3 4];
classNames = ["sky" "grass" "building" "sidewalk"];

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

for idx = 1:numel(labelFileList)
    bigImages(idx) = bigimage(imread([imDir filesep imageFileList(idx).name]));
    bigLabeledImages(idx) = bigimage(imread([labelDir filesep labelFileList(idx).name]),'Classes',classNames,'PixelLabelIDs',pixelLabelID);
end

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

bigimageLevel = 1;
blockSize = [20 15];

Создайте bigimageDatastore от набора данных изображений.

blabelds = bigimageDatastore(bigLabeledImages,bigimageLevel,'BlockSize',blockSize);

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

labelCounts = countEachLabel(blabelds);

Задайте количество местоположений блока.

numObservations = 2000;

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

locationSet = balancePixelLabels(bigLabeledImages,bigimageLevel,blockSize,numObservations);

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

bimdsBalanced = bigimageDatastore(bigLabeledImages,'BlockLocationSet',locationSet);

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

labelCountsBalanced = countEachLabel(bimdsBalanced);

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

figure;
h1 = histogram('Categories',labelCounts.Name,'BinCounts',labelCounts.PixelCount);
title(h1.Parent,'Original Dataset Labels');

figure;
h2 = histogram('Categories',labelCountsBalanced.Name,'BinCounts',labelCountsBalanced.PixelCount);
title(h2.Parent,'Sampled Block Set Labels');

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

свернуть все

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

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

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

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

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

Используйте новый или существующий пул в виде числового или логического 1 true или 0 false. Если вы не задаете этот вход, функция использует false. Если никакой параллельный пул не активен, новый пул открыт на основе параллельных настроек по умолчанию. DataSource свойство всего входа bigimage объекты должны быть допустимыми путями на каждом из параллельных рабочих.

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

свернуть все

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

Алгоритмы

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

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

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

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

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

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

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

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

Объекты

Введенный в R2020a