Matlab图像分类(AlexNet)

 

Demo代码以及测试数据下载:https://download.csdn.net/download/Ango_/15946085

图像分类是神经网络最典型的应用之一,常用的分类网络有AlexNet、LeNet、VGGNet、GoogleNet、Inception网络、ResNet、DenseNet等。

本文使用AlexNet对图像清晰程度进行判断,图像分为清晰和模糊两类。AlexNet原始网络结构最终输出类别为1000类,因此需要将第23层全连接层的输出尺寸改为2。

     

                清晰图像                                           模糊图像

 

具体步骤:

1 加载训练好的Alex网络,alexnet第一次使用需要下载,再matlab中执行alexnet,将会给出下载的链接点击即可下载。

alex = alexnet;
layers = alex.Layers;

2 修改网络结构,类别改为两类,第23层为最后一个全连接层,需要将输出改为类别的个数。 

layers(23) = fullyConnectedLayer(2);
layers(25) = classificationLayer;

3 设置训练数据,将每个类别的数据放到各自的子目录中,matlab提供了imageDatastore函数,可以很方便的生成训练数据集。

allImages = imageDatastore('E:\CodeProjects\MatPro\Classification\train','IncludeSubfolders', true, 'LabelSource', 'foldernames');

4 将数据集随机划分为训练数据和测试数据

[trainingImages, testImages] = splitEachLabel(allImages, 0.8, 'randomize');

5 定义训练参数并训练网络

opts = trainingOptions('sgdm','InitialLearnRate',0.001,'MaxEpochs',20, 'MiniBatchSize', 64);
myNet = trainNetwork(trainingImages, layers,opts);

6 测试训练结果,通过训练数据集查看训练的精度效果

predictedLabels = classify(myNet, testImages);
accuracy = mean(predictedLabels == testImages.Labels);

7 输出模型为标准的ONNX格式,后续可以使用OpenCV、TensorRT等推理工具进行生产部署

exportONNXNetwork(myNet,'mynet_all2.onnx')

修改后的网络结构:

网络结构

总结:

使用Matlab可以很方便地开展神经网络的设计和训练,如果是一个比较简单的需求,不想花太多时间搭建神经网络训练环境的同学,可以考虑使用Matlab。

posted @ 2022-03-06 09:47  陈小蓝  阅读(934)  评论(0编辑  收藏  举报