trainFastRCNNObjectDetector

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

Описание

пример

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

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

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

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

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

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

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

Пользовательское предложение по области

trainedDetector = trainFastRCNNObjectDetector(___,'RegionProposalFcn',proposalFcn) опционально обучает пользовательскую функцию предложения по области, proposalFcn, использование любых из предыдущих входных параметров. Если вы не задаете функцию предложения, то функция использует изменение Полей Ребра [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);

Обучите Быстрый детектор 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 функции возвращают массив ячеек или таблицу с двумя или тремя столбцами. Когда выход содержит два столбца, первый столбец должен содержать ограничительные рамки, и второй столбец должен содержать метки, {boxes, labels}. Когда выход содержит три столбца, второй столбец должен содержать ограничительные рамки, и третий столбец должен содержать метки. В этом случае первый столбец может содержать любой тип данных. Например, первый столбец может содержать данные об облаке точек или изображения.

    databoxeslabels
    Первый столбец может содержать данные, такие как данные об облаке точек или изображения.Второй столбец должен быть массивом ячеек, который содержит M-by-5 матрицы ограничительных рамок формы [центр x, центр y, width, height, yaw]. Векторы представляют местоположение и размер ограничительных рамок для объектов в каждом изображении.Третий столбец должен быть массивом ячеек, который содержит M-by-1 категориальные векторы, содержащие имена класса объекта. Все категориальные данные, возвращенные 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 объект должен быть допустимой сетью обнаружения объектов Fast R-CNN. Можно также использовать LayerGraph объект обучить пользовательскую сеть Fast R-CNN.

    Совет

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

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

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

Примечание

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

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

  • OutputFcn опция.

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

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

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

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

Для просмотра документации необходимо авторизоваться на сайте