trainYOLOv2ObjectDetector

Обучите детектор объекта YOLO v2

Синтаксис

detector = trainYOLOv2ObjectDetector(trainingData,lgraph,options)
detector = trainYOLOv2ObjectDetector(trainingData,checkpoint,options)
detector = trainYOLOv2ObjectDetector(trainingData,detector,options)
detector = trainYOLOv2ObjectDetector(___,'MultiScaleTrainingSizes',trainingSizes)
[detector,info] = trainYOLOv2ObjectDetector(___)

Описание

пример

detector = trainYOLOv2ObjectDetector(trainingData,lgraph,options) возвращается объектный детектор обучил использование, вы смотрите только однажды версия 2 (YOLO v2) архитектура сети, заданная входом lgraph. Вход options задает учебные параметры для сети обнаружения.

пример

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

Можно использовать этот синтаксис для:

  • Добавьте больше данных тренировки и продолжите обучение.

  • Улучшите учебную точность путем увеличения максимального числа итераций.

detector = trainYOLOv2ObjectDetector(trainingData,detector,options) продолжает обучение детектор объекта YOLO v2. Используйте этот синтаксис для подстройки детектора.

detector = trainYOLOv2ObjectDetector(___,'MultiScaleTrainingSizes',trainingSizes) задает размеры изображения для многошкального обучения при помощи пары "имя-значение" в дополнение к входным параметрам в любом из предыдущих синтаксисов.

пример

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

Примеры

свернуть все

Загрузите данные тренировки для обнаружения автомобиля в рабочую область.

data = load('vehicleTrainingData.mat');
trainingData = data.vehicleTrainingData;

Задайте директорию, в которой хранятся учебные выборки. Добавьте полный путь в имена файлов в данных тренировки.

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

Загрузите файл данных, содержащий сеть YOLO v2 в рабочую область. Настройте сеть как объект LayerGraph.

net = load('yolov2VehicleDetector.mat');
lgraph = net.lgraph
lgraph = 
  LayerGraph with properties:

         Layers: [25×1 nnet.cnn.layer.Layer]
    Connections: [24×2 table]

Осмотрите слои в сети YOLO v2 и их свойствах. Можно также создать сеть YOLO v2 путем выполнения поданных шагов, Создают Сеть обнаружения объектов YOLO v2.

lgraph.Layers
ans = 
  25x1 Layer array with layers:

     1   'input'               Image Input               128x128x3 images
     2   'conv_1'              Convolution               16 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
     3   'BN1'                 Batch Normalization       Batch normalization
     4   'relu_1'              ReLU                      ReLU
     5   'maxpool1'            Max Pooling               2x2 max pooling with stride [2  2] and padding [0  0  0  0]
     6   'conv_2'              Convolution               32 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
     7   'BN2'                 Batch Normalization       Batch normalization
     8   'relu_2'              ReLU                      ReLU
     9   'maxpool2'            Max Pooling               2x2 max pooling with stride [2  2] and padding [0  0  0  0]
    10   'conv_3'              Convolution               64 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
    11   'BN3'                 Batch Normalization       Batch normalization
    12   'relu_3'              ReLU                      ReLU
    13   'maxpool3'            Max Pooling               2x2 max pooling with stride [2  2] and padding [0  0  0  0]
    14   'conv_4'              Convolution               128 3x3 convolutions with stride [1  1] and padding [1  1  1  1]
    15   'BN4'                 Batch Normalization       Batch normalization
    16   'relu_4'              ReLU                      ReLU
    17   'yolov2Conv1'         Convolution               128 3x3 convolutions with stride [1  1] and padding 'same'
    18   'yolov2Batch1'        Batch Normalization       Batch normalization
    19   'yolov2Relu1'         ReLU                      ReLU
    20   'yolov2Conv2'         Convolution               128 3x3 convolutions with stride [1  1] and padding 'same'
    21   'yolov2Batch2'        Batch Normalization       Batch normalization
    22   'yolov2Relu2'         ReLU                      ReLU
    23   'yolov2ClassConv'     Convolution               24 1x1 convolutions with stride [1  1] and padding [0  0  0  0]
    24   'yolov2Transform'     YOLO v2 Transform Layer   YOLO v2 Transform Layer with 4 anchors
    25   'yolov2OutputLayer'   YOLO v2 Output            YOLO v2 Output with 4 anchors

Сконфигурируйте сетевые опции обучения.

  • Установите решатель использовать стохастический спуск градиента с импульсом (sgdm) оптимизатор для обучения.

  • Установите начальный темп обучения использовать для обучения.

  • Установите многословный индикатор отображать учебную информацию о прогрессе в командном окне.

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

  • Определите максимальный номер эпохи для обучения.

  • Задайте сеть, чтобы переставить данные тренировки перед каждой эпохой.

  • Задайте частоту многословной печати.

  • Задайте путь для сохранения сетей контрольной точки. Можно использовать эту опцию, чтобы возобновить обучение от любых сохраненных сетей контрольной точки.

options = trainingOptions('sgdm',...
          'InitialLearnRate',0.001,...
          'Verbose',true,...
          'MiniBatchSize',16,...
          'MaxEpochs',30,...
          'Shuffle','every-epoch',...
          'VerboseFrequency',30,...
          'CheckpointPath',tempdir);

Обучите сеть YOLO v2.

[detector,info] = trainYOLOv2ObjectDetector(trainingData,lgraph,options);
Training on single CPU.
|========================================================================================|
|  Epoch  |  Iteration  |  Time Elapsed  |  Mini-batch  |  Mini-batch  |  Base Learning  |
|         |             |   (hh:mm:ss)   |     RMSE     |     Loss     |      Rate       |
|========================================================================================|
|       1 |           1 |       00:00:00 |         7.64 |         58.3 |          0.0010 |
|       2 |          30 |       00:00:22 |         1.57 |          2.5 |          0.0010 |
|       4 |          60 |       00:00:45 |         1.40 |          1.9 |          0.0010 |
|       5 |          90 |       00:01:08 |         1.24 |          1.5 |          0.0010 |
|       7 |         120 |       00:01:30 |         0.94 |          0.9 |          0.0010 |
|       9 |         150 |       00:01:52 |         1.19 |          1.4 |          0.0010 |
|      10 |         180 |       00:02:14 |         0.93 |          0.9 |          0.0010 |
|      12 |         210 |       00:02:38 |         0.73 |          0.5 |          0.0010 |
|      14 |         240 |       00:03:01 |         0.73 |          0.5 |          0.0010 |
|      15 |         270 |       00:03:23 |         0.77 |          0.6 |          0.0010 |
|      17 |         300 |       00:03:46 |         0.62 |          0.4 |          0.0010 |
|      19 |         330 |       00:04:09 |         0.62 |          0.4 |          0.0010 |
|      20 |         360 |       00:04:32 |         0.61 |          0.4 |          0.0010 |
|      22 |         390 |       00:04:55 |         0.63 |          0.4 |          0.0010 |
|      24 |         420 |       00:05:18 |         0.60 |          0.4 |          0.0010 |
|      25 |         450 |       00:05:42 |         0.79 |          0.6 |          0.0010 |
|      27 |         480 |       00:06:05 |         0.56 |          0.3 |          0.0010 |
|      29 |         510 |       00:06:29 |         0.51 |          0.3 |          0.0010 |
|      30 |         540 |       00:06:51 |         0.50 |          0.2 |          0.0010 |
|========================================================================================|

Осмотрите свойства детектора.

detector
detector = 
  yolov2ObjectDetector with properties:

            ModelName: 'vehicle'
              Network: [1×1 DAGNetwork]
           ClassNames: {'vehicle'}
          AnchorBoxes: [4×2 double]
    TrainingImageSize: [128 128]

Можно проверить учебную точность путем осмотра учебной потери для каждой итерации.

figure
plot(info.TrainingLoss)
grid on
xlabel('Number of Iterations')
ylabel('Training Loss for Each Iteration')

Считайте тестовое изображение в рабочую область.

img = imread('detectcars.png');

Запустите обученный детектор объекта YOLO v2 на тестовом изображении для обнаружения автомобиля.

[bboxes,scores] = detect(detector,img);

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

if(~isempty(bboxes))
    img = insertObjectAnnotation(img,'rectangle',bboxes,scores);
end
figure
imshow(img)

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

свернуть все

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

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

График слоя, заданный как объект LayerGraph. График слоя содержит архитектуру сети YOLO v2. Можно создать эту сеть при помощи функции yolov2Layers. Также можно создать сетевые слои при помощи yolov2TransformLayer, yolov2ReorgLayer и функций yolov2OutputLayer. Для получения дополнительной информации при создании пользовательской сети YOLO v2, см. Проект Сеть обнаружения YOLO v2.

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

Примечание

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

  • Значение 'training-progress' опции обучения Plots

  • ValidationData, ValidationFrequency или опции обучения ValidationPatience

  • Опция OutputFcn.

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

Чтобы загрузить контрольную точку для ранее обученного детектора, загрузите MAT-файл от пути к контрольной точке. Например, если свойством CheckpointPath объекта, заданного options, является '/checkpath', можно загрузить MAT-файл контрольной точки при помощи этого кода.

data = load('/checkpath/yolov2_checkpoint__216__2018_11_16__13_34_30.mat');
checkpoint = data.detector;

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

yoloDetector = trainYOLOv2ObjectDetector(trainingData,checkpoint,options);

Ранее обученный YOLO v2 возражает детектору, заданному как объект yolov2ObjectDetector. Используйте этот синтаксис, чтобы продолжить обучение детектор с дополнительными данными тренировки или выполнить больше учебных итераций, чтобы улучшить точность детектора.

Набор размеров изображения для многошкального обучения, заданного как M-by-2 матрица, где каждая строка имеет форму [height width]. В течение каждой учебной эпохи входные изображения обучения случайным образом изменены к одному из размеров изображения M, заданных в этом наборе.

Если вы не задаете trainingSizes, функция устанавливает это значение к размеру во входном слое изображений сети YOLO v2. Сеть изменяет размер всех учебных изображений к этому значению.

Примечание

Значения входа trainingSizes, заданные для многошкального обучения, должны быть больше, чем или равными входному размеру во входном слое изображений входного параметра lgraph.

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

свернуть все

Обученный детектор объекта YOLO v2, возвращенный как объект yolov2ObjectDetector. Можно обучить детектор объекта YOLO v2 обнаруживать несколько классов объектов.

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

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

  • TrainingRMSE — Учебная среднеквадратическая ошибка (RMSE) является RMSE, вычисленным от учебной потери в каждой итерации.

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

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

Больше о

свернуть все

Учебная потеря

Во время обучения сеть обнаружения объектов YOLO v2 оптимизирует потерю MSE между предсказанными ограничительными рамками и наземной истиной. Функция потерь задана как

где:

  • S является количеством ячеек сетки.

  • B является количеством ограничительных рамок в каждой ячейке сетки.

  • 1, если ограничительная рамка jth в ячейке сетки i ответственна за обнаружение объекта. В противном случае это установлено в 0. i ячейки сетки ответственен за обнаружение объекта, если перекрытие между наземной истиной и ограничительной рамкой в той ячейке сетки больше, чем или равно 0,6.

  • 1, если ограничительная рамка jth в ячейке сетки i не содержит объекта. В противном случае это установлено в 0.

  • 1, если объект обнаруживается в ячейке сетки i. В противном случае это установлено в 0.

  • K1, K2, K3 и K4 являются весами. Чтобы настроить веса, измените свойство LossFactors выходного слоя при помощи функции yolov2OutputLayer.

Функция потерь может быть разделена в три части:

  • Потеря локализации

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

    • , центр ограничительной рамки jth относительно ячейки сетки i.

    • , центр наземной истины относительно ячейки сетки i.

    • ширина и высота ограничительной рамки jth в ячейке сетки i, соответственно. Размер предсказанной ограничительной рамки задан относительно входного размера изображения.

    • ширина и высота наземной истины в ячейке сетки i, соответственно.

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

  • Потеря уверенности

    Третьи и четвертые сроки в функции потерь включают потерю уверенности. Третий срок измеряет objectness (счет уверенности) ошибка, когда объект обнаруживается в ограничительной рамке jth ячейки сетки i. Четвертый срок измеряет ошибку объектности, когда никакой объект не обнаруживается в ограничительной рамке jth ячейки сетки i. Параметры для вычисления потери уверенности заданы можно следующим образом.

    • Ci является счетом уверенности ограничительной рамки jth в ячейке сетки i.

    • Ĉi является счетом уверенности наземной истины в ячейке сетки i.

    • K2 является весом для ошибки объектности, когда объект обнаруживается в предсказанной ограничительной рамке. Увеличьте это значение, чтобы увеличить весомость для ограничительной рамки и ячейки сетки, которые содержат объект.

    • K3 является весом для ошибки объектности, когда объект не обнаруживается в предсказанной ограничительной рамке. Уменьшите это значение, чтобы уменьшить весомость для ограничительной рамки и ячейки сетки, которая не содержит объекта. При уменьшении веса для ошибки объектности, предотвращает сеть от обучения обнаружить фон вместо объектов.

  • Потеря классификации

    Пятый срок в функции потерь включает потерю классификации. Например, предположите, что объект обнаруживается в предсказанной ограничительной рамке, содержавшейся в ячейке сетки i. Затем потеря классификации измеряет квадратичную невязку между условными вероятностями класса для каждого класса в ячейке сетки i. Параметры для вычисления потери классификации заданы можно следующим образом.

    • pi (c) является предполагаемой условной вероятностью класса для класса объекта c в ячейке сетки i.

    • фактическая условная вероятность класса для класса объекта c в ячейке сетки i.

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

Ссылки

[1] Джозеф. R, С. К. Диввэла, Р. Б. Джиршик и Ф. Али. "Вы Только Взгляд Однажды: Объединенное, Обнаружение объектов В реальном времени". В Продолжениях Конференции по IEEE по Компьютерному зрению и Распознаванию образов (CVPR), стр 779–788. Лас-Вегас, NV: CVPR, 2016.

[2] Джозеф. R и Ф. Али. "YOLO 9000: Лучше, Быстрее, Более сильный". В Продолжениях Конференции по IEEE по Компьютерному зрению и Распознаванию образов (CVPR), стр 6517–6525. Гонолулу, HI: CVPR, 2017.

Введенный в R2019a