exponenta event banner

balanceBoxLabels

Метки ограничивающих рамок баланса для обнаружения объектов

Описание

пример

locationSet = balanceBoxLabels(boxLabels,blockedImages,blockSize,numObservations) балансирует метки ограничивающих рамок, boxLabels, путем избыточной выборки блоков изображений, содержащих менее частые классы, содержащиеся в коллекции заблокированных объектов изображения blockedImages. numObservations - необходимое количество местоположений блоков, и blockSize задает размер блока.

locationSet = balanceBoxLabels(boxLabels,blockedImages,blockSize,numObservations,Name,Value) указывает дополнительные аспекты выбранных блоков с помощью аргументов «имя-значение».

Примеры

свернуть все

Загрузите данные меток полей, которые содержат поля и метки для одного изображения. Высота и ширина каждого ящика - [20,20].

d  = load('balanceBoxLabelsData.mat');
boxLabels    = d.BoxLabels;

Создание заблокированного изображения размера [500,500].

blockedImages = blockedImage(zeros([500,500]));

Выберите размер изображений для каждого наблюдения.

blockSize = [50,50];

Визуализация с помощью гистограммы для идентификации дисбаланса классов в метках полей.

blds = boxLabelDatastore(boxLabels);
datasetCount = countEachLabel(blds);
figure;
h1 = histogram('Categories',datasetCount.Label,'BinCounts',datasetCount.Count)
h1 = 
  Histogram with properties:

              Data: [0x0 categorical]
            Values: [1 1 1 1 1 1 1 1 1 1 1 11]
    NumDisplayBins: 12
        Categories: {1x12 cell}
      DisplayOrder: 'manual'
     Normalization: 'count'
      DisplayStyle: 'bar'
         FaceColor: 'auto'
         EdgeColor: [0 0 0]

  Show all properties

Измерьте распределение меток коробки. Если коэффициент вариации больше 1, то существует дисбаланс классов.

cvBefore = std(datasetCount.Count)/mean(datasetCount.Count)
cvBefore = 1.5746

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

numClasses = height(datasetCount);
numObservations = mean(datasetCount.Count) * numClasses;

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

ThresholdValue = 0.5;

Баланс boxLabels с использованием balanceBoxLabels функция.

locationSet = balanceBoxLabels(boxLabels,blockedImages,blockSize,...
        numObservations,'OverlapThreshold',ThresholdValue);
Balancing box labels for 1 images with [==================================================] 100%
[==================================================] 100%
Balancing box labels complete.

Подсчитайте метки, содержащиеся в блоках изображений.

bldsBalanced = boxLabelDatastore(boxLabels,locationSet);
balancedDatasetCount = countEachLabel(bldsBalanced);

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

hold on;
balancedLabels = balancedDatasetCount.Label;
balancedCount  = balancedDatasetCount.Count;
h2 = histogram('Categories',balancedLabels,'BinCounts',balancedCount);
title(h2.Parent,"Balanced class labels (OverlapThreshold: " + ThresholdValue + ")" );
legend(h2.Parent,{'Before','After'});

Figure contains an axes. The axes with title Balanced class labels (OverlapThreshold: 0.5) contains 2 objects of type categoricalhistogram. These objects represent Before, After.

Измерьте распределение новых этикеток боксов.

cvAfter = std(balancedCount)/mean(balancedCount)
cvAfter = 0.4588

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

свернуть все

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

  • Первый столбец содержит ограничивающие рамки и должен быть вектором ячейки. Каждый элемент вектора ячейки содержит M-by-4 матрицы в формате [x, y, width, height] для M-полей.

  • Второй столбец должен быть вектором ячейки, который содержит имена меток, соответствующие каждой ограничивающей рамке. Каждый элемент в векторе ячейки должен быть M-by-1 категориальным или строковым вектором.

Чтобы создать таблицу меток полей на основе данных истинности земли,

  1. Используйте приложение Image Labeler или Video Labeler, чтобы пометить свою достоверность. Экспортируйте помеченные данные истинности основания в рабочую область.

  2. Создайте хранилище данных меток ограничивающих рамок с помощью команды objectDetectorTrainingData функция.

  3. Вы можете получить boxLabels от LabelData свойство хранилища данных метки поля, возвращенное objectDetectorTrainingData, ( blds.LabelData).

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

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

Число возвращаемых расположений блоков, указанное как положительное целое число.

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

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

Пример: 'OverlapThreshold','1'

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

Порог перекрытия, заданный как положительный скаляр в диапазоне [0,1]. Когда перекрытие между ограничивающей рамкой и окном обрезки превышает пороговое значение, поля в boxLabels входные данные подрезаны к границе окна блока изображения. Если перекрытие меньше порогового значения, поля отбрасываются. При снижении порога часть объекта может быть отброшена. Чтобы уменьшить количество объекта, которое может быть подрезано на границе, увеличьте порог. Увеличение порога также может привести к снижению сбалансированности этикеток коробок.

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

площадь (bboxA∩window )/площадь (baseA)

Отображение информации о ходе выполнения, указанной как числовая или логическая 1 (true) или 0 (false). Установить для этого свойства значение true для отображения информации.

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

свернуть все

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

Алгоритмы

свернуть все

Метки боксов балансировки

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

Проверка наличия остатка

Можно проверить успешность балансировки путем сравнения гистограмм количества этикеток до и после балансировки. Также можно проверить значение коэффициента вариации. Для достижения наилучших результатов значение должно быть меньше исходного значения. Дополнительную информацию см. на веб-сайте Национального института стандартов и технологий (NIST), дополнительную информацию см. в разделе Коэффициент вариации.

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

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

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

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