trainRCNNObjectDetector

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

Синтаксис

detector = trainRCNNObjectDetector(trainingData,network,options)
detector = trainRCNNObjectDetector(___,Name,Value)
detector = trainRCNNObjectDetector(___,'RegionProposalFcn',proposalFcn)
[detector,info] = trainRCNNObjectDetector(___)

Описание

пример

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

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

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

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, чтобы уменьшать использование памяти графического процессора. Понизьте 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). Остальные столбцы должны содержать ограничительные рамки, связанные с соответствующим изображением. Каждый столбец представляет класс отдельного объекта, такой как автомобиль, собака, цветок или знак Стоп.

Каждая ограничительная рамка должна быть в формате [x, y, width, height]. Формат задает местоположение верхнего левого угла и размер объекта в соответствующем изображении. Имя табличной переменной задает имя класса объекта. Чтобы создать наземную таблицу истинности, используйте приложение Image Labeler. Поля, меньшие, чем 32 32, не используются для обучения.

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

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

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

    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 и Более быстрые Основы R-CNN, чтобы узнать больше, как создать сеть R-CNN.

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

Примечание

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

  • Значение Plots: 'training-progress'

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (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 являются большими моделями. Обучение с большими изображениями может произвести "Из Памяти" ошибки. Чтобы смягчить эти ошибки, вручную измените размер изображений наряду с наземными данными об истине ограничительной рамки прежде, чем вызвать trainRCNNObjectDetector.

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

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

Ссылки

[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