detect

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

Описание

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

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

Примеры

свернуть все

Загрузите обучающие данные и слои сети.

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 функция с обучающими данными в качестве входных данных.

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

  • H: Высота

  • W: Ширина

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

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

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

Необходимая область поиска, определенная как [<reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> <reservedrangesplaceholder0>] вектор. Вектор задает верхний левый угол и размер области в пикселях.

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

Задайте необязательные разделенные разделенными запятой парами 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'Используйте графический процессор. Для использования GPU необходимо иметь Parallel Computing Toolbox и графический процессор NVIDIA с поддержкой CUDA. Если подходящий графический процессор недоступен, функция возвращает ошибку. Для получения информации о поддерживаемых вычислительных возможностях смотрите Поддержку GPU by Release (Parallel Computing Toolbox).
'cpu'Используйте центральный процессор.

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

свернуть все

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

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

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

См. также

Приложения

Функции

Объекты

Введенный в R2016b