обнаружить

Обнаружьте объекты с помощью детектора глубокого обучения 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® включило NVIDIA® графический процессор с вычислить возможностью 3,0 или выше настоятельно рекомендовано. Графический процессор значительно уменьшает время вычисления. Использование графического процессора требует Parallel Computing Toolbox™.

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

пример

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

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

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

Примеры

свернуть все

Загрузите данные тренировки и сетевые слои.

load('rcnnStopSigns.mat', 'stopSigns', 'layers')

Добавьте каталог образов в путь MATLAB.

imDir = fullfile(matlabroot, 'toolbox', 'vision', 'visiondata',...
  'stopSignImages');
addpath(imDir);

Установите сетевые опции обучения использовать мини-пакетный размер 32, чтобы уменьшать использование памяти графического процессора. Понизьте InitialLearningRate, чтобы уменьшать уровень, на котором изменяются сетевые параметры. Это выгодно при подстройке предварительно обученной сети и препятствует тому, чтобы сеть изменилась слишком быстро.

options = trainingOptions('sgdm', ...
  'MiniBatchSize', 32, ...
  'InitialLearnRate', 1e-6, ...
  'MaxEpochs', 10);

Обучите детектор R-CNN. Обучение может занять несколько минут, чтобы завершиться.

rcnn = trainRCNNObjectDetector(stopSigns, layers, options, 'NegativeOverlapRange', [0 0.3]);
*******************************************************************
Training an R-CNN Object Detector for the following object classes:

* stopSign

Step 1 of 3: Extracting region proposals from 27 training images...done.

Step 2 of 3: Training a neural network to classify objects in training data...

|=========================================================================================|
|     Epoch    |   Iteration  | Time Elapsed |  Mini-batch  |  Mini-batch  | Base Learning|
|              |              |  (seconds)   |     Loss     |   Accuracy   |     Rate     |
|=========================================================================================|
|            3 |           50 |         9.27 |       0.2895 |       96.88% |     0.000001 |
|            5 |          100 |        14.77 |       0.2443 |       93.75% |     0.000001 |
|            8 |          150 |        20.29 |       0.0013 |      100.00% |     0.000001 |
|           10 |          200 |        25.94 |       0.1524 |       96.88% |     0.000001 |
|=========================================================================================|

Network training complete.

Step 3 of 3: Training bounding box regression models for each object class...100.00%...done.

R-CNN training complete.
*******************************************************************

Протестируйте детектор R-CNN на тестовом изображении.

img = imread('stopSignTest.jpg');

[bbox, score, label] = detect(rcnn, img, 'MiniBatchSize', 32);

Отобразите самый сильный результат обнаружения.

[score, idx] = max(score);

bbox = bbox(idx, :);
annotation = sprintf('%s: (Confidence = %f)', label(idx), score);

detectedImg = insertObjectAnnotation(img, 'rectangle', bbox, annotation);

figure
imshow(detectedImg)

Удалите каталог образов из пути.

rmpath(imDir);

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

свернуть все

Детектор объекта R-CNN, заданный как объект rcnnObjectDetector. Чтобы создать этот объект, вызовите функцию trainRCNNObjectDetector с данными тренировки, как введено.

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

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

Типы данных: 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);

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

Размер меньших пакетов для обработки данных R-CNN, заданной как пара, разделенная запятой, состоящая из 'MiniBatchSize' и целого числа. Большие пакетные размеры приводят к более быстрой обработке, но поднимают больше памяти.

Аппаратный ресурс, на котором можно запустить детектор, заданный как пара, разделенная запятой, состоящая из '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-by-1 категориальный массив меток M. Вы задаете имена классов, используемые, чтобы маркировать объекты, когда вы обучаете вход detector.

Смотрите также

Приложения

Функции

Объекты

Введенный в R2017b