balanceBoxLabels

Сбалансируйте метки ограничительной рамки для обнаружения объектов

Описание

пример

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

locationSet = balanceBoxLabels(boxLabels,blockedImages,blockSize,numObservations,Name,Value) задает дополнительные аспекты выбранных блоков с помощью аргументов 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

Измерьте распределение меток поля. Если coefficent изменения - больше чем 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 object. The axes object with title Balanced class labels (OverlapThreshold: 0.5) contains 2 objects of type categoricalhistogram. These objects represent Before, After.

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

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. Создайте datastore метки ограничительной рамки с помощью objectDetectorTrainingData функция.

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

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

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

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

Аргументы name-value

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

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

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

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

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

area(bboxAwindow)/area(bboxA)

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

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

свернуть все

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

Алгоритмы

свернуть все

Балансировка меток поля

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

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

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

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

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

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

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

Объекты

Введенный в R2020a