objectDetectorTrainingData

Создание обучающих данных для детектора объектов

Описание

пример

[imds,blds] = objectDetectorTrainingData(gTruth) создает datastore изображений и datastore метки поля обучающие данные от заданной основной истины.

Можно объединить изображение и использование хранилищ данных метки поля combineimds , 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)

Figure contains an axes. The axes contains an object of type image.

Удалите папку изображений из пути.

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)

Figure contains an axes. The axes contains an object of type image.

Удалите папку изображений из пути.

rmpath(imageDir);

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

свернуть все

Достоверные данные в виде скаляра или массива groundTruth объекты. Можно создать объекты основной истины из существующих достоверных данных при помощи groundTruth объект.

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

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

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

Пример: 'SamplingFactor',5

Фактор для подвыборки отображает в источнике достоверных данных в виде 'auto', целое число или вектор из целых чисел. Для фактора выборки N возвращенные обучающие данные включают каждый N th изображение в источнике достоверных данных. Функция игнорирует изображения основной истины с пустыми данными о метке.

ЗначениеВыборка фактора
'auto'Производящим факторным N является 5 для источников данных с метками времени и 1 для набора изображений.
Целое числоВсе источники достоверных данных в gTruth производятся с тем же производящим факторным N.
Вектор из целых чиселk th источник достоверных данных в gTruth производится с фактором выборки N (k).

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

Этот аргумент применяется только для:

  • groundTruth объекты создали использование видеофайла или пользовательского источника данных.

  • Массив groundTruth объекты, созданные с помощью imageDatastore , с различным пользовательским read функции.

Функция игнорирует этот аргумент когда:

  • Вход groundTruth объект был создан из источника данных последовательности изображений.

  • Массив входа groundTruth объекты все содержат хранилища данных изображений с помощью того же пользовательского read функция.

  • Любой вход groundTruth объекты, содержащие хранилища данных, используйте read по умолчанию функции.

Формат файла изображения в виде строкового скаляра или вектора символов. Форматы файлов должны поддерживаться imwrite.

Этот аргумент применяется только для:

  • groundTruth объекты создали использование видеофайла или пользовательского источника данных.

  • Массив groundTruth объекты, созданные с помощью imageDatastore с различным пользовательским read функции.

Функция игнорирует этот аргумент когда:

  • Вход groundTruth объект был создан из источника данных последовательности изображений.

  • Массив входа groundTruth объекты все содержат хранилища данных изображений с помощью того же пользовательского read функция.

  • Любой вход groundTruth объекты, содержащие хранилища данных, используйте read по умолчанию функции.

Префикс для имен файлов выходного изображения в виде строкового скаляра или вектора символов. Файлы изображений называют как:

<name_prefix><source_number>_<image_number>.<image_format>

Значение по умолчанию использует имя источника данных, что изображения были извлечены из, strcat(sourceName,'_'), для видео и пользовательского источника данных или 'datastore', для datastore изображений.

Этот аргумент применяется только для:

  • groundTruth объекты создали использование видеофайла или пользовательского источника данных.

  • Массив groundTruth объекты, созданные с помощью imageDatastore с различным пользовательским read функции.

Функция игнорирует этот аргумент когда:

  • Вход groundTruth объект был создан из источника данных последовательности изображений.

  • Массив входа groundTruth объекты все содержат хранилища данных изображений с помощью того же пользовательского read функция.

  • Любой вход groundTruth объекты, содержащие хранилища данных, используйте read по умолчанию функции.

Отметьте, чтобы отобразить прогресс обучения в командной строке MATLAB в виде любого true или false. Это свойство применяется только для groundTruth объекты создали использование видеофайла или пользовательского источника данных.

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

свернуть все

Отобразите datastore, возвращенный как imageDatastore объект, содержащий изображения, извлечен из gTruth объекты. Изображения в imds содержите по крайней мере один класс аннотируемых меток. Функция игнорирует изображения, которые не аннотируются.

Datastore метки поля, возвращенный как boxLabelDatastore объект. Datastore содержит категориальные векторы для имен метки ROI и M-by-4 матрицы ограничительных рамок M. Местоположения и размеры ограничительных рамок представлены как двойной M-by-4 векторы элемента в формате [x, y, width, height].

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

Выходная таблица игнорирует любую подметку или данные об атрибуте, существующие во входе gTruth объект.

Введенный в R2017a