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。