trainFastRCNNObjectDetector

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

Описание

Обучите детектор

пример

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

Эта функция требует, чтобы у вас были Deep Learning Toolbox™. Рекомендуется также иметь Parallel Computing Toolbox™ для использования с CUDA®-активный NVIDIA® ГРАФИЧЕСКИЙ ПРОЦЕССОР. Для получения информации о поддерживаемых вычислительных возможностях смотрите Поддержку GPU by Release (Parallel Computing Toolbox).

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

Возобновите обучение детектора

trainedDetector = trainFastRCNNObjectDetector(trainingData,checkpoint,options) возобновляет обучение с контрольной точки детектора.

Точная настройка детектора

trainedDetector = trainFastRCNNObjectDetector(trainingData,detector,options) продолжает обучать детектор с дополнительными обучающими данными или выполняет больше обучающих итераций, чтобы улучшить точность детектора.

Предложение настраиваемой области

trainedDetector = trainFastRCNNObjectDetector(___,'RegionProposalFcn',proposalFcn) опционально обучает пользовательскую функцию предложения по областям, proposalFcn, с использованием любого из предыдущих входов. Если вы не задаете функцию предложения, то функция использует изменение алгоритма Edge Boxes [2].

Дополнительные свойства

trainedDetector = trainFastRCNNObjectDetector(___,Name,Value) использует дополнительные опции, заданные одним или несколькими Name,Value аргументы в виде пар.

Примеры

свернуть все

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

data = load('rcnnStopSigns.mat', 'stopSigns', 'fastRCNNLayers');
stopSigns = data.stopSigns;
fastRCNNLayers = data.fastRCNNLayers;

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

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

Случайным образом перетасуйте данные для обучения.

rng(0);
shuffledIdx = randperm(height(stopSigns));
stopSigns = stopSigns(shuffledIdx,:);

Создайте imageDatastore с помощью файлов из таблицы.

imds = imageDatastore(stopSigns.imageFilename);

Создайте boxLabelDatastore с помощью столбцов меток из таблицы.

blds = boxLabelDatastore(stopSigns(:,2:end));

Объедините хранилища данных.

ds = combine(imds, blds);

Обучающие изображения знака стопа имеют разные размеры. Предварительно обработайте данные, чтобы изменить размер изображения и блоков на предопределенный размер.

ds = transform(ds,@(data)preprocessData(data,[920 968 3]));

Установите опции обучения.

options = trainingOptions('sgdm', ...
    'MiniBatchSize', 10, ...
    'InitialLearnRate', 1e-3, ...
    'MaxEpochs', 10, ...
    'CheckpointPath', tempdir);

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

frcnn = trainFastRCNNObjectDetector(ds, fastRCNNLayers , options, ...
    'NegativeOverlapRange', [0 0.1], ...
    'PositiveOverlapRange', [0.7 1]);
*******************************************************************
Training a Fast R-CNN Object Detector for the following object classes:

* stopSign

--> Extracting region proposals from training datastore...done.

Training on single GPU.
|=======================================================================================================|
|  Epoch  |  Iteration  |  Time Elapsed  |  Mini-batch  |  Mini-batch  |  Mini-batch  |  Base Learning  |
|         |             |   (hh:mm:ss)   |     Loss     |   Accuracy   |     RMSE     |      Rate       |
|=======================================================================================================|
|       1 |           1 |       00:00:29 |       0.3787 |       93.59% |         0.96 |          0.0010 |
|      10 |          10 |       00:05:14 |       0.3032 |       98.52% |         0.95 |          0.0010 |
|=======================================================================================================|

Detector training complete.
*******************************************************************

Протестируйте детектор Fast R-CNN на тестовом изображении.

img = imread('stopSignTest.jpg');

Запустите детектор.

[bbox, score, label] = detect(frcnn, img);

Отобразите результаты обнаружения.

detectedImg = insertObjectAnnotation(img,'rectangle',bbox,score);
figure
imshow(detectedImg)

Вспомогательные функции

function data = preprocessData(data,targetSize)
% Resize image and bounding boxes to the targetSize.
scale = targetSize(1:2)./size(data{1},[1 2]);
data{1} = imresize(data{1},targetSize(1:2));
bboxes = round(data{2});
data{2} = bboxresize(bboxes,scale);
end

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

свернуть все

Помеченная основная истина, заданная как datastore или таблица.

Каждый ограничивающий прямоугольник должен быть в формате [<reservedrangesplaceholder3> <reservedrangesplaceholder2> <reservedrangesplaceholder1> <reservedrangesplaceholder0> ].

  • Если вы используете datastore, ваши данные должны быть настроены так, чтобы вызывать datastore с read и readall функции возвращают массив ячеек или таблицу с двумя или тремя столбцами. Когда выход содержит два столбца, первый столбец должен содержать ограничительные рамки, а второй столбец должен содержать метки {boxes, labels}. Если выход содержит три столбца, второй столбец должен содержать ограничительные рамки, а третий столбец должен содержать метки. В этом случае первый столбец может содержать данные любого типа. Например, первый столбец может содержать изображения или данные облака точек.

    databoxeslabels
    Первый столбец может содержать данные, такие как данные облака точек или изображения.Второй столбец должен быть массивом ячеек, который содержит M на 5 матриц ограничивающих рамок формы [x center, y center, width, height, yaw]. Векторы представляют расположение и размер ограничивающих рамок для объектов на каждом изображении.Третий столбец должен быть массивом ячеек, который содержит M категориальных векторов -by-1, содержащих имена классов объектов. Все категориальные данные, возвращенные datastore, должны содержать одни и те же категории.

    Для получения дополнительной информации смотрите Datastores for Глубокое Обучение (Deep Learning Toolbox).

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

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

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

  • Массив 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'.

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

    Имя сетиИмя слоя редукции данныхROI Booling Layer OutputSize (Выходной размер слоя объединения ROI)Описание
    alexnet (Deep Learning Toolbox)'relu5'[6 6]Последний максимальный слой объединения заменяется информацией только для чтения максимальный слой объединения
    vgg16 (Deep Learning Toolbox)'relu5_3'[7 7]
    vgg19 (Deep Learning Toolbox)'relu5_4'
    squeezenet (Deep Learning Toolbox)'fire5-concat'[14 14]
    resnet18 (Deep Learning Toolbox)'res4b_relu'Слой объединения ROI вставляется после слоя редукции данных.
    resnet50 (Deep Learning Toolbox)'activation_40_relu'
    resnet101 (Deep Learning Toolbox)'res4b22_relu'
    googlenet (Deep Learning Toolbox)'inception_4d-output'
    mobilenetv2 (Deep Learning Toolbox)'block_13_expand_relu'
    inceptionv3 (Deep Learning Toolbox)'mixed7'[17 17]
    inceptionresnetv2 (Deep Learning Toolbox)'block17_20_ac'

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

    Совет

    Если ваша сеть является DAGNetwork, используйте layerGraph (Deep Learning Toolbox) функция для преобразования сети в LayerGraph объект. Затем создайте пользовательскую сеть Fast R-CNN, как описано в примере Create Fast R-CNN Object Detection Network.

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

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

Примечание

trainFastRCNNObjectDetector не поддерживает следующие опции обучения:

  • trainingOptions 'once' и 'every-epoch' Shuffle опции не поддерживаются для комбинированных входов datastore.

  • trainingOptions 'parallel' и 'multi-gpu' ExecutionEnvironment опции не поддерживаются при использовании комбинированного входа datastore.

  • Входы Datastore не поддерживаются при установке DispatchInBackground опция обучения для true.

Сохраненная контрольная точка детектора, заданная как fastRCNNObjectDetector объект. Чтобы сохранить детектор после каждой эпохи, установите 'CheckpointPath' свойство при использовании trainingOptions функция. Сохранение контрольной точки после каждой эпохи рекомендуется, потому что сетевое обучение может занять несколько часов.

Чтобы загрузить контрольную точку для ранее обученного детектора, загрузите MAT-файл из пути контрольной точки. Для примера, если 'CheckpointPath' свойство options является '/tmp', загрузите MAT-файл контрольной точки, используя:

data = load('/tmp/faster_rcnn_checkpoint__105__2016_11_18__14_25_08.mat');

Имя MAT-файла включает номер итерации и временную метку момента сохранения контрольной точки детектора. Детектор сохранен в detector переменная файла. Передайте этот файл обратно в trainFastRCNNObjectDetector функция:

frcnn = trainFastRCNNObjectDetector(stopSigns,...
                           data.detector,options);

Ранее обученный детектор объектов Fast R-CNN, указанный как fastRCNNObjectDetector объект.

Метод предложения области, заданный как указатель на функцию. Если вы не задаете функцию предложения по области, функция реализует вариант алгоритма EdgeBoxes [2]. Функция должна иметь форму:

[bboxes,scores] = proposalFcn(I)

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

Зависимости

Если вы не задаете пользовательскую функцию предложения и используете таблицу для входных обучающих данных, функция использует изменение алгоритма Edge Boxes. Если вы используете datastore для входа обучающих данных для многоканальных изображений, необходимо задать функцию предложения пользовательской области.

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

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

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

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

Коэффициент перекрытия, используемый для обоих PositiveOverlapRange и NegativeOverlapRange определяется как:

area(AB)area(AB)


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

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

Коэффициент перекрытия, используемый для обоих PositiveOverlapRange и NegativeOverlapRange определяется как:

area(AB)area(AB)


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

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

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

Длина наименьшей размерности изображения, ширина или высота, заданная как разделенная разделенными запятой парами, состоящая из 'SmallestImageDimension' и положительное целое число. Обучающие изображения изменяются таким образом, чтобы длина самой короткой размерности равнялась заданному целому числу. По умолчанию размер обучающих изображений не изменяется. Изменение размера обучающих изображений помогает уменьшить вычислительные затраты и память, используемые при большом обучении изображений. Типичные значения варьируются от 400 до 600 пикселей.

Зависимости

  • The SmallestImageDimension свойство поддерживает только входные обучающие данные таблицы. Чтобы изменить размер входных данных входа datastore, используйте transform функция.

Нормализация замороженных пакетов во время обучения, заданная как разделенная запятой пара, состоящая из 'FreezeBatchNormalizationtrue или false. Значение указывает, заморожены ли входные слои сети во время обучения. Установите это значение равным true если вы обучаетесь с небольшим размером мини-пакета. Небольшие размеры партии приводят к плохим оценкам среднего значения партии и отклонений, которые необходимы для эффективной нормализации партии ..

Если вы не задаете значение для 'FreezeBatchNormalization', функция устанавливает свойство на

  • true если 'MiniBatchSize'имя-значение аргумента для trainingOptions (Deep Learning Toolbox) функция меньше 8.

  • false если 'MiniBatchSize'имя-значение аргумента для trainingOptions (Deep Learning Toolbox) функция больше или равна 8.

Вы должны задать значение для 'FreezeBatchNormalization', чтобы переопределить это поведение по умолчанию.

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

свернуть все

Обученный детектор объектов Fast R-CNN, возвращенный как fastRCNNObjectDetector объект.

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

  • TrainingLoss - Потеря обучения при каждой итерации является средней квадратичной невязкой (MSE), рассчитанной как сумма ошибки локализации, доверительной потери и потерь классификации. Для получения дополнительной информации о функции потерь обучения см. Раздел «Потеря обучения».

  • TrainingAccuracy - Точность обучающего набора при каждой итерации.

  • TrainingRMSE - Обучающая средняя квадратичная невязка (RMSE) является RMSE, вычисленным из потерь обучения при каждой итерации.

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

  • ValidationLoss - Потеря валидации при каждой итерации.

  • ValidationAccuracy - Точность валидации при каждой итерации.

  • ValidationRMSE - Валидация RMSE при каждой итерации.

  • FinalValidationLoss - Окончательная потеря валидации в конце обучения.

  • FinalValidationRMSE - Окончательная валидация RMSE в конце обучения.

Каждое поле является числовым вектором с одним элементом на итерацию обучения. Значения, которые не были вычислены при определенной итерации, назначаются как NaN. Этот struct содержит ValidationLoss, ValidationAccuracy, ValidationRMSE, FinalValidationLoss, и FinalValidationRMSE поля только при options задает данные валидации.

Совет

  • Чтобы ускорить предварительную обработку данных для обучения, trainFastRCNNObjectDetector автоматически создает и использует параллельный пул на основе параметров параллельных выборов. Для получения дополнительной информации о настройке этих настроек см. параметры параллельных выборов. Для использования настроек параллельных вычислений требуется Parallel Computing Toolbox.

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

    • Уменьшите размер изображений при помощи 'SmallestImageDimension'аргумент.

    • Уменьшите значение 'NumRegionsToSample'имя-значение значение аргумента.

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

  • Эта таблица описывает, как преобразовать каждую именованную сеть в сеть Fast R-CNN. Имя слоя редукции данных определяет, какой слой обрабатывается слоем объединения ROI. Выходной размер информации только для чтения задает размер карт функций, выводимых слоем объединения информации только для чтения.

    Имя сетиИмя слоя редукции данныхИнформация только для чтения - выходной параметр слоя объединенияОписание
    alexnet (Deep Learning Toolbox)'relu5'[6 6]Последний максимальный слой объединения заменяется информацией только для чтения максимальный слой объединения
    vgg16 (Deep Learning Toolbox)'relu5_3'[7 7]
    vgg19 (Deep Learning Toolbox)'relu5_4'
    squeezenet (Deep Learning Toolbox)'fire5-concat'[14 14]
    resnet18 (Deep Learning Toolbox)'res4b_relu'Слой объединения ROI вставляется после слоя редукции данных.
    resnet50 (Deep Learning Toolbox)'activation_40_relu'
    resnet101 (Deep Learning Toolbox)'res4b22_relu'
    googlenet (Deep Learning Toolbox)'inception_4d-output'
    mobilenetv2 (Deep Learning Toolbox)'block_13_expand_relu'
    inceptionv3 (Deep Learning Toolbox)'mixed7'[17 17]
    inceptionresnetv2 (Deep Learning Toolbox)'block17_20_ac'

    Чтобы модифицировать и преобразовать сеть в сеть Fast R-CNN, смотрите Проект R-CNN, Fast R-CNN и Модель Faster R-CNN.

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

Ссылки

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

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

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

Введенный в R2017a