当前位置:网站首页>【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跑得快还精准
代码(包括数据集):代码(包括数据集):
边栏推荐
猜你喜欢
随机推荐
华云数据张华林:投身数字蓝海 绘就云上强国
国产替代风潮下,电子元器件B2B商城系统如何助力企业突围市场竞争
“杀猪盘”宰向环球影城
有哪些好用的IT资产管理平台?
MMA安装及使用优化
美国拟对华禁售128层以上NAND Flash制造设备
【深度学习中的激活函数的整理与使用总结】
[web penetration] detailed explanation of CSRF vulnerability
VMware 虚拟机如何连接网络「建议收藏」
go map转struct【mapstructure库】
设计思维 | 详看设计工作坊Workshop的11个关键技巧
GBase 8c数据库集群中,怎么替换节点呢?比如设置A节点为gtm,换到B节点上。
552个元宇宙App,70个搞社交,哪款真能交到朋友?
PMP每日一练 | 考试不迷路-8.3(包含敏捷+多选)
使用Jetty服务器和Axis2框架技术发布Webservice接口
Nanoprobes金脂质偶联物的相关应用
蚁剑加密 WebShell 过杀软
GDB调试CoreDump文件
网络通信的过程
第二讲 软件生命周期









