失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 【车辆检测】基于matlab yolo v2车辆检测识别【含Matlab源码 581期】

【车辆检测】基于matlab yolo v2车辆检测识别【含Matlab源码 581期】

时间:2020-02-29 01:36:45

相关推荐

【车辆检测】基于matlab yolo v2车辆检测识别【含Matlab源码 581期】

一、简介

1 前言

Okay……最近事情比较多,博客也发的少,所以决定搞一次大新闻。本此的博客详细记录了我使用Matlab进行车辆区域检测(R-CNN)与车型识别(AlexNet)的过程。并且内包含了训练数据集、测试数据集以及源码。

训练数据集是使用的斯坦福大学的一个车型数据库,内含196种不同的车型。写到这里我真的很想吐槽一下这个数据库里面的奥迪车系:很多黑白的图片啊喂!!! 做训练的时候AlexNet数据输入维度是3啊喂!!!害的我自己找了很多图片啊!!!….

2 环境

测试环境:

硬件:

Intel i5-4590

GTX 980

软件:

Matlab Rb(只有这个版本才实现了RCNN…)

3 数据集的下载

嗯。一上来就发福利:

原始数据集,内含train/test:/s/1miTn9jy

我规整后的数据集,将图片变换为227*227,并且对少量黑白图片进行了替换:/s/1pKIbQiB

接下来的这个是每一张图片所对应的车型标注文件:/s/1nuOR7PR

在Matlab中下载AlexNet

AlexNet是ImageNet大赛的冠军。它一共有8层,其中了5个卷积层,2层全连接和一层分类,如果使用其对一张图片进行前向传播,那么最后输出的这张图片属于1000种物体中哪一个的概率。

我这里对AlexNet在Matlab中进行了定义,这是我的代码和网络结构:

二、部分源代码

clearclcdoTraining = true; % 是否进行训练% 解压数据% data = load('./data/carDatasetGroundTruth.mat');% vehicleDataset = data.carDataset; % table型,包含文件路径和groundTruthdata = load('./data/vehicleDatasetGroundTruth.mat');vehicleDataset = data.vehicleDataset; % table型,包含文件路径和groundTruth% 添加绝对路径至vehicleDataset中vehicleDataset.imageFilename = fullfile([pwd, '/data/'],vehicleDataset.imageFilename);% 显示数据集中的一个图像,以了解它包含的图像的类型。vehicleDataset(1:4,:) % 显示部分数据情况% 将数据集分成两部分:一个是用于训练检测器的训练集,一个是用于评估检测器的测试集。% 选择 70% 的数据进行训练,其余数据用于评估。rng(0); % 控制随机数生成shuffledIndices = randperm(height(vehicleDataset));idx = floor(0.7 * length(shuffledIndices) );trainingDataTbl = vehicleDataset(shuffledIndices(1:idx),:);testDataTbl = vehicleDataset(shuffledIndices(idx+1:end),:);% 保存数据和标签imdsTrain = imageDatastore(trainingDataTbl{:,'imageFilename'}); % 路径bldsTrain = boxLabelDatastore(trainingDataTbl(:,'vehicle')); % 真实框和类别imdsTest = imageDatastore(testDataTbl{:,'imageFilename'});bldsTest = boxLabelDatastore(testDataTbl(:,'vehicle'));% 整理训练测试集trainingData = combine(imdsTrain,bldsTrain); % 联合文件路径和真实框testData = combine(imdsTest,bldsTest);% 显示数据data = read(trainingData); % data包括图片数据、真实框坐标、类别I = data{1};bbox = data{2};annotatedImage = insertShape(I,'Rectangle',bbox); % 在数据矩阵中标出真实框annotatedImage = imresize(annotatedImage,2);figureimshow(annotatedImage) % 显示图像% 创建yolo网络inputSize = [224 224 3];numClasses = width(vehicleDataset)-1; % 通过table的列数计算类别数% 用于评估锚框个数trainingDataForEstimation = transform(trainingData,@(data)preprocessData(data,inputSize));numAnchors = 7;[anchorBoxes, meanIoU] = estimateAnchorBoxes(trainingDataForEstimation, numAnchors)% 特征提取层采用resnet50featureExtractionNetwork = resnet50;featureLayer = 'activation_40_relu';% 设置yolo网络lgraph = yolov2Layers(inputSize,numClasses,anchorBoxes,featureExtractionNetwork,featureLayer);% 进行数据增强augmentedTrainingData = transform(trainingData,@augmentData);% 可视化增强后的图片augmentedData = cell(4,1);for k = 1:4data = read(augmentedTrainingData);augmentedData{k} = insertShape(data{1},'Rectangle',data{2});reset(augmentedTrainingData);endfiguremontage(augmentedData,'BorderSize',10)% 对增强数据进行预处理preprocessedTrainingData = transform(augmentedTrainingData,@(data)preprocessData(data,inputSize));data = read(preprocessedTrainingData);% 显示一下I = data{1};bbox = data{2};annotatedImage = insertShape(I,'Rectangle',bbox);annotatedImage = imresize(annotatedImage,2);figureimshow(annotatedImage)% 训练参数options = trainingOptions('sgdm', ...'MiniBatchSize', 16, ....'InitialLearnRate',1e-3, ...'MaxEpochs',20,...'CheckpointPath', tempdir, ...'Shuffle','never');if doTraining % 训练YOLOv2检测器[detector,info] = trainYOLOv2ObjectDetector(preprocessedTrainingData,lgraph,options);else% 载入预训练模型pretrained = load('yolov2_mytrain.mat');detector = pretrained.detector;end% 测试训练好的模型并显示I = imread(testDataTbl.imageFilename{4});I = imresize(I,inputSize(1:2));[bboxes,scores] = detect(detector,I);I = insertObjectAnnotation(I,'rectangle',bboxes,scores);figureimshow(I)% 预处理测试集preprocessedTestData = transform(testData,@(data)preprocessData(data,inputSize));% 对测试集数据进行测试detectionResults = detect(detector, preprocessedTestData);% 评估准确率[ap,recall,precision] = evaluateDetectionPrecision(detectionResults, preprocessedTestData);figureplot(recall,precision)xlabel('Recall')ylabel('Precision')grid ontitle(sprintf('Average Precision = %.2f',ap))

三、运行结果

四、matlab版本及参考文献

1 matlab版本

a

2 参考文献

[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,.

[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,.

[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,.

[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,.

如果觉得《【车辆检测】基于matlab yolo v2车辆检测识别【含Matlab源码 581期】》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。