Создание обучающих данных для детектора объектов
[
создает datastore изображений и datastore метки поля обучающие данные от заданной основной истины.imds
,blds
] = objectDetectorTrainingData(gTruth
)
Можно объединить изображение и использование хранилищ данных метки поля combine
imds
, blds
) создать datastore, необходимый для обучения. Используйте объединенный datastore с учебными функциями, такой как trainACFObjectDetector
, trainYOLOv2ObjectDetector
, trainFastRCNNObjectDetector
, trainFasterRCNNObjectDetector
, и trainRCNNObjectDetector
.
Эта функция поддерживает параллельные вычисления с помощью нескольких рабочих MATLAB®. Включите параллельные вычисления с помощью диалогового окна Настроек Computer Vision Toolbox.
возвращает таблицу обучающих данных от заданной основной истины. trainingDataTable
= objectDetectorTrainingData(gTruth
)gTruth
массив groundTruth
объекты. Можно использовать таблицу, чтобы обучить детектор объектов с помощью функций обучения Computer Vision Toolbox™.
___ = objectDetectorTrainingData(
возвращает таблицу обучающих данных с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение". Если вы создаете gTruth
,Name,Value
)groundTruth
объекты в gTruth
с помощью видеофайла, пользовательского источника данных или imageDatastore
объект с различными пользовательскими функциями чтения, затем можно задать любую комбинацию аргументов пары "имя-значение". Если вы создаете groundTruth
объекты от коллекции изображений или источника данных последовательности изображений, затем можно задать только 'SamplingFactor
'аргумент пары "имя-значение".
Обучите детектор транспортного средства на основе сети YOLO v2.
Добавьте папку, содержащую изображения к рабочей области.
imageDir = fullfile(matlabroot,'toolbox','vision','visiondata','vehicles'); addpath(imageDir);
Загрузите достоверные данные транспортного средства.
data = load('vehicleTrainingGroundTruth.mat');
gTruth = data.vehicleTrainingGroundTruth;
Загрузите детектор, содержащий объект layerGraph для обучения.
vehicleDetector = load('yolov2VehicleDetector.mat');
lgraph = vehicleDetector.lgraph
lgraph = LayerGraph with properties: Layers: [25×1 nnet.cnn.layer.Layer] Connections: [24×2 table] InputNames: {'input'} OutputNames: {'yolov2OutputLayer'}
Создайте datastore изображений и datastore метки поля с помощью объекта основной истины.
[imds,bxds] = objectDetectorTrainingData(gTruth);
Объедините хранилища данных.
cds = combine(imds,bxds);
Сконфигурируйте опции обучения.
options = trainingOptions('sgdm', ... 'InitialLearnRate', 0.001, ... 'Verbose',true, ... 'MiniBatchSize',16, ... 'MaxEpochs',30, ... 'Shuffle','every-epoch', ... 'VerboseFrequency',10);
Обучите детектор.
[detector,info] = trainYOLOv2ObjectDetector(cds,lgraph,options);
************************************************************************* Training a YOLO v2 Object Detector for the following object classes: * vehicle 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.50 | 56.2 | 0.0010 | | 1 | 10 | 00:00:02 | 1.73 | 3.0 | 0.0010 | | 2 | 20 | 00:00:04 | 1.58 | 2.5 | 0.0010 | | 2 | 30 | 00:00:06 | 1.36 | 1.9 | 0.0010 | | 3 | 40 | 00:00:08 | 1.13 | 1.3 | 0.0010 | | 3 | 50 | 00:00:09 | 1.01 | 1.0 | 0.0010 | | 4 | 60 | 00:00:11 | 0.95 | 0.9 | 0.0010 | | 4 | 70 | 00:00:13 | 0.84 | 0.7 | 0.0010 | | 5 | 80 | 00:00:15 | 0.84 | 0.7 | 0.0010 | | 5 | 90 | 00:00:17 | 0.70 | 0.5 | 0.0010 | | 6 | 100 | 00:00:19 | 0.65 | 0.4 | 0.0010 | | 7 | 110 | 00:00:21 | 0.73 | 0.5 | 0.0010 | | 7 | 120 | 00:00:23 | 0.60 | 0.4 | 0.0010 | | 8 | 130 | 00:00:24 | 0.63 | 0.4 | 0.0010 | | 8 | 140 | 00:00:26 | 0.64 | 0.4 | 0.0010 | | 9 | 150 | 00:00:28 | 0.57 | 0.3 | 0.0010 | | 9 | 160 | 00:00:30 | 0.54 | 0.3 | 0.0010 | | 10 | 170 | 00:00:32 | 0.52 | 0.3 | 0.0010 | | 10 | 180 | 00:00:33 | 0.45 | 0.2 | 0.0010 | | 11 | 190 | 00:00:35 | 0.55 | 0.3 | 0.0010 | | 12 | 200 | 00:00:37 | 0.56 | 0.3 | 0.0010 | | 12 | 210 | 00:00:39 | 0.55 | 0.3 | 0.0010 | | 13 | 220 | 00:00:41 | 0.52 | 0.3 | 0.0010 | | 13 | 230 | 00:00:42 | 0.53 | 0.3 | 0.0010 | | 14 | 240 | 00:00:44 | 0.58 | 0.3 | 0.0010 | | 14 | 250 | 00:00:46 | 0.47 | 0.2 | 0.0010 | | 15 | 260 | 00:00:48 | 0.49 | 0.2 | 0.0010 | | 15 | 270 | 00:00:50 | 0.44 | 0.2 | 0.0010 | | 16 | 280 | 00:00:52 | 0.45 | 0.2 | 0.0010 | | 17 | 290 | 00:00:54 | 0.47 | 0.2 | 0.0010 | | 17 | 300 | 00:00:55 | 0.43 | 0.2 | 0.0010 | | 18 | 310 | 00:00:57 | 0.44 | 0.2 | 0.0010 | | 18 | 320 | 00:00:59 | 0.44 | 0.2 | 0.0010 | | 19 | 330 | 00:01:01 | 0.38 | 0.1 | 0.0010 | | 19 | 340 | 00:01:03 | 0.41 | 0.2 | 0.0010 | | 20 | 350 | 00:01:04 | 0.39 | 0.2 | 0.0010 | | 20 | 360 | 00:01:06 | 0.42 | 0.2 | 0.0010 | | 21 | 370 | 00:01:08 | 0.42 | 0.2 | 0.0010 | | 22 | 380 | 00:01:10 | 0.39 | 0.2 | 0.0010 | | 22 | 390 | 00:01:12 | 0.37 | 0.1 | 0.0010 | | 23 | 400 | 00:01:13 | 0.37 | 0.1 | 0.0010 | | 23 | 410 | 00:01:15 | 0.35 | 0.1 | 0.0010 | | 24 | 420 | 00:01:17 | 0.29 | 8.3e-02 | 0.0010 | | 24 | 430 | 00:01:19 | 0.36 | 0.1 | 0.0010 | | 25 | 440 | 00:01:21 | 0.28 | 7.9e-02 | 0.0010 | | 25 | 450 | 00:01:22 | 0.29 | 8.1e-02 | 0.0010 | | 26 | 460 | 00:01:24 | 0.28 | 8.0e-02 | 0.0010 | | 27 | 470 | 00:01:26 | 0.27 | 7.1e-02 | 0.0010 | | 27 | 480 | 00:01:28 | 0.25 | 6.3e-02 | 0.0010 | | 28 | 490 | 00:01:30 | 0.24 | 5.9e-02 | 0.0010 | | 28 | 500 | 00:01:31 | 0.29 | 8.4e-02 | 0.0010 | | 29 | 510 | 00:01:33 | 0.35 | 0.1 | 0.0010 | | 29 | 520 | 00:01:35 | 0.31 | 9.3e-02 | 0.0010 | | 30 | 530 | 00:01:37 | 0.18 | 3.1e-02 | 0.0010 | | 30 | 540 | 00:01:38 | 0.22 | 4.6e-02 | 0.0010 | |========================================================================================| Detector training complete. *************************************************************************
Считайте тестовое изображение.
I = imread('detectcars.png');
Запустите детектор.
[bboxes,scores] = detect(detector,I);
Отобразите результаты.
if(~isempty(bboxes)) I = insertObjectAnnotation(I,'rectangle',bboxes,scores); end figure imshow(I)
Используйте обучающие данные, чтобы обучить ACF на основе детектора объектов знакам Стоп
Добавьте папку, содержащую изображения к пути MATLAB.
imageDir = fullfile(matlabroot, 'toolbox', 'vision', 'visiondata', 'stopSignImages'); addpath(imageDir);
Загрузите достоверные данные, который содержит данные для знаков остановок и автомобилей.
load('stopSignsAndCarsGroundTruth.mat','stopSignsAndCarsGroundTruth')
Просмотрите определения метки, чтобы видеть типы метки в основной истине.
stopSignsAndCarsGroundTruth.LabelDefinitions
ans=3×3 table
Name Type Group
____________ _________ ________
{'stopSign'} Rectangle {'None'}
{'carRear' } Rectangle {'None'}
{'carFront'} Rectangle {'None'}
Выберите данные о знаке Стоп для обучения.
stopSignGroundTruth = selectLabelsByName(stopSignsAndCarsGroundTruth,'stopSign');
Создайте обучающие данные для детектора объектов знака Стоп.
trainingData = objectDetectorTrainingData(stopSignGroundTruth); summary(trainingData)
Variables: imageFilename: 41x1 cell array of character vectors stopSign: 41x1 cell
Обучите ACF на основе детектора объектов.
acfDetector = trainACFObjectDetector(trainingData,'NegativeSamplesFactor',2);
ACF Object Detector Training The training will take 4 stages. The model size is 34x31. Sample positive examples(~100% Completed) Compute approximation coefficients...Completed. Compute aggregated channel features...Completed. -------------------------------------------- Stage 1: Sample negative examples(~100% Completed) Compute aggregated channel features...Completed. Train classifier with 42 positive examples and 84 negative examples...Completed. The trained classifier has 19 weak learners. -------------------------------------------- Stage 2: Sample negative examples(~100% Completed) Found 84 new negative examples for training. Compute aggregated channel features...Completed. Train classifier with 42 positive examples and 84 negative examples...Completed. The trained classifier has 20 weak learners. -------------------------------------------- Stage 3: Sample negative examples(~100% Completed) Found 84 new negative examples for training. Compute aggregated channel features...Completed. Train classifier with 42 positive examples and 84 negative examples...Completed. The trained classifier has 54 weak learners. -------------------------------------------- Stage 4: Sample negative examples(~100% Completed) Found 84 new negative examples for training. Compute aggregated channel features...Completed. Train classifier with 42 positive examples and 84 negative examples...Completed. The trained classifier has 61 weak learners. -------------------------------------------- ACF object detector training is completed. Elapsed time is 20.7195 seconds.
Протестируйте основанный на ACF детектор на демонстрационном изображении.
I = imread('stopSignTest.jpg');
bboxes = detect(acfDetector,I);
Отобразите обнаруженный объект.
annotation = acfDetector.ModelName;
I = insertObjectAnnotation(I,'rectangle',bboxes,annotation);
figure
imshow(I)
Удалите папку изображений из пути.
rmpath(imageDir);
Используйте обучающие данные, чтобы обучить ACF на основе детектора объектов транспортным средствам.
imageDir = fullfile(matlabroot,'toolbox','driving','drivingdata','vehiclesSequence'); addpath(imageDir);
Загрузите достоверные данные.
load vehicleGroundTruth.mat
Создайте обучающие данные для детектора объектов для транспортных средств.
trainingData = objectDetectorTrainingData(gTruth,'SamplingFactor',2);
Обучите ACF на основе детектора объектов.
acfDetector = trainACFObjectDetector(trainingData,'ObjectTrainingSize',[20 20]);
ACF Object Detector Training The training will take 4 stages. The model size is 20x20. Sample positive examples(~100% Completed) Compute approximation coefficients...Completed. Compute aggregated channel features...Completed. -------------------------------------------- Stage 1: Sample negative examples(~100% Completed) Compute aggregated channel features...Completed. Train classifier with 71 positive examples and 355 negative examples...Completed. The trained classifier has 68 weak learners. -------------------------------------------- Stage 2: Sample negative examples(~100% Completed) Found 76 new negative examples for training. Compute aggregated channel features...Completed. Train classifier with 71 positive examples and 355 negative examples...Completed. The trained classifier has 120 weak learners. -------------------------------------------- Stage 3: Sample negative examples(~100% Completed) Found 54 new negative examples for training. Compute aggregated channel features...Completed. Train classifier with 71 positive examples and 355 negative examples...Completed. The trained classifier has 170 weak learners. -------------------------------------------- Stage 4: Sample negative examples(~100% Completed) Found 63 new negative examples for training. Compute aggregated channel features...Completed. Train classifier with 71 positive examples and 355 negative examples...Completed. The trained classifier has 215 weak learners. -------------------------------------------- ACF object detector training is completed. Elapsed time is 7.6819 seconds.
Протестируйте детектор ACF на тестовом изображении.
I = imread('highway.png'); [bboxes, scores] = detect(acfDetector,I,'Threshold',1);
Выберите обнаружение с самой высокой классификационной оценкой.
[~,idx] = max(scores);
Отобразите обнаруженный объект.
annotation = acfDetector.ModelName;
I = insertObjectAnnotation(I,'rectangle',bboxes(idx,:),annotation);
figure
imshow(I)
Удалите папку изображений из пути.
rmpath(imageDir);
gTruth
данные Ground TruthgroundTruth
объектыДостоверные данные в виде скаляра или массива groundTruth
объекты. Можно создать объекты основной истины из существующих достоверных данных при помощи groundTruth
объект.
Если вы используете пользовательские источники данных в groundTruth
с включенными параллельными вычислениями затем функция читателя, как ожидают, будет работать с пулом работников MATLAB, чтобы считать изображения из источника данных параллельно.
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
'SamplingFactor'
,5
'SamplingFactor'
— Фактор для изображений подвыборки'auto'
(значение по умолчанию) | целое число | вектор из целых чиселФактор для подвыборки отображает в источнике достоверных данных в виде 'auto'
, целое число или вектор из целых чисел. Для фактора выборки N возвращенные обучающие данные включают каждый N th изображение в источнике достоверных данных. Функция игнорирует изображения основной истины с пустыми данными о метке.
Значение | Выборка фактора |
---|---|
'auto' | Производящим факторным N является 5 для источников данных с метками времени и 1 для набора изображений. |
Целое число | Все источники достоверных данных в gTruth производятся с тем же производящим факторным N. |
Вектор из целых чисел | k th источник достоверных данных в gTruth производится с фактором выборки N (k). |
'WriteLocation'
— Имя папкиpwd
(текущая рабочая папка) (значение по умолчанию) | строковый скаляр | вектор символовИмя папки, чтобы записать извлеченные изображения в в виде строкового скаляра или вектора символов. Заданная папка должна существовать и иметь полномочия записи.
Этот аргумент применяется только для:
groundTruth
объекты создали использование видеофайла или пользовательского источника данных.
Массив groundTruth
объекты, созданные с помощью imageDatastore
, с различным пользовательским read
функции.
Функция игнорирует этот аргумент когда:
Вход groundTruth
объект был создан из источника данных последовательности изображений.
Массив входа groundTruth
объекты все содержат хранилища данных изображений с помощью того же пользовательского read
функция.
Любой вход groundTruth
объекты, содержащие хранилища данных, используйте read
по умолчанию функции.
'ImageFormat'
— Формат файла изображенияPNG
(значение по умолчанию) | строковый скаляр | вектор символовФормат файла изображения в виде строкового скаляра или вектора символов. Форматы файлов должны поддерживаться imwrite
.
Этот аргумент применяется только для:
groundTruth
объекты создали использование видеофайла или пользовательского источника данных.
Массив groundTruth
объекты, созданные с помощью imageDatastore
с различным пользовательским read
функции.
Функция игнорирует этот аргумент когда:
Вход groundTruth
объект был создан из источника данных последовательности изображений.
Массив входа groundTruth
объекты все содержат хранилища данных изображений с помощью того же пользовательского read
функция.
Любой вход groundTruth
объекты, содержащие хранилища данных, используйте read
по умолчанию функции.
'NamePrefix'
— Префикс для имен файлов выходного изображенияПрефикс для имен файлов выходного изображения в виде строкового скаляра или вектора символов. Файлы изображений называют как:
<name_prefix><source_number>_<image_number>.<image_format>
Значение по умолчанию использует имя источника данных, что изображения были извлечены из, strcat(sourceName,'_')
, для видео и пользовательского источника данных или 'datastore'
, для datastore изображений.
Этот аргумент применяется только для:
groundTruth
объекты создали использование видеофайла или пользовательского источника данных.
Массив groundTruth
объекты, созданные с помощью imageDatastore
с различным пользовательским read
функции.
Функция игнорирует этот аргумент когда:
Вход groundTruth
объект был создан из источника данных последовательности изображений.
Массив входа groundTruth
объекты все содержат хранилища данных изображений с помощью того же пользовательского read
функция.
Любой вход groundTruth
объекты, содержащие хранилища данных, используйте read
по умолчанию функции.
'Verbose'
— Отметьте, чтобы отобразить прогресс обученияtrue
(значение по умолчанию) | false
Отметьте, чтобы отобразить прогресс обучения в командной строке MATLAB в виде любого true
или false
. Это свойство применяется только для groundTruth
объекты создали использование видеофайла или пользовательского источника данных.
imds
ImageDatastoreimageDatastore
объектОтобразите datastore, возвращенный как imageDatastore
объект, содержащий изображения, извлечен из gTruth
объекты. Изображения в imds
содержите по крайней мере один класс аннотируемых меток. Функция игнорирует изображения, которые не аннотируются.
blds
— Datastore метки поляboxLabelDatastore
объектDatastore метки поля, возвращенный как boxLabelDatastore
объект. Datastore содержит категориальные векторы для имен метки ROI и M-by-4 матрицы ограничительных рамок M. Местоположения и размеры ограничительных рамок представлены как двойной M-by-4 векторы элемента в формате [x, y, width, height].
trainingDataTable
— Таблица обучающих данныхТаблица обучающих данных, возвращенная как таблица с двумя или больше столбцами. Первый столбец таблицы содержит имена файла образа с путями. Изображения могут быть полутоновым или истинным цветом (RGB) и в любом формате, поддержанном imread
. Каждый из остальных столбцов соответствует метке ROI, и содержит местоположения ограничительных рамок в изображении (заданный в первом столбце), для той метки. Ограничительные рамки заданы как M-by-4 матрицы ограничительных рамок M в формате [x, y, width, height]. [x, y] задает местоположение верхнего левого угла. Чтобы составить таблицу основной истины, можно использовать приложение Image Labeler или приложение Video Labeler.
Выходная таблица игнорирует любую подметку или данные об атрибуте, существующие во входе gTruth
объект.
estimateAnchorBoxes
| trainACFObjectDetector
| trainFasterRCNNObjectDetector
| trainFastRCNNObjectDetector
| trainRCNNObjectDetector
| trainYOLOv2ObjectDetector
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.