Метки ограничивающих рамок баланса для обнаружения объектов
балансирует метки ограничивающих рамок, 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 - Данные маркированной ограничивающей рамкиДанные ограничивающей рамки, помеченные как таблица с двумя столбцами.
Первый столбец содержит ограничивающие рамки и должен быть вектором ячейки. Каждый элемент вектора ячейки содержит M-by-4 матрицы в формате [x, y, width, height] для M-полей.
Второй столбец должен быть вектором ячейки, который содержит имена меток, соответствующие каждой ограничивающей рамке. Каждый элемент в векторе ячейки должен быть M-by-1 категориальным или строковым вектором.

Чтобы создать таблицу меток полей на основе данных истинности земли,
Используйте приложение Image Labeler или Video Labeler, чтобы пометить свою достоверность. Экспортируйте помеченные данные истинности основания в рабочую область.
Создайте хранилище данных меток ограничивающих рамок с помощью команды objectDetectorTrainingData функция.
Вы можете получить boxLabels от LabelData свойство хранилища данных метки поля, возвращенное 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-by-1 вектор положительных целых чисел, где B - длина массива blockedImage объекты.
'OverlapThreshold' - Порог перекрытия1 (по умолчанию) | скаляр в диапазоне [0,1]Порог перекрытия, заданный как положительный скаляр в диапазоне [0,1]. Когда перекрытие между ограничивающей рамкой и окном обрезки превышает пороговое значение, поля в boxLabels входные данные подрезаны к границе окна блока изображения. Если перекрытие меньше порогового значения, поля отбрасываются. При снижении порога часть объекта может быть отброшена. Чтобы уменьшить количество объекта, которое может быть подрезано на границе, увеличьте порог. Увеличение порога также может привести к снижению сбалансированности этикеток коробок.
Величина перекрытия между ограничивающей рамкой и окном обрезки определяется как.
baseA)
'Verbose' - Отображение информации о ходе выполненияtrue или 1 (по умолчанию) | false или 0Отображение информации о ходе выполнения, указанной как числовая или логическая 1 (true) или 0 (false). Установить для этого свойства значение true для отображения информации.
locationSet - Сбалансированные этикетки коробокblockLocationSet объектСбалансированные метки полей, возвращенные как 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.