Обучите детектор объектов глубокого обучения SSD
обучает один детектор мультиполя выстрела (SSD) с помощью глубокого обучения. Можно обучить детектор SSD обнаруживать несколько классов объектов.trainedDetector
= trainSSDObjectDetector(trainingData
,lgraph
,options
)
Эта функция требует, чтобы у вас был Deep Learning Toolbox™. Рекомендуется, чтобы у вас также был Parallel Computing Toolbox™, чтобы использовать с помощью графического процессора CUDA®-enabled NVIDIA®. Для получения информации о поддерживаемом вычислите возможности, смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox).
[
также возвращает информацию о процессе обучения, таком как учебная потеря и точность, для каждой итерации.trainedDetector
,info
] = trainSSDObjectDetector(___)
обучение резюме с контрольной точки детектора.trainedDetector
= trainSSDObjectDetector(trainingData
,checkpoint
,options
)
продолжает обучение детектор мультиобъекта поля SSD с дополнительными опциями подстройки. Используйте этот синтаксис с дополнительными обучающими данными или выполнять больше учебных итераций, чтобы улучшить точность детектора.trainedDetector
= trainSSDObjectDetector(trainingData
,detector
,options
)
дополнительные опции использования заданы одним или несколькими trainedDetector
= trainSSDObjectDetector(___,Name,Value
)Name,Value
парные аргументы и любые из предыдущих входных параметров.
Загрузите обучающие данные для обнаружения транспортного средства в рабочую область.
data = load('vehicleTrainingData.mat');
trainingData = data.vehicleTrainingData;
Задайте директорию, в которой хранятся обучающие выборки. Добавьте полный путь в имена файлов в обучающих данных.
dataDir = fullfile(toolboxdir('vision'),'visiondata'); trainingData.imageFilename = fullfile(dataDir,trainingData.imageFilename);
Создайте datastore изображений с помощью файлов из таблицы.
imds = imageDatastore(trainingData.imageFilename);
Создайте datastore метки поля с помощью столбцов меток из таблицы.
blds = boxLabelDatastore(trainingData(:,2:end));
Объедините хранилища данных.
ds = combine(imds,blds);
Загрузите предварительно инициализированную сеть обнаружения объектов SSD.
net = load('ssdVehicleDetector.mat');
lgraph = net.lgraph
lgraph = LayerGraph with properties: Layers: [132×1 nnet.cnn.layer.Layer] Connections: [141×2 table] InputNames: {'input_1'} OutputNames: {'focal_loss' 'rcnnboxRegression'}
Смотрите слои в сети SSD и их свойствах. Можно также создать сеть SSD путем выполнения поданных шагов, Создают Сеть Обнаружения объектов SSD.
lgraph.Layers
ans = 132×1 Layer array with layers: 1 'input_1' Image Input 224×224×3 images with 'zscore' normalization 2 'Conv1' Convolution 32 3×3×3 convolutions with stride [2 2] and padding 'same' 3 'bn_Conv1' Batch Normalization Batch normalization with 32 channels 4 'Conv1_relu' Clipped ReLU Clipped ReLU with ceiling 6 5 'expanded_conv_depthwise' Grouped Convolution 32 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same' 6 'expanded_conv_depthwise_BN' Batch Normalization Batch normalization with 32 channels 7 'expanded_conv_depthwise_relu' Clipped ReLU Clipped ReLU with ceiling 6 8 'expanded_conv_project' Convolution 16 1×1×32 convolutions with stride [1 1] and padding 'same' 9 'expanded_conv_project_BN' Batch Normalization Batch normalization with 16 channels 10 'block_1_expand' Convolution 96 1×1×16 convolutions with stride [1 1] and padding 'same' 11 'block_1_expand_BN' Batch Normalization Batch normalization with 96 channels 12 'block_1_expand_relu' Clipped ReLU Clipped ReLU with ceiling 6 13 'block_1_depthwise' Grouped Convolution 96 groups of 1 3×3×1 convolutions with stride [2 2] and padding 'same' 14 'block_1_depthwise_BN' Batch Normalization Batch normalization with 96 channels 15 'block_1_depthwise_relu' Clipped ReLU Clipped ReLU with ceiling 6 16 'block_1_project' Convolution 24 1×1×96 convolutions with stride [1 1] and padding 'same' 17 'block_1_project_BN' Batch Normalization Batch normalization with 24 channels 18 'block_2_expand' Convolution 144 1×1×24 convolutions with stride [1 1] and padding 'same' 19 'block_2_expand_BN' Batch Normalization Batch normalization with 144 channels 20 'block_2_expand_relu' Clipped ReLU Clipped ReLU with ceiling 6 21 'block_2_depthwise' Grouped Convolution 144 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same' 22 'block_2_depthwise_BN' Batch Normalization Batch normalization with 144 channels 23 'block_2_depthwise_relu' Clipped ReLU Clipped ReLU with ceiling 6 24 'block_2_project' Convolution 24 1×1×144 convolutions with stride [1 1] and padding 'same' 25 'block_2_project_BN' Batch Normalization Batch normalization with 24 channels 26 'block_2_add' Addition Element-wise addition of 2 inputs 27 'block_3_expand' Convolution 144 1×1×24 convolutions with stride [1 1] and padding 'same' 28 'block_3_expand_BN' Batch Normalization Batch normalization with 144 channels 29 'block_3_expand_relu' Clipped ReLU Clipped ReLU with ceiling 6 30 'block_3_depthwise' Grouped Convolution 144 groups of 1 3×3×1 convolutions with stride [2 2] and padding 'same' 31 'block_3_depthwise_BN' Batch Normalization Batch normalization with 144 channels 32 'block_3_depthwise_relu' Clipped ReLU Clipped ReLU with ceiling 6 33 'block_3_project' Convolution 32 1×1×144 convolutions with stride [1 1] and padding 'same' 34 'block_3_project_BN' Batch Normalization Batch normalization with 32 channels 35 'block_4_expand' Convolution 192 1×1×32 convolutions with stride [1 1] and padding 'same' 36 'block_4_expand_BN' Batch Normalization Batch normalization with 192 channels 37 'block_4_expand_relu' Clipped ReLU Clipped ReLU with ceiling 6 38 'block_4_depthwise' Grouped Convolution 192 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same' 39 'block_4_depthwise_BN' Batch Normalization Batch normalization with 192 channels 40 'block_4_depthwise_relu' Clipped ReLU Clipped ReLU with ceiling 6 41 'block_4_project' Convolution 32 1×1×192 convolutions with stride [1 1] and padding 'same' 42 'block_4_project_BN' Batch Normalization Batch normalization with 32 channels 43 'block_4_add' Addition Element-wise addition of 2 inputs 44 'block_5_expand' Convolution 192 1×1×32 convolutions with stride [1 1] and padding 'same' 45 'block_5_expand_BN' Batch Normalization Batch normalization with 192 channels 46 'block_5_expand_relu' Clipped ReLU Clipped ReLU with ceiling 6 47 'block_5_depthwise' Grouped Convolution 192 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same' 48 'block_5_depthwise_BN' Batch Normalization Batch normalization with 192 channels 49 'block_5_depthwise_relu' Clipped ReLU Clipped ReLU with ceiling 6 50 'block_5_project' Convolution 32 1×1×192 convolutions with stride [1 1] and padding 'same' 51 'block_5_project_BN' Batch Normalization Batch normalization with 32 channels 52 'block_5_add' Addition Element-wise addition of 2 inputs 53 'block_6_expand' Convolution 192 1×1×32 convolutions with stride [1 1] and padding 'same' 54 'block_6_expand_BN' Batch Normalization Batch normalization with 192 channels 55 'block_6_expand_relu' Clipped ReLU Clipped ReLU with ceiling 6 56 'block_6_depthwise' Grouped Convolution 192 groups of 1 3×3×1 convolutions with stride [2 2] and padding 'same' 57 'block_6_depthwise_BN' Batch Normalization Batch normalization with 192 channels 58 'block_6_depthwise_relu' Clipped ReLU Clipped ReLU with ceiling 6 59 'block_6_project' Convolution 64 1×1×192 convolutions with stride [1 1] and padding 'same' 60 'block_6_project_BN' Batch Normalization Batch normalization with 64 channels 61 'block_7_expand' Convolution 384 1×1×64 convolutions with stride [1 1] and padding 'same' 62 'block_7_expand_BN' Batch Normalization Batch normalization with 384 channels 63 'block_7_expand_relu' Clipped ReLU Clipped ReLU with ceiling 6 64 'block_7_depthwise' Grouped Convolution 384 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same' 65 'block_7_depthwise_BN' Batch Normalization Batch normalization with 384 channels 66 'block_7_depthwise_relu' Clipped ReLU Clipped ReLU with ceiling 6 67 'block_7_project' Convolution 64 1×1×384 convolutions with stride [1 1] and padding 'same' 68 'block_7_project_BN' Batch Normalization Batch normalization with 64 channels 69 'block_7_add' Addition Element-wise addition of 2 inputs 70 'block_8_expand' Convolution 384 1×1×64 convolutions with stride [1 1] and padding 'same' 71 'block_8_expand_BN' Batch Normalization Batch normalization with 384 channels 72 'block_8_expand_relu' Clipped ReLU Clipped ReLU with ceiling 6 73 'block_8_depthwise' Grouped Convolution 384 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same' 74 'block_8_depthwise_BN' Batch Normalization Batch normalization with 384 channels 75 'block_8_depthwise_relu' Clipped ReLU Clipped ReLU with ceiling 6 76 'block_8_project' Convolution 64 1×1×384 convolutions with stride [1 1] and padding 'same' 77 'block_8_project_BN' Batch Normalization Batch normalization with 64 channels 78 'block_8_add' Addition Element-wise addition of 2 inputs 79 'block_9_expand' Convolution 384 1×1×64 convolutions with stride [1 1] and padding 'same' 80 'block_9_expand_BN' Batch Normalization Batch normalization with 384 channels 81 'block_9_expand_relu' Clipped ReLU Clipped ReLU with ceiling 6 82 'block_9_depthwise' Grouped Convolution 384 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same' 83 'block_9_depthwise_BN' Batch Normalization Batch normalization with 384 channels 84 'block_9_depthwise_relu' Clipped ReLU Clipped ReLU with ceiling 6 85 'block_9_project' Convolution 64 1×1×384 convolutions with stride [1 1] and padding 'same' 86 'block_9_project_BN' Batch Normalization Batch normalization with 64 channels 87 'block_9_add' Addition Element-wise addition of 2 inputs 88 'block_10_expand' Convolution 384 1×1×64 convolutions with stride [1 1] and padding 'same' 89 'block_10_expand_BN' Batch Normalization Batch normalization with 384 channels 90 'block_10_expand_relu' Clipped ReLU Clipped ReLU with ceiling 6 91 'block_10_depthwise' Grouped Convolution 384 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same' 92 'block_10_depthwise_BN' Batch Normalization Batch normalization with 384 channels 93 'block_10_depthwise_relu' Clipped ReLU Clipped ReLU with ceiling 6 94 'block_10_project' Convolution 96 1×1×384 convolutions with stride [1 1] and padding 'same' 95 'block_10_project_BN' Batch Normalization Batch normalization with 96 channels 96 'block_11_expand' Convolution 576 1×1×96 convolutions with stride [1 1] and padding 'same' 97 'block_11_expand_BN' Batch Normalization Batch normalization with 576 channels 98 'block_11_expand_relu' Clipped ReLU Clipped ReLU with ceiling 6 99 'block_11_depthwise' Grouped Convolution 576 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same' 100 'block_11_depthwise_BN' Batch Normalization Batch normalization with 576 channels 101 'block_11_depthwise_relu' Clipped ReLU Clipped ReLU with ceiling 6 102 'block_11_project' Convolution 96 1×1×576 convolutions with stride [1 1] and padding 'same' 103 'block_11_project_BN' Batch Normalization Batch normalization with 96 channels 104 'block_11_add' Addition Element-wise addition of 2 inputs 105 'block_12_expand' Convolution 576 1×1×96 convolutions with stride [1 1] and padding 'same' 106 'block_12_expand_BN' Batch Normalization Batch normalization with 576 channels 107 'block_12_expand_relu' Clipped ReLU Clipped ReLU with ceiling 6 108 'block_12_depthwise' Grouped Convolution 576 groups of 1 3×3×1 convolutions with stride [1 1] and padding 'same' 109 'block_12_depthwise_BN' Batch Normalization Batch normalization with 576 channels 110 'block_12_depthwise_relu' Clipped ReLU Clipped ReLU with ceiling 6 111 'block_12_project' Convolution 96 1×1×576 convolutions with stride [1 1] and padding 'same' 112 'block_12_project_BN' Batch Normalization Batch normalization with 96 channels 113 'block_12_add' Addition Element-wise addition of 2 inputs 114 'block_13_expand' Convolution 576 1×1×96 convolutions with stride [1 1] and padding 'same' 115 'block_13_expand_BN' Batch Normalization Batch normalization with 576 channels 116 'block_13_expand_relu' Clipped ReLU Clipped ReLU with ceiling 6 117 'block_13_depthwise' Grouped Convolution 576 groups of 1 3×3×1 convolutions with stride [2 2] and padding 'same' 118 'block_13_depthwise_BN' Batch Normalization Batch normalization with 576 channels 119 'block_13_depthwise_relu' Clipped ReLU Clipped ReLU with ceiling 6 120 'block_13_project' Convolution 160 1×1×576 convolutions with stride [1 1] and padding 'same' 121 'block_13_project_BN' Batch Normalization Batch normalization with 160 channels 122 'block_13_project_BN_anchorbox1' Anchor Box Layer. Anchor Box Layer. 123 'block_13_project_BN_mbox_conf_1' Convolution 10 3×3 convolutions with stride [1 1] and padding [1 1 1 1] 124 'block_13_project_BN_mbox_loc_1' Convolution 20 3×3 convolutions with stride [1 1] and padding [1 1 1 1] 125 'block_10_project_BN_anchorbox2' Anchor Box Layer. Anchor Box Layer. 126 'block_10_project_BN_mbox_conf_1' Convolution 10 3×3 convolutions with stride [1 1] and padding [1 1 1 1] 127 'block_10_project_BN_mbox_loc_1' Convolution 20 3×3 convolutions with stride [1 1] and padding [1 1 1 1] 128 'confmerge' SSD Merge Layer. SSD Merge Layer. 129 'locmerge' SSD Merge Layer. SSD Merge Layer. 130 'anchorBoxSoft' Softmax softmax 131 'focal_loss' Focal Loss Layer. Focal Loss Layer. 132 'rcnnboxRegression' Box Regression Output smooth-l1 loss
Сконфигурируйте сетевые опции обучения.
options = trainingOptions('sgdm',... 'InitialLearnRate',5e-5,... 'MiniBatchSize',16,... 'Verbose',true,... 'MaxEpochs',50,... 'Shuffle','every-epoch',... 'VerboseFrequency',10,... 'CheckpointPath',tempdir);
Обучите сеть SSD.
[detector,info] = trainSSDObjectDetector(ds,lgraph,options);
************************************************************************* Training an SSD Object Detector for the following object classes: * vehicle Training on single CPU. Initializing input data normalization. |=======================================================================================================| | Epoch | Iteration | Time Elapsed | Mini-batch | Mini-batch | Mini-batch | Base Learning | | | | (hh:mm:ss) | Loss | Accuracy | RMSE | Rate | |=======================================================================================================| | 1 | 1 | 00:00:18 | 0.8757 | 48.51% | 1.47 | 5.0000e-05 | | 1 | 10 | 00:01:43 | 0.8386 | 48.35% | 1.43 | 5.0000e-05 | | 2 | 20 | 00:03:15 | 0.7860 | 48.87% | 1.37 | 5.0000e-05 | | 2 | 30 | 00:04:42 | 0.6771 | 48.65% | 1.23 | 5.0000e-05 | | 3 | 40 | 00:06:46 | 0.7129 | 48.43% | 1.28 | 5.0000e-05 | | 3 | 50 | 00:08:37 | 0.5723 | 49.04% | 1.09 | 5.0000e-05 | | 4 | 60 | 00:10:12 | 0.5632 | 48.72% | 1.08 | 5.0000e-05 | | 4 | 70 | 00:11:25 | 0.5438 | 49.11% | 1.06 | 5.0000e-05 | | 5 | 80 | 00:12:35 | 0.5277 | 48.48% | 1.03 | 5.0000e-05 | | 5 | 90 | 00:13:39 | 0.4711 | 48.95% | 0.96 | 5.0000e-05 | | 6 | 100 | 00:14:50 | 0.5063 | 48.72% | 1.00 | 5.0000e-05 | | 7 | 110 | 00:16:11 | 0.4812 | 48.99% | 0.97 | 5.0000e-05 | | 7 | 120 | 00:17:27 | 0.5248 | 48.53% | 1.04 | 5.0000e-05 | | 8 | 130 | 00:18:33 | 0.4245 | 49.32% | 0.90 | 5.0000e-05 | | 8 | 140 | 00:19:37 | 0.4889 | 48.87% | 0.98 | 5.0000e-05 | | 9 | 150 | 00:20:47 | 0.4213 | 49.18% | 0.89 | 5.0000e-05 | | 9 | 160 | 00:22:02 | 0.4753 | 49.45% | 0.97 | 5.0000e-05 | | 10 | 170 | 00:23:13 | 0.4454 | 49.31% | 0.92 | 5.0000e-05 | | 10 | 180 | 00:24:22 | 0.4378 | 49.26% | 0.92 | 5.0000e-05 | | 11 | 190 | 00:25:29 | 0.4278 | 49.13% | 0.90 | 5.0000e-05 | | 12 | 200 | 00:26:39 | 0.4494 | 49.77% | 0.93 | 5.0000e-05 | | 12 | 210 | 00:27:45 | 0.4298 | 49.03% | 0.90 | 5.0000e-05 | | 13 | 220 | 00:28:47 | 0.4296 | 49.86% | 0.90 | 5.0000e-05 | | 13 | 230 | 00:30:05 | 0.3987 | 49.65% | 0.86 | 5.0000e-05 | | 14 | 240 | 00:31:13 | 0.4042 | 49.46% | 0.87 | 5.0000e-05 | | 14 | 250 | 00:32:20 | 0.4244 | 50.16% | 0.90 | 5.0000e-05 | | 15 | 260 | 00:33:31 | 0.4374 | 49.72% | 0.93 | 5.0000e-05 | | 15 | 270 | 00:34:38 | 0.4016 | 48.95% | 0.86 | 5.0000e-05 | | 16 | 280 | 00:35:47 | 0.4289 | 49.44% | 0.91 | 5.0000e-05 | | 17 | 290 | 00:36:58 | 0.3866 | 49.10% | 0.84 | 5.0000e-05 | | 17 | 300 | 00:38:10 | 0.4077 | 49.59% | 0.87 | 5.0000e-05 | | 18 | 310 | 00:39:24 | 0.3943 | 49.74% | 0.86 | 5.0000e-05 | | 18 | 320 | 00:40:48 | 0.4206 | 49.99% | 0.89 | 5.0000e-05 | | 19 | 330 | 00:41:53 | 0.4504 | 49.72% | 0.94 | 5.0000e-05 | | 19 | 340 | 00:42:55 | 0.3449 | 50.38% | 0.78 | 5.0000e-05 | | 20 | 350 | 00:44:01 | 0.3450 | 49.57% | 0.77 | 5.0000e-05 | | 20 | 360 | 00:44:59 | 0.3769 | 50.24% | 0.83 | 5.0000e-05 | | 21 | 370 | 00:46:05 | 0.3336 | 50.40% | 0.76 | 5.0000e-05 | | 22 | 380 | 00:47:01 | 0.3453 | 49.27% | 0.78 | 5.0000e-05 | | 22 | 390 | 00:48:04 | 0.4011 | 49.72% | 0.87 | 5.0000e-05 | | 23 | 400 | 00:49:06 | 0.3307 | 50.32% | 0.75 | 5.0000e-05 | | 23 | 410 | 00:50:03 | 0.3186 | 50.01% | 0.73 | 5.0000e-05 | | 24 | 420 | 00:51:10 | 0.3491 | 50.43% | 0.78 | 5.0000e-05 | | 24 | 430 | 00:52:17 | 0.3299 | 50.31% | 0.76 | 5.0000e-05 | | 25 | 440 | 00:53:35 | 0.3326 | 50.78% | 0.76 | 5.0000e-05 | | 25 | 450 | 00:54:42 | 0.3219 | 50.61% | 0.75 | 5.0000e-05 | | 26 | 460 | 00:55:55 | 0.3090 | 50.59% | 0.71 | 5.0000e-05 | | 27 | 470 | 00:57:08 | 0.3036 | 51.48% | 0.71 | 5.0000e-05 | | 27 | 480 | 00:58:16 | 0.3359 | 50.43% | 0.76 | 5.0000e-05 | | 28 | 490 | 00:59:24 | 0.3182 | 50.35% | 0.73 | 5.0000e-05 | | 28 | 500 | 01:00:36 | 0.3265 | 50.71% | 0.76 | 5.0000e-05 | | 29 | 510 | 01:01:44 | 0.3415 | 50.53% | 0.78 | 5.0000e-05 | | 29 | 520 | 01:02:51 | 0.3126 | 51.15% | 0.73 | 5.0000e-05 | | 30 | 530 | 01:03:59 | 0.3179 | 50.74% | 0.75 | 5.0000e-05 | | 30 | 540 | 01:05:15 | 0.3032 | 50.83% | 0.72 | 5.0000e-05 | | 31 | 550 | 01:06:25 | 0.2868 | 50.69% | 0.68 | 5.0000e-05 | | 32 | 560 | 01:07:42 | 0.2716 | 50.85% | 0.66 | 5.0000e-05 | | 32 | 570 | 01:08:53 | 0.3016 | 51.32% | 0.71 | 5.0000e-05 | | 33 | 580 | 01:10:05 | 0.2624 | 51.35% | 0.63 | 5.0000e-05 | | 33 | 590 | 01:11:12 | 0.3145 | 51.38% | 0.73 | 5.0000e-05 | | 34 | 600 | 01:12:31 | 0.2949 | 51.28% | 0.70 | 5.0000e-05 | | 34 | 610 | 01:13:46 | 0.3070 | 51.22% | 0.73 | 5.0000e-05 | | 35 | 620 | 01:15:01 | 0.3119 | 51.49% | 0.73 | 5.0000e-05 | | 35 | 630 | 01:16:14 | 0.2869 | 51.81% | 0.70 | 5.0000e-05 | | 36 | 640 | 01:17:28 | 0.3401 | 51.28% | 0.78 | 5.0000e-05 | | 37 | 650 | 01:18:40 | 0.3123 | 51.43% | 0.73 | 5.0000e-05 | | 37 | 660 | 01:19:58 | 0.2954 | 51.27% | 0.71 | 5.0000e-05 | | 38 | 670 | 01:21:12 | 0.2792 | 52.17% | 0.68 | 5.0000e-05 | | 38 | 680 | 01:22:29 | 0.3225 | 51.36% | 0.76 | 5.0000e-05 | | 39 | 690 | 01:23:41 | 0.2867 | 52.63% | 0.69 | 5.0000e-05 | | 39 | 700 | 01:24:56 | 0.3067 | 51.52% | 0.73 | 5.0000e-05 | | 40 | 710 | 01:26:13 | 0.2718 | 51.84% | 0.66 | 5.0000e-05 | | 40 | 720 | 01:27:25 | 0.2888 | 52.03% | 0.70 | 5.0000e-05 | | 41 | 730 | 01:28:42 | 0.2854 | 51.96% | 0.69 | 5.0000e-05 | | 42 | 740 | 01:29:57 | 0.2744 | 51.18% | 0.67 | 5.0000e-05 | | 42 | 750 | 01:31:10 | 0.2582 | 51.90% | 0.64 | 5.0000e-05 | | 43 | 760 | 01:32:25 | 0.2586 | 52.48% | 0.64 | 5.0000e-05 | | 43 | 770 | 01:33:35 | 0.2632 | 51.47% | 0.65 | 5.0000e-05 | | 44 | 780 | 01:34:46 | 0.2532 | 51.58% | 0.63 | 5.0000e-05 | | 44 | 790 | 01:36:07 | 0.2889 | 52.19% | 0.69 | 5.0000e-05 | | 45 | 800 | 01:37:20 | 0.2551 | 52.35% | 0.63 | 5.0000e-05 | | 45 | 810 | 01:38:27 | 0.2863 | 51.29% | 0.69 | 5.0000e-05 | | 46 | 820 | 01:39:43 | 0.2700 | 52.58% | 0.67 | 5.0000e-05 | | 47 | 830 | 01:40:54 | 0.3234 | 51.96% | 0.76 | 5.0000e-05 | | 47 | 840 | 01:42:08 | 0.2819 | 52.88% | 0.69 | 5.0000e-05 | | 48 | 850 | 01:43:23 | 0.2743 | 52.80% | 0.67 | 5.0000e-05 | | 48 | 860 | 01:44:38 | 0.2365 | 52.21% | 0.60 | 5.0000e-05 | | 49 | 870 | 01:45:58 | 0.2271 | 52.23% | 0.58 | 5.0000e-05 | | 49 | 880 | 01:47:21 | 0.3006 | 52.23% | 0.72 | 5.0000e-05 | | 50 | 890 | 01:48:35 | 0.2494 | 52.32% | 0.63 | 5.0000e-05 | | 50 | 900 | 01:49:55 | 0.2383 | 53.51% | 0.61 | 5.0000e-05 | |=======================================================================================================| Detector training complete. *************************************************************************
Смотрите свойства детектора.
detector
detector = ssdObjectDetector with properties: ModelName: 'vehicle' Network: [1×1 DAGNetwork] ClassNames: {'vehicle' 'Background'} AnchorBoxes: {[5×2 double] [5×2 double]}
Можно проверить учебную точность путем осмотра учебной потери для каждой итерации.
figure plot(info.TrainingLoss) grid on xlabel('Number of Iterations') ylabel('Training Loss for Each Iteration')
Протестируйте детектор SSD на тестовом изображении.
img = imread('ssdTestDetect.png');
Запустите детектор объектов SSD на изображении для обнаружения транспортного средства.
[bboxes,scores] = detect(detector,img);
Отобразите результаты обнаружения.
if(~isempty(bboxes)) img = insertObjectAnnotation(img,'rectangle',bboxes,scores); end figure imshow(img)
trainingData
— Помеченные изображения основной истиныПомеченная основная истина отображает в виде datastore или таблицы.
Если вы используете datastore, ваши данные должны быть настроены так, чтобы, вызвав datastore с read
и readall
функции возвращают массив ячеек или таблицу с двумя или тремя столбцами. Когда выход содержит два столбца, первый столбец должен содержать ограничительные рамки, и второй столбец должен содержать метки, {boxes, labels}. Когда выход содержит три столбца, второй столбец должен содержать ограничительные рамки, и третий столбец должен содержать метки. В этом случае первый столбец может содержать любой тип данных. Например, первый столбец может содержать данные об облаке точек или изображения.
data | boxes | labels |
---|---|---|
Первый столбец может содержать данные, такие как данные об облаке точек или изображения. | Второй столбец должен быть массивом ячеек, который содержит M-by-5 матрицы ограничительных рамок формы [центр x, центр y, width, height, yaw]. Векторы представляют местоположение и размер ограничительных рамок для объектов в каждом изображении. | Третий столбец должен быть массивом ячеек, который содержит M-by-1 категориальные векторы, содержащие имена класса объекта. Все категориальные данные, возвращенные datastore, должны содержать те же категории. |
Для получения дополнительной информации смотрите Хранилища данных для Глубокого обучения (Deep Learning Toolbox).
lgraph
— График слоевLayerGraph
объектГрафик слоев в виде LayerGraph
объект. График слоев содержит архитектуру сети мультиполя SSD. Можно создать эту сеть при помощи ssdLayers
функционируйте или создайте пользовательскую сеть. Для получения дополнительной информации смотрите Начало работы с Обнаружением Мультиполя SSD.
detector
— Ранее обученный детектор объектов SSDssdObjectDetector
объект Ранее обученный детектор объектов SSD в виде ssdObjectDetector
объект. Используйте этот синтаксис, чтобы продолжить обучение детектор с дополнительными обучающими данными или выполнить больше учебных итераций, чтобы улучшить точность детектора.
options
— Опции обученияTrainingOptionsSGDM
возразите | TrainingOptionsRMSProp
возразите | TrainingOptionsADAM
объектОпции обучения в виде TrainingOptionsSGDM
, TrainingOptionsRMSProp
, или TrainingOptionsADAM
объект, возвращенный trainingOptions
(Deep Learning Toolbox) функция. Чтобы задать имя решателя и другие опции для сетевого обучения, используйте trainingOptions
(Deep Learning Toolbox) функция.
Примечание
Функция trainSSDObjectDetector не поддерживает эти опции обучения:
Входные параметры datastore не поддерживаются, когда вы устанавливаете DispatchInBackground
опция обучения к true
.
checkpoint
— Сохраненная контрольная точка детектораssdObjectDetector
объектСохраненная контрольная точка детектора в виде ssdObjectDetector
объект. Чтобы сохранить детектор после каждой эпохи, установите 'CheckpointPath'
аргумент значения имени при использовании trainingOptions
функция. Рекомендуется сохранять контрольную точку после каждой эпохи, потому что сетевое обучение может занять несколько часов.
Чтобы загрузить контрольную точку для ранее обученного детектора, загрузите MAT-файл из пути контрольной точки. Например, если CheckpointPath
свойство объекта задано options
'/checkpath'
, можно загрузить MAT-файл контрольной точки при помощи этого кода.
data = load('/checkpath/ssd_checkpoint__216__2018_11_16__13_34_30.mat');
checkpoint = data.detector;
Имя MAT-файла включает номер итерации и метку времени того, когда контрольная точка детектора была сохранена. Детектор сохранен в detector
переменная файла. Передайте этот файл обратно в функцию trainSSDObjectDetector:
ssdDetector = trainSSDObjectDetector(trainingData,checkpoint,options);
trainedDetector
— Обученный детектор мультиобъекта поля SSDssdObjectDetector
объектОбученный детектор объектов SSD, возвращенный как ssdObjectDetector
объект. Можно обучить детектор объектов SSD обнаруживать несколько классов объектов.
info
— Информация о процессе обученияИнформация о процессе обучения, возвращенная как массив структур с восемью полями. Каждое поле соответствует этапу обучения.
TrainingLoss
— Учебная потеря в каждой итерации является среднеквадратической ошибкой (MSE), вычисленной как сумма ошибки локализации, потеря доверия и потеря классификации. Для получения дополнительной информации об учебной функции потерь, смотрите Учебную Потерю.
TrainingAccuracy
— Точность набора обучающих данных в каждой итерации.
TrainingRMSE
— Учебная среднеквадратическая ошибка (RMSE) является RMSE, вычисленным от учебной потери в каждой итерации.
BaseLearnRate
— Скорость обучения в каждой итерации.
ValidationLoss
— Потеря валидации в каждой итерации.
ValidationAccuracy
— Точность валидации в каждой итерации.
ValidationRMSE
— Валидация RMSE в каждой итерации.
FinalValidationLoss
— Итоговая потеря валидации в конце обучения.
FinalValidationRMSE
— Итоговая валидация RMSE в конце обучения.
Каждое поле является числовым вектором с одним элементом на учебную итерацию. Значения, которые не были вычислены в определенной итерации, присвоены как NaN
. Struct содержит ValidationLoss
, ValidationAccuracy
, ValidationRMSE
, FinalValidationLoss
, и FinalValidationRMSE
поля только, когда options
задает данные о валидации.
[1] В. Лю, Е. Ангуелов, Д. Эрхэн, К. Сзеджеди, С. Рид, C.Fu и А.К. Берг. "SSD: один выстрел детектор MultiBox". Европейская конференция по компьютерному зрению (ECCV), Springer Verlag, 2016
objectDetectorTrainingData
| ssdLayers
| trainingOptions
(Deep Learning Toolbox)У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.