主要内容

列车YOLO v2车辆检测网络

将车辆检测的训练数据加载到工作空间。

data =负载(“vehicleTrainingData.mat”);培训数据=数据。车辆培训数据;

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

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

随机洗牌数据进行训练。

rng(0);shuffledIdx=randperm(高度(训练数据));培训数据=培训数据(shuffledIdx,:);

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

imds=图像数据存储(trainingData.imageFilename);

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

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

合并数据存储。

Ds = combine(imds, blds);

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

网=负载(“yolov2VehicleDetector.mat”); lgraph=net.lgraph
LGRAPHE=LayerGraph,属性:Layers:[25×1 nnet.cnn.layer.layer]连接:[24×2表格]输入名称:{'input'}输出名称:{'YOLOV2OUTPUTTALYER'}

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

lgraph。层
ans = 25x1 Layer array with layers: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 11 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个锚点变换图层。25 'yolov2OutputLayer' YOLO v2输出YOLO v2输出4个锚。

配置网络培训选项。

选项=培训选项(“个”...“InitialLearnRate”, 0.001,...“详细”,真的,...“MiniBatchSize”, 16岁,...“MaxEpochs”,30,...“洗牌”“永远”...“详细频率”,30,...“检查点路径”, tempdir);

培训YOLO v2网络。

[探测器,信息]= trainYOLOv2ObjectDetector (ds、lgraph选项);
*************************************************************************为以下对象类培训YOLO v2对象检测器:*单CPU车辆培训。|===============================================================================================================================================================================================================================================================================================================================================================================================================================================================历元|迭代|经过的时间|小批量|小批量|基础学习| | | | | |(hh:mm:ss)第二方的第二方的第二方的第二方的第二方的第二方的第二方的第二方的第二方的第二方的第二方的第第二方的第二方的第二方的第二方的第四方的第二方的第四方的第四方的第四方的第四方的第四方的第四方的第二方的第二方的第二方的第二方的第二方的第二方的第二方的第二方的第二方的第四方的第二方的第四方的第二方的第二方的第四方的第二方的第四方的第二方的第四方的第四方的第四方的第二方的第四方的第二方的第四方的第四方的第第四方的第四方的第二方的第四方的第四方的第四方的据据据据据据据据据据据据据据据据据据据|0.0010 | 4 | 60 | 00:00:27 | 1.13 | 1.3 | 0.0010 | 5 | 90 | 00:00:39 | 0.64 | 0.0010 | 7 | 120 | 00:00:51 | 0.65 1240.0010 | 9 |00:01:04 | 0.72 | 0.5 | 0.0010 | | 10 | 180 | 00:01:16 | 0.52 | 0.3 | 0.0010 | | 12 | 210 | 00:01:28 | 0.45 | 0.2 | 0.0010 | | 14 | 240 | 00:01:41 | 0.61 | 0.4 | 0.0010 | | 15 | 270 | 00:01:52 | 0.43 | 0.2 | 0.0010 | | 17 | 300 | 00:02:05 | 0.42 | 0.2 | 0.0010 | | 19 | 330 | 00:02:17 | 0.52 | 0.3 | 0.0010 | | 20 | 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 | | 27 | 480 | 00:03:18 | 0.65 | 0.4 | 0.0010 | | 29 | 510 | 00:03:31 | 0.48 | 0.2 | 0.0010 | | 30 | 540 | 00:03:42 | 0.34 | 0.1 | 0.0010 | |==================================================================================================================================================================探测器培训完成*************************************************************************

检查探测器的属性。

探测器
detector = yolov2ObjectDetector带有属性:ModelName: 'vehicle' Network: [1×1 DAGNetwork] TrainingImageSize: [128 128] AnchorBoxes: [4×2 double] ClassNames: vehicle

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

网格图绘制(info.TrainingLoss)在…上xlabel(“迭代次数”)伊拉贝尔(“每个迭代的训练损失”

将测试图像读入工作区。

img=imread('detectcars.png');

在测试图像上运行经过培训的YOLO v2物体检测器,进行车辆检测。

[b框,分数]=检测(检测器,img);

显示检测结果。

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