detect

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

Описание

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

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

Введите изображение в виде H-by-W-by-C числовой массив изображений. Изображения должны быть действительными, неразреженными, полутоновыми или изображение RGB.

  • H: Высота

  • W: Width

  • C: размер канала в каждом изображении должен быть равен входному размеру канала сети. Например, для полутоновых изображений, C должен быть равен 1. Для цветных изображений RGB это должно быть равно 3.

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

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

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

Аргументы name-value

Задайте дополнительные разделенные запятой пары Name,Value аргументы. 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);

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

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

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

Ресурс Действие
'auto'Используйте графический процессор, если это доступно. В противном случае используйте центральный процессор.
'gpu'Используйте графический процессор. Чтобы использовать графический процессор, у вас должен быть Parallel Computing Toolbox, и CUDA включил NVIDIA графический процессор. Если подходящий графический процессор не доступен, функция возвращает ошибку. Для получения информации о поддерживаемом вычислите возможности, смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox).
'cpu'Используйте центральный процессор.

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

свернуть все

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

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

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

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

Приложения

Функции

Объекты

Введенный в R2017b