主要内容

训练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 = combine(imds, blds);

加载一个预初始化的YOLO v2对象检测网络。

网=负载(“yolov2VehicleDetector.mat”);lgraph = net.lgraph
lgraph =具有属性的LayerGraph: Layers: [25×1 nnet.cnn.layer.Layer] Connections: [24×2 table] InputNames: {'input'} OutputNames: {'yolov2OutputLayer'}

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

lgraph。层
带有图层的图层数组: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“相同”'yolov2Batch1'批量归一化批量归一化19 'yolov2Relu1' ReLU ReLU 20 'yolov2Conv2' Convolution 128 3x3 convolutions with stride [1 1] and padding 'same' 21 'yolov2Batch2' Batch Normalization批量归一化22 'yolov2Relu2' ReLU ReLU 23 'yolov2ClassConv' Convolution 24 1x1 convolutions with stride [1 1] and padding [0 0 0 0] 24 'yolov2Transform' YOLO v2Transform Layer。YOLO v2转换层与4锚。25 'yolov2OutputLayer' YOLO v2Output 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  | |========================================================================================| 检测器训练完成。*************************************************************************

检查探测器的性能。

探测器
网络:[1×1 DAGNetwork] TrainingImageSize: [128 128] AnchorBoxes: [4×2 double] ClassNames: vehicle

可以通过检查每次迭代的训练损失来验证训练的准确性。

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

将测试映像读入工作空间。

img = imread (“detectcars.png”);

在测试图像上运行训练好的YOLO v2对象检测器,用于车辆检测。

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

显示检测结果。

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

Baidu
map