目录
0. 写在前面
本文直接上干货,不介绍理论,想了解理论的可以移步了。
如果你对理论不太熟悉,但是又想看看效果或者只要功能,跟着我的步骤做,就能看到识别效果了。因为我也对理论了解不多。(站在巨人的肩膀上😁)
matlab版本是2021b,用的是matlab的deepNetworkDesigner。fruits-360数据集下载链接放最后了。
1. fruits-360数据集介绍
打开fruits-360的文件夹如图1所示,papers是大牛的论文,可以看看,但是大牛是用的python做的。Training放的是训练集,Test放的是验证集,test-multiple_fruits也是更复杂的验证集。其中图片的大小都是100*100*3(长×宽×高)。
在训练集和验证集中放的是不同种类的水果和蔬菜。每一种水果或蔬菜占一个文件夹,文件夹的文件名就是标签,一共有131种。(验证集,训练集,标签自己百度)。如图2所示, 例如Apple Braebum文件夹中放的就全是这一种苹果的图片,Apple Braebum就是一个标签。
2. 训练步骤与结果
步骤① 在matlab的命令行输入deepNetworkDesigner并回车
>> deepNetworkDesigner
步骤② 打开如图3所示的深度网络设计器,选择如图4所示的预训练网络中的 SqueezeNet。
(也可以选择自己搭建网络,方法类似,自己研究去)
步骤③ 打开的SqueezeNet如图5所示,该网络一共有68层。
步骤④ ctrl+滚轮放大网络,按图6中的步骤,替换掉输入层。因为fruits-360的图片大小都是100*100*3,但是SqueezeNet的图片输入大小是227*227*3。替换后的网络如图7所示。
步骤⑤ 按图8中的步骤,替换输出层。原网络的输出层输出种类是1000,fruits-360只有131种,替换后如图9所示。
步骤⑥ 按图10中的步骤,替换倒数第一个卷积层conv10,替换后如图11所示。
步骤⑦ 按如下步骤导入训练数据和验证数据
导入后的训练集如图12所示,验证集如图13所示。
步骤⑧ 训练(使用默认参数)
步骤⑨ 训练结果,训练会花很长时间,剩下就是等。如图14所示。训练后网络对水果的识别正确率是 98.25%
步骤⑩ 导出。训练好后的网络可以导出到工作区,训练代码是mlx实时文件。(注意保存训练好的网络)
3. 测试
测试代码如下,测试结果图15-图19所示。因为fruits-360中水果分类特别细,所以出来的结果有的很离谱。
load('trainedNet.mat') %加载训练好的网络
I = imread("C:\Users\1\Desktop\001.jpg"); %任意水果图片
I = imresize(I, [227 227]);
[YPred,probs] = classify(trainedNetwork_1,I); %测试
imshow(I)
label = YPred;
title(string(label) + ", " + num2str(100*max(probs),3) + "%");
4. 写在最后
① 虽然全是实操,但是想要理解还得结合理论看
② 网络的选择多种多样,可以自己尝试设计网络
③ 步骤⑦中的训练参数也可以自己换着试
④ 步骤⑧的训练选项也可以调
⑤ 测试结果可以看出,部分水果识别结果还是很好的,但是有一些拍摄的水果不太好,甚至出现错误,如图18的苹果识别出来是梨。对于特别相似的如苹果和樱桃,在100*100*3的图片中是很难区分的。
⑥ 对于我们身边的常见水果可能不会分的这么细,fruits-360的苹果就有13种。可以自己从数据集中根据需要选择几种水果来做实验。但是训练集和验证集中的种类应该保持相同。
5. fruits-360数据集
https://pan.baidu.com/s/16u2Q2P4b6aITkZE7k98VDw
提取码:HXLX (好学力行😬)
测试的五张图片也放下面: