当前位置:网站首页>【MATLAB项目实战】基于CNN_SVM的图像花卉识别
【MATLAB项目实战】基于CNN_SVM的图像花卉识别
2022-08-03 14:00:00 【大桃子技术】
数据集:5类花卉
简单来说 就是CNN做特征提取 SVM做分类
训练集:测试集=8:2
代码中可以更换不同的CNN网络:AlexNet VGG16 VGG19 ResNet50
clc;
clear all;
%% 划分数据集
pwd='C:\Users\yuanyuan\Desktop\CNN_SVM\data'; % 路径
currentPath = pwd; % 获得当前的工作目录
fprintf('加载数据...');
t = tic;
imds = imageDatastore(fullfile(pwd),'IncludeSubfolders',true,'LabelSource','foldernames'); % 载入所有图片集合
imds.ReadFcn = @readAndPreproc; % 和 alexnet 里输入图片大小一致 【227*227*3】
numImages = length(imds.Files); %图片总的张数
[imdsTrain,imdsTest] = splitEachLabel(imds, 0.8,'randomized');%每个类都按比例随机拆分数据集,训练集和测试集8:2,
YTrain=double(imdsTrain.Labels);
fprintf('完成 %.02f 秒\n', toc(t));
%% 加载预训练网络 (CNN)
convnet = alexnet();
%% 层
convnet.Layers
tbl = countEachLabel(imdsTrain)
%% 提取特征 fc7 layer(vgg16,vgg19 fLayer is fc8)
fLayer = 'fc7'; %AlexNet
%fLayer = 'fc8'; %VGG16 VGG19
% fLayer = 'fc1000'; % resnet50
trainingFeatures = activations(convnet, imdsTrain, fLayer, ...
'MiniBatchSize', 32, 'OutputAs', 'rows');
%% SVM训练
d = fitcecoc(trainingFeatures, YTrain); % 多分类svm用fitcecoc
%% 测试集相同处理 进行预测
testFeatures = activations(convnet, imdsTest, fLayer, ...
'MiniBatchSize', 32, 'OutputAs', 'columns');
YPred = predict(d, testFeatures');
YTest=double(imdsTest.Labels);
accuracy = sum(YPred == YTest)/numel(YTest)
figure
confusionchart(YPred,YTest)
结果:
效果还不错 比CNN跑得快还精准
代码(包括数据集):代码(包括数据集):
边栏推荐
猜你喜欢
随机推荐
Petri网-2、有向网
leetcode 448. Find All Numbers Disappeared in an Array 找到所有数组中消失的数字(简单)
如何合理安排一天,做到高效备考?
Redis学习
豪威集团发布新款5000万像素图像传感器OV50E
位级运算之计算整数位级表示奇偶性
node项目开发踩坑(一)
网络通信的过程
Insertion or Heap Sort
飞桨开源社区季度报告来啦,你想知道的都在这里
PMP每日一练 | 考试不迷路-8.3(包含敏捷+多选)
为什么手动启动GBase 8c数据库中GTM节点
优思学院|2022年获美质协ASQ和ILSSI奖项的《精益六西格玛的十条戒律》
淘特:引擎还是包袱?
连亏四个月,赚不回电费,预制菜经销商恐成“韭菜”?
基于ModelArts的动漫头像自动生成丨【华为云至简致远】
英文邮件总结
《深度学习》-学习笔记-1-机器学习基础
How to connect a VMware virtual machine to the network "recommended collection"
15年软件架构师经验总结:在ML领域,初学者踩过的5个坑