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