主要内容

火车YOLO v2意思网络车辆检测

车辆检测的训练数据加载到工作区。

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

训练样本存储指定的目录。添加完整路径文件名在训练数据。

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

随机洗牌数据进行训练。

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

从表中创建一个imageDatastore使用文件。

imd = imageDatastore (trainingData.imageFilename);

使用标签创建一个boxLabelDatastore从表中列。

建筑物= boxLabelDatastore (trainingData(:, 2:结束));

结合数据存储。

ds =结合(imd,建筑物);

加载一个preinitialized YOLO v2意思对象检测网络。

网=负载(“yolov2VehicleDetector.mat”);lgraph = net.lgraph
lgraph = LayerGraph属性:层:[25×1 nnet.cnn.layer.Layer]连接:[24×2表]InputNames:{“输入”}OutputNames: {“yolov2OutputLayer”}

检查层YOLO v2意思网络及其属性。您还可以创建YOLO v2意思网络按照给出的步骤创建YOLO v2意思对象检测网络

lgraph.Layers
ans x1 = 25层与层:数组输入的图像输入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 0 0 0]64 3 x3的conv_3卷积运算与步幅[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“yolov2Batch1”批量标准化批量标准化19 ' yolov2Relu1 ReLU ReLU 20 yolov2Conv2卷积128 3 x3的隆起与步幅[1]和填充‘相同’21“yolov2Batch2”批量标准化批量标准化22的yolov2Relu2 ReLU ReLU 23 yolov2ClassConv的卷积24 1 x1旋转步[1]和填充[0 0 0 0]24 yolov2Transform YOLO v2变换层意思。4锚YOLO v2意思转换层。25的yolov2OutputLayer YOLO v2输出YOLO v2意思意思输出4锚。

配置网络培训选项。

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

火车YOLO v2意思网络。

[探测器,信息]= trainYOLOv2ObjectDetector (ds、lgraph选项);
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *培训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属性:ModelName:“车辆”网络:[1×1 DAGNetwork] TrainingImageSize: 128年[128]AnchorBoxes:[4×2双]一会:车辆

您可以验证训练精度通过检查每个迭代训练损失。

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

读一个测试图像到工作区中。

img = imread (“detectcars.png”);

运行训练YOLO v2意思对象探测器测试图像的车辆检测。

[bboxes,分数]=检测(探测器,img);

显示检测结果。

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