1. 程式人生 > 其它 >Matlab影象分類(AlexNet)

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。