обнаружить

Обнаружьте объекты с помощью детектора объекта Faster R-CNN, сконфигурированного для монокулярной камеры

Синтаксис

bboxes = detect(detector,I)
[bboxes,scores] = detect(detector,I)
[___,labels] = detect(detector,I)
[___] = detect(___,roi)
[___] = detect(___,Name,Value)

Описание

bboxes = detect(detector,I) обнаруживает объекты в изображении I с помощью Более быстрого R-CNN (области со сверточными нейронными сетями) объектный детектор, сконфигурированный для монокулярной камеры. Местоположения обнаруженных объектов возвращены как набор ограничительных рамок.

При использовании этой функции, использования графического процессора CUDA®-enabled NVIDIA® с вычислить возможностью 3,0 или выше настоятельно рекомендован. Графический процессор значительно уменьшает время вычисления. Использование графического процессора требует Parallel Computing Toolbox™.

[bboxes,scores] = detect(detector,I) также возвращает музыку уверенности обнаружения к каждой ограничительной рамке.

пример

[___,labels] = detect(detector,I) также возвращает категориальный массив меток, присвоенных ограничительным рамкам, с помощью любого из предыдущих синтаксисов. Метки, используемые для классов объектов, заданы во время обучения с помощью функции trainFasterRCNNObjectDetector.

[___] = detect(___,roi) обнаруживает объекты в прямоугольной поисковой области, заданной roi.

[___] = detect(___,Name,Value) задает опции с помощью одного или нескольких аргументов пары Name,Value. Например, detect(detector,I,'NumStongestRegions',1000) ограничивает количество самых сильных предложений по области к 1 000.

Примеры

свернуть все

Сконфигурируйте детектор объекта Faster R-CNN для использования с монокулярной камерой, смонтированной на автомобиле, оборудованном датчиком. Используйте этот детектор, чтобы обнаружить автомобили в изображении, полученном камерой.

Загрузите объект fasterRCNNObjectDetector, предварительно обученный обнаружить автомобили.

detector = vehicleDetectorFasterRCNN;

Смоделируйте монокулярный датчик камеры путем создания объекта monoCamera. Этот объект содержит камеру intrinsics и местоположение камеры на автомобиле, оборудованном датчиком.

focalLength = [309.4362 344.2161];    % [fx fy]
principalPoint = [318.9034 257.5352]; % [cx cy]
imageSize = [480 640];                % [mrows ncols]
height = 2.1798;                      % height of camera above ground, in meters
pitch = 14;                           % pitch of camera, in degrees
intrinsics = cameraIntrinsics(focalLength,principalPoint,imageSize);

monCam = monoCamera(intrinsics,height,'Pitch',pitch);

Сконфигурируйте детектор для использования с камерой. Ограничьте ширину обнаруженных объектов к типичной области значений для ширин автомобиля: 1.5-2.5 метра. Сконфигурированный детектор является объектом fasterRCNNObjectDetectorMonoCamera.

vehicleWidth = [1.5 2.5];
detectorMonoCam = configureDetectorMonoCamera(detector,monCam,vehicleWidth);

Читайте в изображении, полученном камерой.

I = imread('carsinfront.png');
imshow(I)

Обнаружьте автомобили в изображении при помощи детектора. Аннотируйте изображение ограничительными рамками для обнаружений и очков уверенности обнаружения.

[bboxes,scores] = detect(detectorMonoCam,I);
I = insertObjectAnnotation(I,'rectangle',bboxes,scores,'Color','g');
imshow(I)

Входные параметры

свернуть все

Более быстрый детектор объекта R-CNN сконфигурирован для монокулярной камеры, заданной как объект fasterRCNNObjectDetectorMonoCamera. Чтобы создать этот объект, используйте функцию configureDetectorMonoCamera с объектом monoCamera и обученным объектом fasterRCNNObjectDetector как входные параметры.

Введите изображение, заданное как действительное, неразреженное, изображение RGB или полутоновый.

Детектор чувствителен к области значений входного изображения. Поэтому гарантируйте, что входной диапазон образов подобен области значений изображений, используемых, чтобы обучить детектор. Например, если детектор был обучен на изображениях uint8, повторно масштабируйте это входное изображение к области значений [0, 255] при помощи функции rescale или im2uint8. Размер этого входного изображения должен быть сопоставим с размерами изображений, используемых в обучении. Если эти размеры очень отличаются, детектор испытывает затруднения при обнаружении объектов, потому что шкала объектов во входном изображении отличается от шкалы объектов, которые детектор был обучен идентифицировать. Рассмотрите, использовали ли вы свойство SmallestImageDimension во время обучения изменить размер учебных изображений.

Типы данных: uint8 | uint16 | int16 | double | single | logical

Поисковая видимая область, заданная как [x y width height] вектор. Вектор задает левый верхний угол и размер области в пикселях.

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'NumStongestRegions',1000

Максимальное количество самых сильных предложений по области, заданных как пара, разделенная запятой, состоящая из 'NumStrongestRegions' и положительного целого числа. Уменьшайте это значение, чтобы ускорить время вычислений за счет точности обнаружения. Чтобы использовать все предложения по области, задайте это значение как Inf.

Выберите самую сильную ограничительную рамку для каждого обнаруженного объекта, заданного как пара, разделенная запятой, состоящая из 'SelectStrongest' и или true или false.

  • tRUE Возвратите самую сильную ограничительную рамку на объект. Чтобы выбрать эти поля, detect вызывает функцию selectStrongestBboxMulticlass, которая использует немаксимальное подавление, чтобы устранить перекрывающиеся ограничительные рамки на основе их очков уверенности.

    Например:

     selectStrongestBboxMulticlass(bbox,scores, ...
                'RatioType','Min', ...
                'OverlapThreshold',0.5);

  • ложь Возвратите все обнаруженные ограничительные рамки. Можно затем создать собственную операцию, чтобы устранить перекрывающиеся ограничительные рамки.

Минимальный размер области, который содержит обнаруженный объект, заданный как пара, разделенная запятой, состоящая из 'MinSize' и [height width] вектор. Модули находятся в пикселях.

По умолчанию MinSize является самым маленьким объектом, который может обнаружить обученный detector.

Максимальный размер области, который содержит обнаруженный объект, заданный как пара, разделенная запятой, состоящая из 'MaxSize' и [height width] вектор. Модули находятся в пикселях.

Чтобы уменьшать время вычисления, установите это значение к известному максимальному размеру области для объектов, обнаруживаемых в изображении. По умолчанию 'MaxSize' установлен в высоту и ширину входного изображения, I.

Аппаратный ресурс, на котором можно запустить детектор, заданный как пара, разделенная запятой, состоящая из 'ExecutionEnvironment' и 'auto', 'gpu' или 'cpu'.

  • 'auto' Используйте графический процессор, если это доступно. В противном случае используйте центральный процессор.

  • 'gpu' — Используйте графический процессор. Чтобы использовать графический процессор, у вас должен быть Parallel Computing Toolbox, и CUDA включил NVIDIA графический процессор с вычислить возможностью 3,0 или выше. Если подходящий графический процессор не доступен, функция возвращает ошибку.

  • 'cpu' — Используйте центральный процессор.

Выходные аргументы

свернуть все

Местоположение объектов обнаружило во входном изображении, возвращенном как M-by-4 матрица, где M является количеством ограничительных рамок. Каждая строка bboxes содержит четырехэлементный вектор формы [x y width height]. Этот вектор задает левый верхний угол и размер той соответствующей ограничительной рамки в пикселях.

Очки уверенности обнаружения, возвращенные как M-by-1 вектор, где M является количеством ограничительных рамок. Более высокий счет указывает на более высокую уверенность в обнаружении.

Метки для ограничительных рамок, возвращенных как M-by-1 категориальный массив меток M. Вы задаете имена классов, используемые, чтобы маркировать объекты, когда вы обучаете вход detector.

Введенный в R2017a