trainFastRCNNObjectDetector

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

Синтаксис

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

Описание

пример

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

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

  • Установите CheckpointPath сохранять контрольные точки детектора во временную директорию. Измените это на другое местоположение при необходимости.

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

Обучите Быстрый детектор R-CNN. Обучение может занять несколько минут, чтобы завершиться.

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

* stopSign

--> Extracting region proposals from 27 training images...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:00 |       0.0366 |       99.22% |         1.14 |          0.0010 |
|       3 |          50 |       00:00:10 |       0.0171 |      100.00% |         1.09 |          0.0010 |
|       5 |         100 |       00:00:21 |       0.0020 |      100.00% |         0.28 |          0.0010 |
|       8 |         150 |       00:00:32 |       0.0205 |      100.00% |         0.78 |          0.0010 |
|      10 |         200 |       00:00:42 |       0.0098 |      100.00% |         0.36 |          0.0010 |
|      10 |         210 |       00:00:44 |       0.0216 |      100.00% |         0.89 |          0.0010 |
|=======================================================================================================|

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

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

img = imread('stopSignTest.jpg');

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

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

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

detectedImg = insertShape(img, 'Rectangle', bbox);
figure
imshow(detectedImg)

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

свернуть все

Маркированные наземные изображения истины, заданные как таблица с двумя или больше столбцами. Первый столбец должен содержать пути и имена файлов к полутоновому или истинному цвету (RGB) изображения. Остальные столбцы должны содержать ограничительные рамки, связанные с соответствующим изображением. Каждый столбец представляет класс отдельного объекта, такой как автомобиль, собака, цветок или знак Стоп.

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

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

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

Примечание

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

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

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

  • Опция OutputFcn.

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

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

[bboxes,scores] = proposalFcn(I)

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

Если вы не задаете пользовательскую функцию предложения, функция использует изменение алгоритма Полей Ребра.

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

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

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

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

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

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

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

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

свернуть все

Обученный детектор объекта Fast 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 и Более быстрая Модель R-CNN.

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

Ссылки

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

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

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

Введенный в R2017a