trainRCNNObjectDetector

Обучите детектор объектов глубокого обучения R-CNN

Описание

пример

detector = trainRCNNObjectDetector(trainingData,network,options) обучает R-CNN (области со сверточными нейронными сетями) на основе детектора объектов. Функция использует глубокое обучение, чтобы обучить детектор обнаруживать несколько классов объектов.

Эта реализация R-CNN не обучает классификатор SVM для каждого класса объекта.

Эта функция требует, чтобы у вас были Deep Learning Toolbox™ и Statistics and Machine Learning Toolbox™. Рекомендуется, чтобы у вас также был Parallel Computing Toolbox™, чтобы использовать с помощью графического процессора CUDA®-enabled NVIDIA®. Для получения информации о поддерживаемом вычислите возможности, смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox).

detector = trainRCNNObjectDetector(___,Name,Value) возвращает detector объект с дополнительными входными свойствами, заданными одним или несколькими Name,Value парные аргументы.

detector = trainRCNNObjectDetector(___,'RegionProposalFcn',proposalFcn) опционально обучает детектор R-CNN с помощью пользовательской функции предложения по области.

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

Примеры

свернуть все

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

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 с помощью дополнительных данных. Чтобы проиллюстрировать эту процедуру, половина достоверных данных будет использоваться, чтобы первоначально обучить детектор. Затем обучение возобновляется с помощью всех данных.

Загрузите обучающие данные и инициализируйте опции обучения.

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

stopSigns.imageFilename = fullfile(toolboxdir('vision'),'visiondata', ...
    stopSigns.imageFilename);

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

Обучите детектор R-CNN с фрагментом основной истины.

rcnn = trainRCNNObjectDetector(stopSigns(1:10,:), layers, options, 'NegativeOverlapRange', [0 0.3]);

Получите обучившие сеть слои от детектора. Когда вы передаете в массиве слоев сети к trainRCNNObjectDetector, они использованы как есть, чтобы продолжить обучение.

network = rcnn.Network;
layers = network.Layers;

Возобновите обучение с помощью всех обучающих данных.

rcnnFinal = trainRCNNObjectDetector(stopSigns, layers, options);

Создайте детектор объектов R-CNN для двух классов объектов: собаки и кошки.

objectClasses = {'dogs','cats'};

Сеть должна смочь классифицировать обе собаки, кошки и "фоновый" класс для того, чтобы быть обученной с помощью trainRCNNObjectDetector. В этом примере, единица добавляется чтобы включать фон.

numClassesPlusBackground = numel(objectClasses) + 1;

Итоговый полносвязный слой сети задает количество классов, которые может классифицировать сеть. Установите итоговый полносвязный слой иметь выходной размер, равный количеству классов плюс фоновый класс.

layers = [ ...
    imageInputLayer([28 28 1])
    convolution2dLayer(5,20)        
    fullyConnectedLayer(numClassesPlusBackground);
    softmaxLayer()
    classificationLayer()];

Эти слоя сети могут теперь использоваться, чтобы обучить детектор 2D объекта класса R-CNN.

Создайте детектор объектов R-CNN и настройте его, чтобы использовать сохраненную сетевую контрольную точку. Сетевая контрольная точка сохранена каждая эпоха во время сетевого обучения когда trainingOptions Параметр 'CheckpointPath' устанавливается. Сетевые контрольные точки полезны в случае, если ваш сеанс обучения неожиданно завершает работу.

Загрузите обучающие данные знака Стоп.

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

Добавьте полный путь в файлы изображений.

stopSigns.imageFilename = fullfile(toolboxdir('vision'),'visiondata', ...
      stopSigns.imageFilename);

Установите 'CheckpointPath' с помощью trainingOptions функция.

checkpointLocation = tempdir;
options = trainingOptions('sgdm','Verbose',false, ...
    'CheckpointPath',checkpointLocation);

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

rcnn = trainRCNNObjectDetector(stopSigns(1:3,:),layers,options);

Загрузите сохраненную сетевую контрольную точку.

wildcardFilePath = fullfile(checkpointLocation,'convnet_checkpoint__*.mat');
contents = dir(wildcardFilePath);

Загрузите одну из сетей контрольной точки.

filepath = fullfile(contents(1).folder,contents(1).name);
checkpoint = load(filepath);

checkpoint.net
ans = 

  SeriesNetwork with properties:

    Layers: [15×1 nnet.cnn.layer.Layer]

Создайте новый детектор объектов R-CNN и настройте его, чтобы использовать сохраненную сеть.

rcnnCheckPoint = rcnnObjectDetector();
rcnnCheckPoint.RegionProposalFcn = @rcnnObjectDetector.proposeRegions;

Установите Сеть на сохраненную сетевую контрольную точку.

rcnnCheckPoint.Network = checkpoint.net
rcnnCheckPoint = 

  rcnnObjectDetector with properties:

              Network: [1×1 SeriesNetwork]
           ClassNames: {'stopSign'  'Background'}
    RegionProposalFcn: @rcnnObjectDetector.proposeRegions

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

свернуть все

Помеченная основная истина отображает в виде таблицы с двумя или больше столбцами.

Если вы используете таблицу, таблица должна иметь два или больше столбца. Первый столбец таблицы должен содержать имена файла образа с путями. Изображения должны быть полутоновым или истинным цветом (RGB), и они могут быть в любом формате, поддержанном imread. Каждый из остальных столбцов должен быть вектором ячейки, который содержит M-by-4 матрицы, которые представляют класс отдельного объекта, такой как vehicle, flower или stop sign. Столбцы содержат двойные массивы с 4 элементами ограничительных рамок M в формате [x, y, width, height]. Формат задает местоположение верхнего левого угла и размер ограничительной рамки в соответствующем изображении. Чтобы составить таблицу основной истины, можно использовать приложение Image Labeler или приложение Video Labeler. Чтобы составить таблицу обучающих данных от сгенерированной основной истины, используйте objectDetectorTrainingData функция.

Имя табличной переменной задает имя класса объекта. Чтобы составить таблицу основной истины, используйте приложение Image Labeler. Поля, меньшие, чем 32 32, не используются для обучения.

Сеть в виде SeriesNetwork (Deep Learning Toolbox), массив Layer (Deep Learning Toolbox) объекты, layerGraph Объект (Deep Learning Toolbox), или сетевым именем. Сеть обучена, чтобы классифицировать классы объектов, заданные на trainingData таблица. SeriesNetwork (Deep Learning Toolbox), Layer (Deep Learning Toolbox) и layerGraph (Deep Learning Toolbox) объекты доступен в Deep Learning Toolbox.

  • Когда вы задаете сеть как SeriesNetwork, массив Layer объекты, или сетевым именем, сеть автоматически преобразовывается в сеть R-CNN путем добавления новой классификации и слоев регрессии, чтобы поддержать обнаружение объектов.

  • Массив Layer Объекты (Deep Learning Toolbox) должны содержать слой классификации, который поддерживает количество классов объектов плюс фоновый класс. Используйте этот входной тип, чтобы настроить скорости обучения каждого слоя. Пример массива Layer (Deep Learning Toolbox) объекты:

    layers = [imageInputLayer([28 28 3])
            convolution2dLayer([5 5],10)
            reluLayer()
            fullyConnectedLayer(10)
            softmaxLayer()
            classificationLayer()];
    

  • Когда вы задаете сеть как SeriesNetwork, Layer массив, или сеть по наименованию, веса для свертки и полносвязных слоев инициализируются к 'narrow-normal'.

  • Сетевое имя должно быть одним из следующих допустимых имен сетей. Необходимо также установить соответствующее Дополнение.

  • LayerGraph объект должен быть допустимой сетью обнаружения объектов R-CNN. Можно также использовать LayerGraph объект обучить пользовательскую сеть R-CNN.

Смотрите Начало работы с R-CNN, Быстрым R-CNN и Faster R-CNN, чтобы узнать больше, как создать сеть R-CNN.

Опции обучения, возвращенные trainingOptions (Deep Learning Toolbox) функция от Deep Learning Toolbox. Чтобы задать решатель и другие опции для сетевого обучения, использовать trainingOptions.

Примечание

trainRCNNObjectDetector не поддерживает эти опции обучения:

  • ValidationData, ValidationFrequency, или ValidationPatience опции

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

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

Пример: 'PositiveOverlapRange',[0.5 1].

Положительные коэффициенты обучающей выборки для диапазона перекрытия ограничивающего прямоугольника в виде разделенной запятой пары, состоящей из 'PositiveOverlapRange'и двухэлементный вектор. Вектор содержит значения в области значений [0,1]. Предложения по области, которые перекрываются с ограничительными рамками основной истины в заданной области, используются в качестве положительных обучающих выборок.

Отношение перекрытия, используемое для обоих PositiveOverlapRange и NegativeOverlapRange задан как:

area(AB)area(AB)


A и B являются ограничительными рамками.

Отрицательные отношения обучающей выборки для диапазона перекрытия ограничивающего прямоугольника в виде разделенной запятой пары, состоящей из 'NegativeOverlapRange'и двухэлементный вектор. Вектор содержит значения в области значений [0,1]. Предложения по области, которые перекрываются с ограничительными рамками основной истины в заданной области, используются в качестве отрицательных обучающих выборок.

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

Пользовательский дескриптор функции предложения региона в виде разделенной запятой пары, состоящей из 'RegionProposalFcn'и имя функции. Если вы не указываете, что пользовательская функция предложения по области, вариант по умолчанию алгоритма Полей Ребра [3], установила в rcnnObjectDetector, используется. Пользовательский proposalFcn должен иметь следующую функциональную форму:

 [bboxes,scores] = proposalFcn(I)

Вход, I, изображение, заданное в groundTruth таблица. Функция должна возвратить прямоугольные ограничительные рамки в M-by-4 массив. Каждая строка bboxes содержит четырехэлементный вектор, [x, y, width, height], который задает верхний левый угол и размер ограничительной рамки в пикселях. Функция должна также возвратить счет к каждой ограничительной рамке в M-by-1 вектор. Более высокие баллы указывают, что ограничительная рамка, более вероятно, будет содержать объект. Баллы используются, чтобы выбрать самые сильные области, которые можно задать в NumStrongestRegions.

Слой регрессии поля называет в виде разделенной запятой пары, состоящей из 'BoxRegressionLayer'и вектор символов. Допустимыми значениями является 'auto' или имя слоя во входной сети. Выходные активации этого слоя используются в качестве функций, чтобы обучить модель регрессии совершенствованию обнаруженных ограничительных рамок.

Если именем является 'auto', затем trainRCNNObjectDetector автоматически выбирает слой из входной сети на основе типа входной сети:

  • Если вход network SeriesNetwork или массив Layer объекты, затем функция выбирает последний слой свертки.

  • Если вход network LayerGraph, затем функция выбирает источник последнего полносвязного слоя.

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

свернуть все

Обученный R-CNN-based, возвращенный как rcnnObjectDetector объект. Можно обучить детектор R-CNN обнаруживать несколько классов объектов.

Учебная информация, возвращенная как структура со следующими полями. Каждое поле является числовым вектором с одним элементом на учебную итерацию. Значения, которые не были вычислены в определенной итерации, представлены NaN.

  • TrainingLoss — Учебная потеря в каждой итерации. Это - комбинация классификации, и потеря регрессии раньше обучала сеть R-CNN.

  • TrainingAccuracy — Точность набора обучающих данных в каждой итерации

  • BaseLearnRate — Скорость обучения в каждой итерации

Ограничения

  • Эта реализация R-CNN не обучает классификатор SVM для каждого класса объекта.

Советы

  • Ускорять предварительную обработку данных для обучения, trainRCNNObjectDetector автоматически создает и использует параллельный пул на основе ваших параметров параллельных предпочтений. Это требует Parallel Computing Toolbox.

  • VGG-16, VGG-19, ResNet-101 и Inception-ResNet-v2 являются большими моделями. Обучение с большими изображениями может произвести ошибки "Out of Memory". Чтобы уменьшить эти ошибки, вручную измените размер изображений наряду с достоверными данными ограничительной рамки прежде, чем вызвать trainRCNNObjectDetector.

  • Эта функция поддерживает передачу обучения. Когда сеть вводится по наименованию, такие как 'resnet50', затем программное обеспечение автоматически преобразовывает сеть в допустимую сетевую модель R-CNN на основе предварительно обученного resnet50 Модель (Deep Learning Toolbox). В качестве альтернативы вручную задайте пользовательскую сеть R-CNN с помощью LayerGraph (Deep Learning Toolbox) извлечен из предварительно обученной сети DAG. Смотрите Создают Сеть Обнаружения объектов R-CNN.

  • Используйте trainingOptions (Deep Learning Toolbox) функция, чтобы включить или отключить многословную печать.

Ссылки

[1] Girshick, R., Дж. Донахью, Т. Даррелл и Дж. Малик. “Богатые Иерархии Функции для Точного Обнаружения объектов и Семантической Сегментации”. Продолжения Конференции по IEEE по Компьютерному зрению и Распознаванию образов. 2014, стр 580–587.

[2] Girshick, R. “Быстрый R-CNN”. Продолжения Международной конференции IEEE по вопросам Компьютерного зрения. 2015, стр 1440–1448.

[3] Zitnick, К. Лоуренс и П. Доллэр. “Поля ребра: Определение местоположения Объектных Предложений от Ребер”. Компьютерное-зрение-ECCV, Springer International Publishing. 2014, стр 391–405.

Расширенные возможности

Введенный в R2017b