Балансировка меток ограничивающих прямоугольников для обнаружения объектов
балансы, ограничивающие метки прямоугольников, 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'});
Измерьте распределение новых меток прямоугольных коробок.
cvAfter = std(balancedCount)/mean(balancedCount)
cvAfter = 0.4588
boxLabels
- Маркированные данные ограничивающего прямоугольникаМаркированные данные ограничивающего прямоугольника, заданные как таблица с двумя столбцами.
Первый столбец содержит ограничительные рамки и должен быть вектором камеры. Каждый элемент в векторе камеры содержит матрицы <reservedrangesplaceholder5>-by-4 в формате [x, y, width, height] для M коробок.
Второй столбец должен быть вектором камер, который содержит имена меток, соответствующие каждому ограничивающему прямоугольнику. Каждый элемент в векторе камеры должен быть M-на-1 категориальным или строковым вектором.
Чтобы создать таблицу меток ящиков из достоверных данных,
Используйте Image Labeler или Video Labeler приложение, чтобы пометить основную истину. Экспортируйте маркированные достоверные данные в рабочую область.
Создайте метку ограничивающего прямоугольника datastore используя objectDetectorTrainingData
функция.
Вы можете получить boxLabels
от LabelData
свойство box label datastore, возвращаемое objectDetectorTrainingData
, ( blds.LabelData
).
blockedImages
- Маркированные заблокированные изображенияblockedImage
объектыМаркированные заблокированные изображения, заданные как массив blockedImage
объекты, содержащие изображения меток пикселей.
blockSize
- Размер блокаРазмер блока считанных данных, заданный как двухэлементный вектор-строка положительных целых чисел, [numrows, numcols]. Первый элемент задает количество строк в блоке. Второй элемент определяет количество столбцов.
numObservations
- Количество расположений блоковКоличество расположений блоков для возврата, заданное как положительное целое число.
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
OverlapThreshold
', '1'
'Levels'
- Уровень разрешения каждого изображения1
(по умолчанию) | положительный целочисленный скаляр | B
вектор -на 1 положительных целых чиселУровень разрешения каждого изображения в массиве blockedImage
объекты, заданные в виде положительного целочисленного скаляра или вектора B-на-1 положительных целых чисел, где B - длина массива blockedImage
объекты.
'OverlapThreshold'
- Порог перекрытия1
(по умолчанию) | скаляром в области значений [0,1]Порог перекрытия, заданный как положительная скалярная величина в область значений [0,1]. Когда перекрытие между ограничивающим прямоугольником и окном обрезки больше порога, поля в boxLabels
входы вырезаются до границы окна блока изображений. Когда перекрытие меньше порога, коробки отбрасываются. Когда вы понижаете порог, часть объекта может быть отброшена. Чтобы уменьшить количество, которое объект может быть обрезан на границе, увеличьте порог. Увеличение порога может также вызвать менее сбалансированные метки коробки.
Количество перекрытия между ограничивающим прямоугольником и окном обрезки определяется как.
'Verbose'
- Отображение информации о прогрессеtrue
или 1
(по умолчанию) | false
или 0
Отобразите информацию о прогрессе, заданную в виде числа или логического 1
(true
) или 0
(false
). Установите это свойство на true
для отображения информации.
locationSet
- Сбалансированные меткиblockLocationSet
объектСбалансированные метки, возвращенные как blockLocationSet
объект. Объект содержит numObservations
количество местоположений сбалансированных блоков, каждый из которых имеет размер blockSize
.
Чтобы сбалансировать метки ящика, функция над классами выборок, которые меньше представлены в заблокированном изображении или большом изображении. Метки ящика подсчитываются по набору данных и сортируются на основе каждого счетчика классов. Каждый размер изображения разделяется на несколько квадрантов, на основе blockSize
входное значение. Алгоритм случайным образом выбирает несколько блоков в каждом квадранте с менее представленными классами. Блоки без каких-либо объектов отбрасываются. Балансировка прекращается после выбора заданного количества блоков.
Можно проверить успех балансировки путем сравнения гистограмм количества меток до и после балансировки. Можно также проверить коэффициент изменения значения. Для наилучших результатов значение должно быть меньше исходного значения. Для получения дополнительной информации смотрите веб-сайт Национального института стандартов и технологий (NIST), см. Коэффициент изменения для получения дополнительной информации.
bigLabeledImages
аргумент не рекомендуетсяНе рекомендуемый запуск в R2021a
The bigLabeledImages
аргумент, который поддерживает bigimage
объекты, не рекомендуемый. Используйте blockedImages
вместо этого аргумент, который поддерживает blockedImage
объекты. The blockedImage
объект предлагает несколько преимуществ, включая расширение обработки N-D, более простой интерфейс и пользовательскую поддержку чтения и записи нестандартных форматов изображений.
Хотя нет никаких планов по удалению bigLabeledImages
аргумент в это время переключитесь на blockedImages
аргумент, чтобы использовать дополнительные возможности и гибкость.
Чтобы обновить код, выполните следующие действия:
Замените bigimage
входной параметр объекта с blockedImage
входной параметр объекта для второго аргумента этой функции.
Если вы хотите выбрать блоки любого из заблокированных изображений на уровне разрешения, отличном от 1, задайте 'Levels
'имя-значение аргумента. Вы можете опустить этот аргумент, когда хотите выбрать блоки из всех заблокированных изображений на уровне разрешения 1.
Таблица приводит пример, как обновить код.
Обескураженное использование | Рекомендуемая замена |
---|---|
Этот пример выбирает блоки на уровне разрешения 1 из boxLabels = load('balanceBoxLabelsData.mat').BoxLabels; bim = bigimage(zeros([500,500])); blockSize = [50 50]; numObservations = 20; locationSet = balanceBoxLabels(boxLabels,bim,1, ... blockSize,numObservations); | Вот эквивалентный код, заменяющий входной boxLabels = load('balanceBoxLabelsData.mat').BoxLabels; bim = blockedImage(zeros([500,500])); blockSize = [50 50]; numObservations = 20; locationSet = balanceBoxLabels(boxLabels,bim, ... blockSize,numObservations); |
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.