trainFastRCNNObjectDetector

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

Описание

пример

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

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

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

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

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

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

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

Примеры

свернуть все

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

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

Обучите Быстрый детектор 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.
*******************************************************************

Протестируйте Быстрый детектор 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 или таблица.

Каждая ограничительная рамка должна быть в формате [x y width height].

  • Если вы используете datastore, вызывая datastore с read и readall функции должны возвратить массив ячеек или таблицу с тремя столбцами, {images, boxes, labels}.

    • изображения Первый столбец должен быть вектором ячейки изображений, которые могут быть шкалой полутонов, RGB или M-by-N-by-P многоканальное изображение.).

    • boxes — Второй столбец должен быть вектором ячейки, который содержит M-by-4 матрицы ограничительных рамок в формате [x, y, width, height]. Векторы представляют местоположение и размер ограничительных рамок для объектов в каждом изображении.

    • labels — Третий столбец должен быть вектором ячейки, который содержит M-by-1 категориальные векторы, содержащие имена класса объекта. Все категориальные данные, возвращенные datastore, должны содержать те же категории.

    Можно использовать combine функция, чтобы создать datastore, чтобы использовать в обучении.

    • imageDatastore — Создайте datastore, содержащий изображения.

    • boxLabelDatastore — Создайте datastore, содержащий ограничительные рамки и метки.

    • combineimds , blds) — Комбинируют изображения, ограничительные рамки и метки в один datastore.

    Для получения дополнительной информации смотрите Хранилища данных для Глубокого обучения (Deep Learning Toolbox).

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

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

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

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

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

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

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

    Сетевое имяИмя слоя извлечения признаковСлой объединения ROI OutputSizeОписание
    alexnet'relu5'[6 6]В последний раз макс. объединение слоя заменяется ROI, макс. объединяющим слой
    vgg16'relu5_3'[7 7]
    vgg19'relu5_4'
    squeezenet'fire5-concat'[14 14]
    resnet18'res4b_relu'Слой объединения ROI вставляется после слоя извлечения признаков.
    resnet50'activation_40_relu'
    resnet101'res4b22_relu'
    googlenet'inception_4d-output'
    mobilenetv2'block_13_expand_relu'
    inceptionv3'mixed7'[17 17]
    inceptionresnetv2'block17_20_ac'

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

    Совет

    Если вашей сетью является DAGNetwork, используйте layerGraph функционируйте, чтобы преобразовать сеть в LayerGraph объект. Затем создайте пользовательскую сеть Fast R-CNN, аналогичную описанному Создаванием Быстрого примера Сети Обнаружения объектов R-CNN.

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

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

Примечание

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

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

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

  • OutputFcn опция.

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

  • trainingOptions 'parallel' и 'multi-gpu' ExecutionEnvironment опции не поддержаны, когда вы используете объединенный вход datastore.

Сохраненная контрольная точка детектора, заданная как 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);

Ранее обученный Быстрый детектор объектов 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.

Зависимости

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

Зависимости

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

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

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

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

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

Необходимо задать значение для 'FreezeBatchNormalization'сверхъязю это поведение по умолчанию.

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

свернуть все

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

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

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

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

  • TrainingRMSE — Учебная среднеквадратичная ошибка (RMSE) для слоя регрессии поля

  • BaseLearnRate — Темп обучения в каждой итерации

Советы

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

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

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

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

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

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

    Сетевое имяИмя слоя извлечения признаковСлой объединения ROI OutputSizeОписание
    alexnet'relu5'[6 6]В последний раз макс. объединение слоя заменяется ROI, макс. объединяющим слой
    vgg16'relu5_3'[7 7]
    vgg19'relu5_4'
    squeezenet'fire5-concat'[14 14]
    resnet18'res4b_relu'Слой объединения ROI вставляется после слоя извлечения признаков.
    resnet50'activation_40_relu'
    resnet101'res4b22_relu'
    googlenet'inception_4d-output'
    mobilenetv2'block_13_expand_relu'
    inceptionv3'mixed7'[17 17]
    inceptionresnetv2'block17_20_ac'

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

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

Ссылки

[1] Girshick, Росс. "Быстрый R-CNN". Продолжения международной конференции IEEE по вопросам компьютерного зрения. 2015.

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

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

Введенный в R2017a