基于Matlab和fruits-360的水果识别

目录

0. 写在前面

1. fruits-360数据集介绍

2. 训练步骤与结果

3. 测试

4. 写在最后

5. fruits-360数据集


0. 写在前面

        本文直接上干货,不介绍理论,想了解理论的可以移步了。

        如果你对理论不太熟悉,但是又想看看效果或者只要功能,跟着我的步骤做,就能看到识别效果了。因为我也对理论了解不多。(站在巨人的肩膀上)

        matlab版本是2021b,用的是matlab的deepNetworkDesigner。fruits-360数据集下载链接放最后了。

1. fruits-360数据集介绍

        打开fruits-360的文件夹如图1所示,papers是大牛的论文,可以看看,但是大牛是用的python做的。Training放的是训练集,Test放的是验证集,test-multiple_fruits也是更复杂的验证集。其中图片的大小都是100*100*3(长×宽×高)。

基于Matlab和fruits-360的水果识别_第1张图片 图1 fruits-360文件夹介绍

        在训练集和验证集中放的是不同种类的水果和蔬菜。每一种水果或蔬菜占一个文件夹,文件夹的文件名就是标签,一共有131种。(验证集,训练集,标签自己百度)。如图2所示, 例如Apple Braebum文件夹中放的就全是这一种苹果的图片,Apple Braebum就是一个标签。     

基于Matlab和fruits-360的水果识别_第2张图片 图2 训练集

2. 训练步骤与结果

        步骤①  在matlab的命令行输入deepNetworkDesigner并回车

>> deepNetworkDesigner

        步骤②  打开如图3所示的深度网络设计器,选择如图4所示的预训练网络中的               SqueezeNet。      

              (也可以选择自己搭建网络,方法类似,自己研究去)

基于Matlab和fruits-360的水果识别_第3张图片 图3 深度网络设计器 基于Matlab和fruits-360的水果识别_第4张图片 图4 预训练网络

        步骤③  打开的SqueezeNet如图5所示,该网络一共有68层。  

基于Matlab和fruits-360的水果识别_第5张图片 图5 SqueezeNet

        步骤④  ctrl+滚轮放大网络,按图6中的步骤,替换掉输入层。因为fruits-360的图片大小都是100*100*3,但是SqueezeNet的图片输入大小是227*227*3。替换后的网络如图7所示。

基于Matlab和fruits-360的水果识别_第6张图片 图6 替换输入层
基于Matlab和fruits-360的水果识别_第7张图片 图7 替换输入层后的网络

        步骤⑤  按图8中的步骤替换输出层。原网络的输出层输出种类是1000,fruits-360只有131种,替换后如图9所示。

基于Matlab和fruits-360的水果识别_第8张图片 图8 替换输出层
基于Matlab和fruits-360的水果识别_第9张图片 图9 替换输出层后的网络

        步骤⑥  按图10中的步骤,替换倒数第一个卷积层conv10,替换后如图11所示。

基于Matlab和fruits-360的水果识别_第10张图片 图10 替换卷积层conv10
基于Matlab和fruits-360的水果识别_第11张图片 图11 替换卷积层conv10后的网络

        步骤⑦  按如下步骤导入训练数据和验证数据

基于Matlab和fruits-360的水果识别_第12张图片

基于Matlab和fruits-360的水果识别_第13张图片

基于Matlab和fruits-360的水果识别_第14张图片

        导入后的训练集如图12所示,验证集如图13所示。

基于Matlab和fruits-360的水果识别_第15张图片 图12 训练集
基于Matlab和fruits-360的水果识别_第16张图片 图13 验证集

        步骤⑧  训练(使用默认参数)

基于Matlab和fruits-360的水果识别_第17张图片

        步骤⑨  训练结果,训练会花很长时间,剩下就是等。如图14所示。训练后网络对水果的识别正确率是 98.25%

基于Matlab和fruits-360的水果识别_第18张图片 图14 训练结果

        步骤⑩  导出。训练好后的网络可以导出到工作区,训练代码是mlx实时文件。(注意保存训练好的网络

基于Matlab和fruits-360的水果识别_第19张图片

基于Matlab和fruits-360的水果识别_第20张图片

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) + "%");
基于Matlab和fruits-360的水果识别_第21张图片 图15 fruits-360中的香蕉测试
基于Matlab和fruits-360的水果识别_第22张图片 图16 网图西瓜测试
基于Matlab和fruits-360的水果识别_第23张图片 图17 拍摄香蕉测试
基于Matlab和fruits-360的水果识别_第24张图片 图18 拍摄苹果测试
基于Matlab和fruits-360的水果识别_第25张图片 图19 拍摄芒果测试

 

4. 写在最后

        ① 虽然全是实操,但是想要理解还得结合理论看

        ② 网络的选择多种多样,可以自己尝试设计网络

        ③ 步骤⑦中的训练参数也可以自己换着试

        ④ 步骤⑧的训练选项也可以调

        ⑤ 测试结果可以看出,部分水果识别结果还是很好的,但是有一些拍摄的水果不太好,甚至出现错误,如图18的苹果识别出来是梨。对于特别相似的如苹果和樱桃,在100*100*3的图片中是很难区分的。

        ⑥ 对于我们身边的常见水果可能不会分的这么细,fruits-360的苹果就有13种。可以自己从数据集中根据需要选择几种水果来做实验。但是训练集和验证集中的种类应该保持相同。

5. fruits-360数据集

        https://pan.baidu.com/s/16u2Q2P4b6aITkZE7k98VDw

        提取码:HXLX   (好学力行)

        测试的五张图片也放下面:

        

基于Matlab和fruits-360的水果识别_第26张图片

 

基于Matlab和fruits-360的水果识别_第27张图片

 

基于Matlab和fruits-360的水果识别_第28张图片

基于Matlab和fruits-360的水果识别_第29张图片

 

 

 

你可能感兴趣的:(matlab,卷积神经网络,deep,learning,机器学习,分类)