Выберите самые сильные многоклассовые ограничительные рамки из перекрывающихся кластеров
возвращает выбранные ограничительные рамки, которые имеют высокие оценки достоверности. Функция использует жадное немаксимальное подавление (NMS), чтобы исключить перекрывающиеся ограничительные рамки из selectedBboxes
= selectStrongestBboxMulticlass(bboxes
,scores
,labels
)bboxes
введите, только если они имеют одну и ту же метку класса.
[
дополнительно возвращает счета, метки и индекс, сопоставленные с выбранными ограничивающими рамками.selectedBboxes
,selectedScores
,selectedLabels
,index
]
= selectStrongestBboxMulticlass(bboxes
,scores
,labels
)
[___]
= selectStrongestBboxMulticlass(___,
использует дополнительные опции, заданные одним или несколькими Name,Value
)Name,Value
аргументы в виде пар.
Создайте детекторы с помощью двух разных моделей. Они будут использоваться для генерации многоклассовых результатов обнаружения.
detectorInria = peopleDetectorACF('inria-100x41'); detectorCaltech = peopleDetectorACF('caltech-50x21');
Применить детекторы.
I = imread('visionteam1.jpg'); [bboxesInria,scoresInria] = detect(detectorInria,I,'SelectStrongest',false); [bboxesCaltech,scoresCaltech] = detect(detectorCaltech,I,'SelectStrongest',false);
Создайте категориальные метки для каждого результата каждого детектора.
labelsInria = repelem("inria",numel(scoresInria),1); labelsInria = categorical(labelsInria,{'inria','caltech'}); labelsCaltech = repelem("caltech",numel(scoresCaltech),1); labelsCaltech = categorical(labelsCaltech,{'inria','caltech'});
Объедините результаты от всех детекторов в для результатов многоклассового обнаружения.
allBBoxes = [bboxesInria;bboxesCaltech]; allScores = [scoresInria;scoresCaltech]; allLabels = [labelsInria;labelsCaltech];
Запуск многоклассового немыслимого подавления.
[bboxes,scores,labels] = selectStrongestBboxMulticlass(allBBoxes,allScores,allLabels,... 'RatioType','Min','OverlapThreshold',0.65);
Аннотировать обнаруженных людей.
annotations = string(labels) + ": " + string(scores); I = insertObjectAnnotation(I,'rectangle',bboxes,cellstr(annotations)); imshow(I) title('Detected People, Scores, and Labels')
bboxes
- Ограничительные рамкиОграничительные прямоугольники, заданные как M -by-4 или M -by-5, не анализируют числовую матрицу. M - количество ограничивающих рамок. Каждая строка матрицы определяет ограничивающий прямоугольник как выровненный по оси прямоугольник или повернутый прямоугольник. В этой таблице описывается формат для каждого ограничивающего прямоугольника.
Ограничительный прямоугольник | Описание |
---|---|
Выровненный по оси прямоугольник |
Определенный в пикселе координирует как <reservedrangesplaceholder4>-by-4 числовая матрица со строками формы [<reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> <reservedrangesplaceholder0>], где:
|
Повернутый прямоугольник |
Определенный в пространственных координатах как <reservedrangesplaceholder5>-by-5 числовая матрица со строками формы [<<reservedrangesplaceholder4> <reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> <reserved angesplaceholder0>] , где:
|
Типы данных: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
scores
- Оценки достоверностиОценки достоверности, соответствующие входным ограничивающим рамкам, заданные как вектор M -by-1. The selectStrongestBboxMulticlass
функция использует жадную NMS, чтобы исключить перекрывающиеся ограничительные рамки и связать оценку достоверности с рамками. Более высокий счет представляет более высокое доверие в сохранении ограничивающего прямоугольника. The scores
вход должен быть вещественным, конечным и неразборчивым.
Типы данных: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
labels
- МеткиМетки, соответствующие входным ограничивающим рамкам, заданные как M-на-1 категориальный или числовой вектор.
Типы данных: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| categorical
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'RatioType'
, 'Union'
устанавливает 'RatioType'
свойство к 'Union'
.'RatioType'
- Знаменатель коэффициента перекрытия ограничивающего прямоугольника'Union'
(по умолчанию) | 'Min'
Тип коэффициента, заданный как вектор символов 'Union'
или 'Min'
.
Установите тип коэффициента равным 'Union'
вычислить отношение как площадь пересечения между bboxA
и bboxB
, разделенная на области объединения двух.
Установите тип коэффициента равным 'Min'
вычислить отношение как площадь пересечения между bboxA
и bboxB
, разделенная на минимальную площадь двух ограничивающих рамок.
Типы данных: char
'OverlapThreshold'
- Порог коэффициента перекрытия0.5
(по умолчанию) | скаляром в области значений [0 1]Порог коэффициента перекрытия, заданный как разделенная разделенными запятой парами, состоящая из 'OverlapThreshold
'и скаляром в области значений [0 1]. Когда коэффициент перекрытия выше порога, функция удаляет ограничительные рамки вокруг ссылки поля. Уменьшите порог, чтобы уменьшить количество выбранных ограничивающих рамок. Однако, если вы слишком сильно уменьшаете порог, можно исключить рамки, которые представляют объекты, близкие друг к другу в изображении.
Типы данных: single
| double
'NumStrongest'
- Максимальное количество самых сильных ящиковinf
(по умолчанию) | положительная скалярная величинаМаксимальное количество самых сильных коробок, заданное как разделенная разделенными запятой парами, состоящая из 'NumStrongest'
и inf
или положительная скалярная величина. Используйте этот аргумент для сокращения времени вычислений, когда вы априори знаете о максимальном количестве коробок. Установите значение равным inf
чтобы выбрать все самые сильные, неперекрывающиеся, ограничивающие рамки.
Когда labels
вход содержит категориальные метки, можно также задать вектор, который содержит максимальное количество самых сильных полей для каждой категории во входных данных меток. Длина заданного вектора должна равняться количеству категорий в метке.
selectedBboxes
- Выбранные ограничительные рамкиВыбранные ограничительные рамки, возвращенные как M -by-4 или M -by-5 матрица. Векторы с 4 элементами представляют выровненные по оси прямоугольники, а векторы с 5 элементами представляют повернутые прямоугольники.
The selectedBbox
выход возвращает выбранные ограничительные рамки из bbox
входы, которые имеют самую высокую оценку достоверности. Функция использует немаксимальное подавление, чтобы исключить перекрывающиеся ограничивающие рамки.
Типы данных: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
selectedScores
- Счета выбранных ограничивающих рамокСчета выбранных ограничивающих рамок, возвращенные как M-на-1 вектор. M-й счет в selectedScores
выход соответствует M-му ограничивающему прямоугольнику в selectedBboxes
выход. Тип данных selectedScores
соответствует типу данных scores
.
selectedLabels
- Метки выбранных ограничивающих рамокМетки выбранных ограничивающих рамок, возвращенные как M-на-1 категориальный или числовой вектор. M-я метка в selectedLabels
выход соответствует M-му ограничивающему прямоугольнику в selectedBboxes
выход. Тип данных selectedLabels
соответствует типу данных labels
.
index
- Индекс выбранных ограничивающих рамокИндекс выбранных ограничивающих рамок, возвращенный как вектор M -by-1. The index
вектор содержит индексы к выбранным полям в bboxes
вход.
Типы данных: double
Указания и ограничения по применению:
Генерация кода не поддерживается для входных входов прямоугольного ограничивающего прямоугольника.
Указания и ограничения по применению:
Генерация кода GPU не поддерживается для поворотных прямоугольных ограничивающих прямоугольников.
Указания и ограничения по применению:
Массивы графических процессоров не поддерживаются для поворотных прямоугольных ограничивающих прямоугольников.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.