主要内容

車両検出のためのYOLO v2ネットワ,クの学習

車両検出用の学習デ,タをワ,クスペ,スに読み込みます。

数据=负载(“vehicleTrainingData.mat”);trainingData = data.vehicleTrainingData;

学習サンプルが保存されているディレクトリを指定します。ファ▪▪ル名の絶対パスを学習デ▪▪タに追加します。

dataDir = fullfile(toolboxdir(“愿景”),“visiondata”);trainingData。imageFilename = fullfile(dataDir,trainingData.imageFilename);

学習のためにデ,タをランダムにシャッフルします。

rng (0);shuffledIdx = randperm(高度(trainingData));trainingData = trainingData(shuffledIdx,:);

tableのファaapl . exeルを使用してimageDatastoreを作成します。

imds = imageDatastore(trainingData.imageFilename);

tableのラベル列を使用してboxLabelDatastoreを作成します。

blds = boxLabelDatastore(trainingData(:,2:end));

デ,タストアを統合します。

Ds = combine(imds, blds);

事前に初期化されたYOLO v2オブジェクト検出ネットワ,クを読み込みます。

净=负荷(“yolov2VehicleDetector.mat”);Lgraph = net.lgraph
lgraph = LayerGraph with properties: Layers: [25×1 nnet.cnn.layer.Layer] Connections: [24×2 table] InputNames: {'input'} OutputNames: {'yolov2OutputLayer'}

YOLO v2ネットワ,クの層とそのプロパティを調べます。YOLO v2オブジェクト検出ネットワ,クの作成の手順に従ってYOLO v2ネットワ,クを作成することもできます。

lgraph。层
ans = 25x1带有图层的图层数组:1的输入图像输入128 x128x3图片2的conv_1卷积16 3 x3的隆起与步幅[1]和填充[1 1 1 1]3“BN1”批量标准化批量标准化4的relu_1 ReLU ReLU 5“maxpool1”马克斯池2 x2马克斯池步(2 - 2)和填充[0 0 0 0]6‘conv_2卷积32 3 x3的隆起与步幅[1]和填充[1 1 1 1]7“BN2”批量标准化批量标准化8 ' relu_2 ReLU ReLU 9“maxpool2”马克斯池2 x2马克斯池步(2 - 2)和填充[0 00 0] 10 conv_3卷积64 3 x3的隆起与步幅[1]和填充[1 1 1 1]11“BN3”批量标准化批量标准化12的relu_3 ReLU ReLU 13“maxpool3”马克斯池2 x2马克斯池步(2 - 2)和填充[0 0 0 0]14 conv_4卷积128 3 x3的隆起与步幅[1]和填充[1 1 1 1]15“BN4”批量标准化批量标准化16的relu_4 ReLU ReLU 17 yolov2Conv1卷积128 3 x3的隆起与步幅[1]和填充18“相同”'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 0] 24 'yolov2Transform' YOLO v2Transform Layer。YOLO v2转换层与4锚。25 'yolov2OutputLayer' YOLO v2输出YOLO v2输出4个锚。

ネットワ,ク学習オプションを構成します。

选项= trainingOptions(“个”...“InitialLearnRate”, 0.001,...“详细”,真的,...“MiniBatchSize”, 16岁,...“MaxEpochs”30岁的...“洗牌”“永远”...“VerboseFrequency”30岁的...“CheckpointPath”, tempdir);

YOLO v2ネットワ,クに学習させます。

[detector,info] = trainYOLOv2ObjectDetector(ds,lgraph,options);
************************************************************************* 培训YOLO v2意思对象探测器以下对象类:*车辆培训单CPU。|========================================================================================| | 时代| |迭代时间| Mini-batch | Mini-batch |基地学习  | | | | ( hh: mm: ss) | RMSE | |率损失  | |========================================================================================| | 1 | 1 | 00:00:01 | 7.13 | 50.8 | 0.0010 | | 2 | 30 | 00:00:14 | 1.35 | 1.8 | 0.0010 | | 4 | 60 | 00:00:27 | 1.13 | 1.3 | 0.0010 | | 90 | | 00:00:39 | 0.64 | 0.4 | 0.0010 | | 120 | | 00:00:51 |0.65 | 0.4 | 0.0010 | | 150 | | 00:01:04 | 0.72 | 0.5 | 0.0010 | | 180 | | 00:01:16 | 0.52 | 0.3 | 0.0010 | | 210 | | 00:01:28 | 0.45 | 0.2 | 0.0010 | | 240 | | 00:01:41 | 0.61 | 0.4 | 0.0010 | | 270 | | 00:01:52 | 0.43 | 0.2 | 0.0010 | | 300 | | 00:02:05 | 0.42 | 0.2 | 0.0010 | | 19 | 330 | 00:02:17 | 0.52 | 0.3 | 0.0010 | | 360 | | 00:02:29 | 0.43 | 0.2 | 0.0010 | | 22 | 390 | 00:02:42 | 0.43 | 0.2 | 0.0010 | | 24 | 420 | 00:02:54 | 0.59 | 0.4 | 0.0010 | | 25 | 450 |00:03:06 | 0.61 | 0.4 | 0.0010 | | 480 | | 27 00:03:18 | 0.65 | 0.4 | 0.0010 | | 510 | | 29日00:03:31 | 0.48 | 0.2 | 0.0010 | | 540 | | 00:03:42 | 0.34 | 0.1 | 0.0010  | |========================================================================================| 检测器训练完成。*************************************************************************

検出器のプロパティを調べます。

探测器
检测器= yolov2ObjectDetector with properties: ModelName: 'vehicle'网络:[1×1 DAGNetwork] TrainingImageSize:[128 128]锚箱:[4×2 double] ClassNames:车辆

反復ごとの学習損失を調べることで,学習精度を確認できます。

图表(info.TrainingLoss)网格包含(“迭代次数”) ylabel (“每次迭代的训练损失”

テストメジをワクスペスに読み取ります。

Img = imread(“detectcars.png”);

学習済みのYOLO v2意思オブジェクト検出器をテストイメージに対して実行し,車両検出を行います。

[bboxes,scores] = detect(检测器,img);

検出結果を表示します。

如果(~isempty(bboxes)) img = insertObjectAnnotation(img,“矩形”bboxes,分数);结束图imshow (img)