Обучите детектор объекта YOLO v2
detector = trainYOLOv2ObjectDetector(trainingData,lgraph,options)
detector = trainYOLOv2ObjectDetector(trainingData,checkpoint,options)
detector = trainYOLOv2ObjectDetector(trainingData,detector,options)
detector = trainYOLOv2ObjectDetector(___,'MultiScaleTrainingSizes',trainingSizes)
[detector,info] = trainYOLOv2ObjectDetector(___)
возвращается объектный детектор обучил использование, вы смотрите только однажды версия 2 (YOLO v2) архитектура сети, заданная входом detector
= trainYOLOv2ObjectDetector(trainingData
,lgraph
,options
)lgraph
. Вход options
задает учебные параметры для сети обнаружения.
обучение резюме от сохраненной контрольной точки детектора.detector
= trainYOLOv2ObjectDetector(trainingData
,checkpoint
,options
)
Можно использовать этот синтаксис для:
Добавьте больше данных тренировки и продолжите обучение.
Улучшите учебную точность путем увеличения максимального числа итераций.
продолжает обучение детектор объекта YOLO v2. Используйте этот синтаксис для подстройки детектора.detector
= trainYOLOv2ObjectDetector(trainingData
,detector
,options
)
задает размеры изображения для многошкального обучения при помощи пары "имя-значение" в дополнение к входным параметрам в любом из предыдущих синтаксисов.detector
= trainYOLOv2ObjectDetector(___,'MultiScaleTrainingSizes',trainingSizes
)
Загрузите данные тренировки для обнаружения автомобиля в рабочую область.
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)
trainingData
— Маркированные наземные изображения истиныМаркированные наземные изображения истины, заданные как таблица с два, или больше столбцов. Первый столбец должен содержать пути и имена файлов для полутонового или истинного цвета (RGB) изображения. Остальные столбцы должны содержать наземные данные об истине, связанные с различными классами объектов во входном изображении. Каждый столбец представляет класс отдельного объекта, такой как автомобиль, собака, цветок или знак Стоп. Например, эти данные показывают значение trainingData
, соответствующее серии изображений.
Наземная истина должна быть в формате [x y width height]. Формат задает местоположение левого верхнего угла и размер объекта в соответствующем изображении. Имя табличной переменной задает имя класса объекта. Чтобы создать наземную таблицу истинности, используйте приложение Video Labeler или Image Labeler.
lgraph
— График слояLayerGraph
График слоя, заданный как объект LayerGraph
. График слоя содержит архитектуру сети YOLO v2. Можно создать эту сеть при помощи функции yolov2Layers
. Также можно создать сетевые слои при помощи yolov2TransformLayer
, yolov2ReorgLayer
и функций yolov2OutputLayer
. Для получения дополнительной информации при создании пользовательской сети YOLO v2, см. Проект Сеть обнаружения YOLO v2.
опции
Опции обученияTrainingOptionsSGDM
| объект TrainingOptionsRMSProp
| объект TrainingOptionsADAM
Опции обучения, заданные как TrainingOptionsSGDM
, TrainingOptionsRMSProp
или объект TrainingOptionsADAM
, возвращенный функцией trainingOptions
. Чтобы задать имя решателя и другие опции для сетевого обучения, используйте функцию trainingOptions
.
Функция trainYOLOv2ObjectDetector
не поддерживает эти опции обучения:
Значение 'training-progress'
опции обучения Plots
ValidationData
, ValidationFrequency
или опции обучения ValidationPatience
Опция OutputFcn
.
checkpoint
— Сохраненная контрольная точка детектораyolov2ObjectDetector
Сохраненная контрольная точка детектора, заданная как объект 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);
detector
— Ранее обученный YOLO v2 возражает детекторуyolov2ObjectDetector
Ранее обученный YOLO v2 возражает детектору, заданному как объект yolov2ObjectDetector
. Используйте этот синтаксис, чтобы продолжить обучение детектор с дополнительными данными тренировки или выполнить больше учебных итераций, чтобы улучшить точность детектора.
trainingSizes
— Набор размеров изображения для многошкального обучения[]
(значение по умолчанию) | M-by-2 матрицаНабор размеров изображения для многошкального обучения, заданного как M-by-2 матрица, где каждая строка имеет форму [height
width
]. В течение каждой учебной эпохи входные изображения обучения случайным образом изменены к одному из размеров изображения M, заданных в этом наборе.
Если вы не задаете trainingSizes
, функция устанавливает это значение к размеру во входном слое изображений сети YOLO v2. Сеть изменяет размер всех учебных изображений к этому значению.
Значения входа trainingSizes
, заданные для многошкального обучения, должны быть больше, чем или равными входному размеру во входном слое изображений входного параметра lgraph
.
detector
— Обученный детектор объекта YOLO v2yolov2ObjectDetector
Обученный детектор объекта 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.
trainFastRCNNObjectDetector
| trainFasterRCNNObjectDetector
| trainRCNNObjectDetector
| trainingOptions
| yolov2Layers
| yolov2ObjectDetector
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.