一、简介

1 前言
Okay……最近事情比较多,博客也发的少,所以决定搞一次大新闻。本此的博客详细记录了我使用Matlab进行车辆区域检测(R-CNN)与车型识别(AlexNet)的过程。并且内包含了训练数据集、测试数据集以及源码。
训练数据集是使用的斯坦福大学的一个车型数据库,内含196种不同的车型。写到这里我真的很想吐槽一下这个数据库里面的奥迪车系:很多黑白的图片啊喂!!! 做训练的时候AlexNet数据输入维度是3啊喂!!!害的我自己找了很多图片啊!!!….

2 环境
测试环境:
硬件:
Intel i5-4590
GTX 980
软件:
Matlab R2016b(只有这个版本才实现了RCNN…)

3 数据集的下载
嗯。一上来就发福利:
原始数据集,内含train/test:http://pan.baidu.com/s/1miTn9jy
我规整后的数据集,将图片变换为227*227,并且对少量黑白图片进行了替换:http://pan.baidu.com/s/1pKIbQiB
接下来的这个是每一张图片所对应的车型标注文件:http://pan.baidu.com/s/1nuOR7PR

在Matlab中下载AlexNet
AlexNet是2012年ImageNet大赛的冠军。它一共有8层,其中了5个卷积层,2层全连接和一层分类,如果使用其对一张图片进行前向传播,那么最后输出的这张图片属于1000种物体中哪一个的概率。
我这里对AlexNet在Matlab中进行了定义,这是我的代码和网络结构:

二、部分源代码

clear
clcdoTraining = true; % 是否进行训练% 解压数据
% data = load('./data/carDatasetGroundTruth.mat');
% vehicleDataset = data.carDataset; % table型,包含文件路径和groundTruth
data = 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);
figure
imshow(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)% 特征提取层采用resnet50
featureExtractionNetwork = 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);
end
figure
montage(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);
figure
imshow(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);
figure
imshow(I)% 预处理测试集
preprocessedTestData = transform(testData,@(data)preprocessData(data,inputSize));
% 对测试集数据进行测试
detectionResults = detect(detector, preprocessedTestData);
% 评估准确率
[ap,recall,precision] = evaluateDetectionPrecision(detectionResults, preprocessedTestData);figure
plot(recall,precision)
xlabel('Recall')
ylabel('Precision')
grid on
title(sprintf('Average Precision = %.2f',ap))

三、运行结果


四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.

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

  1. 【钟表识别】基于计算机视觉实现钟表时间识别含Matlab源码

    1 简介 基于计算机视觉实现钟表时间识别含Matlab源码​ 2 部分代码 function [time_clock]= read(filepath) I = imread(filepath); [e ...

  2. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  3. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  4. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  5. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  6. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  7. 【Matlab人脸识别】KL变换人脸识别【含GUI源码 859期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]KL变换人脸识别[含GUI源码 859期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  8. 【Matlab指纹识别】指纹识别门禁系统【含GUI源码 1692期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别门禁系统[含GUI源码 1692期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继 ...

  9. 【Matlab指纹识别】指纹识别匹配门禁系统【含GUI源码 587期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别匹配门禁系统[含GUI源码 587期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  10. 【Matlab水果识别】苹果质量检测及分级系统(带面板)【含GUI源码 1613期】

    一.代码运行视频(哔哩哔哩) [Matlab水果识别]苹果质量检测及分级系统(带面板)[含GUI源码 1613期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

最新文章

  1. ios 代码设置控件宽高比_用宽高比调整UIImage的大小?
  2. 2020年全球工业机器人行业市场现状及竞争格局分析
  3. 算法优化:最大m个子段和,问题规模从1个子段和扩展到m个,动态规划
  4. TP框架表单验证 【包含ajax方法】
  5. 安装安全类软件进行了android签名漏洞修补,魅族MX3怎么升级固件体验最新比较稳定的版本...
  6. java启动密码,java - 用户验证密码后如何启动java applet程序? - SO中文参考 - www.soinside.com...
  7. AI技术的“践行者” — 云测试成为企业降本增效利器
  8. ios模拟器装ipa包_uni-app 打包ios上架app store流程
  9. c语言玫瑰花图形程序,一个玫瑰花的程序
  10. [server]阿里云服务器远程文件传输的解决方案
  11. 【解题报告】图论基础练习(一)
  12. VTK图像处理之vtkImageReslice
  13. Unity Activator反射
  14. DELPHI盒子FTP登录地址及用户密码
  15. vue + element 与 vue element admin 中 tab标签视图 页拖拽(拖动) sortablejs 插件案例
  16. 什么是客户关系管理CRM?
  17. JS中如何让某个动作延迟几秒执行(☆)
  18. WOJ1017-Billiard Ball
  19. java显示图片缩略图_java中生成图片的缩略图
  20. Exchange2016 Skype for business 集成之一配置合作伙伴应用程序

热门文章

  1. 学习Java随记之swing编程(2)
  2. Python执行Linux系统命令方法
  3. IDEA里面添加lombok插件,编写简略风格Java代码(转)
  4. Django之验证码的生成和使用
  5. media query学习笔记
  6. 函数指针的应用学习Demo
  7. [译]GLUT教程 - 整合代码2
  8. 标准C++ 与 VC++ 区别集锦(待续)
  9. latex 引用文献cite, citet,citep的区别
  10. WinEdt编译重新生成PDF以及找到模板tex对应的论文树形结构