Обнаружение объектов с помощью детектора объектов ACF
[___] = detect(___,
задает опции с использованием одного или нескольких Name,Value
)Name,Value
аргументы в виде пар. Для примера, detect(detector,I,'WindowStride',2)
устанавливает шаг скользящего окна, используемого для обнаружения объектов, равным 2.
Используйте trainACFObjectDetector
с обучающими изображениями для создания детектора объектов ACF, который может обнаруживать знаки остановки. Протестируйте детектор с отдельным изображением.
Загрузите обучающие данные.
load('stopSignsAndCars.mat')
Выберите основную истину для знаков упора. Эта основная истина является набором известных местоположений стоповых знаков на изображениях.
stopSigns = stopSignsAndCars(:,1:2);
Добавьте полный путь к файлам изображений.
stopSigns.imageFilename = fullfile(toolboxdir('vision'),... 'visiondata',stopSigns.imageFilename);
Обучите детектор ACF. Можно выключить вывод процесса обучения путем определения 'Verbose',false
как Name,Value
пара.
acfDetector = trainACFObjectDetector(stopSigns,'NegativeSamplesFactor',2);
ACF Object Detector Training The training will take 4 stages. The model size is 34x31. Sample positive examples(~100% Completed) Compute approximation coefficients...Completed. Compute aggregated channel features...Completed. -------------------------------------------- Stage 1: Sample negative examples(~100% Completed) Compute aggregated channel features...Completed. Train classifier with 42 positive examples and 84 negative examples...Completed. The trained classifier has 19 weak learners. -------------------------------------------- Stage 2: Sample negative examples(~100% Completed) Found 84 new negative examples for training. Compute aggregated channel features...Completed. Train classifier with 42 positive examples and 84 negative examples...Completed. The trained classifier has 20 weak learners. -------------------------------------------- Stage 3: Sample negative examples(~100% Completed) Found 84 new negative examples for training. Compute aggregated channel features...Completed. Train classifier with 42 positive examples and 84 negative examples...Completed. The trained classifier has 54 weak learners. -------------------------------------------- Stage 4: Sample negative examples(~100% Completed) Found 84 new negative examples for training. Compute aggregated channel features...Completed. Train classifier with 42 positive examples and 84 negative examples...Completed. The trained classifier has 61 weak learners. -------------------------------------------- ACF object detector training is completed. Elapsed time is 18.9314 seconds.
Протестируйте детектор ACF на тестовом изображении.
img = imread('stopSignTest.jpg');
[bboxes,scores] = detect(acfDetector,img);
Отобразите результаты обнаружения и вставьте ограничительные рамки для объектов в изображение.
for i = 1:length(scores) annotation = sprintf('Confidence = %.1f',scores(i)); img = insertObjectAnnotation(img,'rectangle',bboxes(i,:),annotation); end figure imshow(img)
detector
- детектор объектов ACFacfObjectDetector
объектДетектор объектов ACF, заданный как acfObjectDetector
объект. Чтобы создать этот объект, вызовите trainACFObjectDetector
функция с обучающими данными в качестве входных данных.
I
- Входное изображениеВходное изображение, заданное как реальное, непараметрическое, полутоновое или RGB изображение.
Типы данных: uint8
| uint16
| int16
| double
| single
| logical
roi
- Область поиска интересовНеобходимая область поиска, определенная как [<reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> <reservedrangesplaceholder0>] вектор. Вектор задает верхний левый угол и размер области в пикселях.
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
'NumScaleLevels',4
'NumScaleLevels'
- Количество уровней шкалы на октаву8
(по умолчанию) | положительное целое числоКоличество уровней шкалы на октаву, заданное как разделенная разделенными запятой парами, состоящая из 'NumScaleLevels'
и положительное целое число. Каждая октава является степенью двойки понижений изображения. Чтобы обнаружить людей с более мелкими шагами шкалы, увеличьте это количество. Рекомендуемые значения находятся в области значений [4, 8].
'WindowStride'
- Stride для раздвижного окна4
(по умолчанию) | положительное целое числоШаг для скользящего окна, заданный как разделенная разделенными запятой парами, состоящая из 'WindowStride'
и положительное целое число. Это значение указывает расстояние для функции, чтобы переместить окно в x и y направлениях. Скользящее окно сканирует изображения для обнаружения объектов.
'SelectStrongest'
- Выберите самый сильный ограничивающий прямоугольник для каждого объектаtrue
(по умолчанию) | false
Выберите самый сильный ограничивающий прямоугольник для каждого обнаруженного объекта, заданный как разделенная разделенными запятой парами, состоящая из 'SelectStrongest'
и любой из них true
или false
.
true
- Возвращает самый сильный ограничивающий прямоугольник по объекту. Чтобы выбрать эти рамки, detect
вызывает selectStrongestBbox
функция, которая использует немаксимальное подавление, чтобы исключить перекрывающиеся ограничивающие прямоугольники на основе их оценок достоверности.
false
- Возвращает все обнаруженные ограничительные рамки. Затем можно создать собственную пользовательскую операцию для устранения перекрывающихся ограничивающих рамок.
'MinSize'
- Минимальный размер областиМинимальный размер области, которая содержит обнаруженный объект, заданный как разделенная разделенными запятой парами, состоящая из 'MinSize'
и вектор [height width]. Модули указаны в пикселях.
По умолчанию MinSize
является наименьшим объектом, который обучает detector
может обнаружить.
'MaxSize'
- Максимальный размер областиsize
(I
) (по умолчанию) | вектор [height width]Максимальный размер области, которая содержит обнаруженный объект, заданный как разделенная разделенными запятой парами, состоящая из 'MaxSize'
и вектор [height width]. Модули указаны в пикселях.
Чтобы уменьшить время расчета, установите это значение на известный максимальный размер области для объектов, обнаруживаемых в изображении. По умолчанию 'MaxSize'
задается высота и ширина входного изображения, I
.
'Threshold'
- Порог классификационной точности–1
(по умолчанию) | числовой скалярПорог классификационной точности, заданный как разделенная разделенными запятой парами, состоящая из 'Threshold'
и числовой скаляр. Рекомендуемые значения находятся в области значений [-1, 1]. Во время многомасштабного обнаружения объектов пороговое значение управляет точностью и скоростью для классификации субрегионов изображения как объектов или необъектов. Чтобы ускорить эффективность при риске пропуска истинных обнаружений, увеличьте этот порог.
bboxes
- Расположение объектов, обнаруженных в изображенииРасположение объектов, обнаруженных в входном изображении, возвращается как матрица M-на-4, где M количество ограничивающих рамок. Каждая строка bboxes
содержит четырехэлементный вектор вида [x
y width height]. Этот
вектор задает верхний
левый угол и размер соответствующего ограничивающего прямоугольника в пикселях.
scores
- Обнаружение оценок достоверностиДостоверные оценки обнаружения, возвращенные как M-на-1 вектор, где M - количество ограничивающих рамок. Более высокий счет указывает на более высокое доверие в обнаружении.
Указания и ограничения по применению:
Чтобы сгенерировать код, используйте toStruct
функция для прохождения acfObjectDetector
объект для detect
функция. Для получения дополнительной информации смотрите Сгенерировать код для обнаружения объектов в изображениях при помощи детектора объектов ACF.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.