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

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

свернуть все

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

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

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

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

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

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

  3. Вы можете получить boxLabels от LabelData свойство box label datastore, возвращаемое objectDetectorTrainingData, ( blds.LabelData).

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

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

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

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

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

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

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

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

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

area(bboxAwindow)/area(bboxA)

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

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

свернуть все

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

Алгоритмы

свернуть все

Метки балансирующего ящика

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

Проверка баланса

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

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

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

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

Введенный в R2020a