exponenta event banner

обнаружить

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

Описание

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

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

Примеры

свернуть все

Загрузка учебных данных и сетевых уровней.

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

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

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

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

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

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

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

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

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

свернуть все

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

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

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

Представлен в R2016b