exponenta event banner

trainRCNNObjectDetector

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

Описание

пример

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

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

Эта функция требует наличия Toolbox™ глубокого обучения и Toolbox™ статистики и машинного обучения. Рекомендуется также иметь Toolbox™ параллельных вычислений для использования с графическим процессором NVIDIA ® с поддержкой CUDA ®. Сведения о поддерживаемых вычислительных возможностях см. в разделе Поддержка графического процессора по выпуску (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 для уменьшения использования памяти графического процессора. Чтобы уменьшить скорость изменения параметров сети, уменьшите значение 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 с использованием дополнительных данных. Чтобы проиллюстрировать эту процедуру, половина данных истинности земли будет использована для начальной тренировки детектора. Затем обучение возобновляется с использованием всех данных.

Загрузка данных обучения и инициализация вариантов обучения.

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()];

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

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

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

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

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

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

Установите параметр «CheckstartPath» с помощью 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 матрицы, представляющие один класс объектов, такие как транспортное средство, цветок или знак остановки. Столбцы содержат 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 (инструментарий глубокого обучения), Layer (инструментарий глубокого обучения), и layerGraph Объекты (Deep Learning Toolbox) доступны в Deep Learning Toolbox.

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

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

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

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

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

    • 'alexnet (Инструментарий глубокого обучения) '

    • 'vgg16 (Инструментарий глубокого обучения) '

    • 'vgg19 (Инструментарий глубокого обучения) '

    • resnet18 (инструментарий для глубокого обучения)

    • 'resnet50 (Инструментарий глубокого обучения) '

    • 'resnet101 (Инструментарий глубокого обучения) '

    • 'inceptionv3 (Инструментарий глубокого обучения) '

    • 'googlenet (Инструментарий глубокого обучения) '

    • 'inceptionresnetv2 (Инструментарий глубокого обучения) '

    • 'mobilenetv2 (Инструментарий глубокого обучения) '

    • 'squeezenet (Инструментарий глубокого обучения) '

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

Дополнительные сведения о создании сети R-CNN см. в разделе Начало работы с R-CNN, Fast R-CNN и Fast 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 определяется как:

область (A∩B) область (A∪B)


A и B - ограничивающие рамки.

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

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

Дескриптор функции предложения пользовательской области, указанный как разделенная запятыми пара, состоящая из 'RegionProposalFcnи имя функции. Если функция предложения пользовательской области не указана, вариант по умолчанию алгоритма Edge Boxes [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, возвращенный как rcnnObjectDetector объект. Можно обучить детектор R-CNN обнаруживать несколько классов объектов.

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

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

  • TrainingAccuracy - Точность набора обучения на каждой итерации

  • BaseLearnRate - Коэффициент обучения на каждой итерации

Ограничения

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

Совет

  • Для ускорения предварительной обработки данных для обучения, trainRCNNObjectDetector автоматически создает и использует параллельный пул на основе настроек параллельной настройки. Для этого требуется панель инструментов параллельных вычислений.

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

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

  • Используйте trainingOptions Функция (Deep Learning Toolbox) для включения или отключения подробной печати.

Ссылки

[1] Гиршик, Р., Дж. Донахью, Т. Даррелл и Дж. Малик. «Богатые иерархии функций для точного обнаружения объектов и семантической сегментации». Материалы конференции IEEE по компьютерному зрению и распознаванию образов. 2014, стр 580–587.

[2] Гиршик, Р. «Быстрый R-CNN». Материалы Международной конференции IEEE по компьютерному зрению. 2015, стр 1440–1448.

[3] Цитник, К. Лоуренс и П. Доллар. «Поля ребер: поиск предложений объектов из ребер». Computer Vision-ECCV, Springer International Publishing. 2014, стр 391–405.

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

См. также

Приложения

Функции

Объекты

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