exponenta event banner

trainFastRCNNObjectDetector

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

Описание

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

пример

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

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

Создайте боксLabelDatastore, используя столбцы меток из таблицы.

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

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

свернуть все

Помеченная истинность основания, заданная как хранилище данных или таблица.

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

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

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

    Дополнительные сведения см. в разделе Хранилища данных для глубокого обучения (панель инструментов глубокого обучения).

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

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

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

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

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

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

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

    Сетевое имяИмя слоя извлечения элементовРазмер выходного сигнала уровня пула ROIОписание
    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 Функция (Deep Learning Toolbox) для преобразования сети в LayerGraph объект. Затем создайте пользовательскую сеть Fast R-CNN, как описано в примере Создание сети обнаружения объектов Fast R-CNN.

Дополнительные сведения о создании сети Fast R-CNN см. в разделе Начало работы с R-CNN, Fast R-CNN и Fast R-CNN.

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

Примечание

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

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

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

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

Зависимости

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

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

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

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

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

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

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


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

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

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

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


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

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

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

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

Зависимости

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

Нормализация замороженной партии во время обучения, указанная как разделенная запятыми пара, состоящая из 'FreezeBatchNormalization«и» true или 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. Структура содержит ValidationLoss, ValidationAccuracy, ValidationRMSE, FinalValidationLoss, и FinalValidationRMSE поля только тогда, когда options указывает данные проверки.

Совет

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

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

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

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

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

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

    Сетевое имяИмя слоя извлечения элементовРазмер выходного сигнала уровня пула ROIОписание
    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, Fast R-CNN и более быстрой модели R-CNN.

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

Ссылки

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

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

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

См. также

Приложения

Функции

Объекты

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