运用深度学习模型实现图像的分类

利用MATLAB进行深度学习图像分类是一个强大且相对直观的过程,即使是初学者也能在它的帮助下快速构建和部署模型。

MATLAB深度学习图像分类的主要步骤和涉及的核心函数:

步骤 核心函数/工具 功能描述
数据准备与加载 imageDatastore 创建图像数据存储对象,自动从文件夹结构标签
  splitEachLabel 按比例划分训练集、验证集和测试集
数据预处理与增强 augmentedImageDatastore 进行图像大小调整、归一化及数据增强(如旋转、翻转)
构建网络模型 从头构建 使用imageInputLayer, convolution2dLayer, reluLayer等逐层构建
  迁移学习 使用googlenet, resnet50等加载预训练模型
配置训练选项 trainingOptions 设置优化器、学习率、迭代次数、验证数据等参数
训练模型 trainNetwork 使用训练数据训练网络
评估模型性能 classify 对测试集进行分类预测
  confusionmat 计算分类准确率或混淆矩阵
使用模型预测 classify 对新的单张图像或图像集进行预测

数据准备与预处理

良好的数据是成功训练模型的基础。

  1. 组织数据:将图像按类别放入不同的子文件夹,文件夹名称即为类别标签。例如:

    dataset/
        train/
            cat/
                cat001.jpg
                ...
            dog/
                dog001.jpg
                ...
        validation/
            cat/
                ...
            dog/
                ...
        test/
            cat/
                ...
            dog/
                ...
    

    这种方式可以利用imageDatastore自动获取标签。

  2. 加载数据:使用 imageDatastore 加载图像数据。

    imds = imageDatastore('path/to/your/data', ...
        'IncludeSubfolders', true, ...
        'LabelSource', 'foldernames');
    
  3. 划分数据集:将数据划分为训练集、验证集和测试集。

    [imdsTrain, imdsValidation, imdsTest] = splitEachLabel(imds, 0.7, 0.15, 0.15, 'randomized');
    
  4. 数据预处理与增强:使用 augmentedImageDatastore 进行图像大小调整和增强,这有助于增加数据多样性,防止过拟合。

    imageSize = [224 224 3]; % 常见的网络输入大小,如ImageNet
    augimdsTrain = augmentedImageDatastore(imageSize, imdsTrain, ...
        'ColorPreprocessing', 'gray2rgb', ... % 如果原图是灰度图,转换为RGB三通道
        'DataAugmentation', imageDataAugmenter('RandRotation',[-20,20], ... % 随机旋转
        'RandXReflection', true, ... % 随机水平翻转
        'RandXTranslation',[-10 10], 'RandYTranslation',[-10 10])); % 随机平移
    

    对于验证集和测试集,通常只进行调整大小和归一化,不需要数据增强。

构建深度学习模型

你可以选择从头开始构建一个卷积神经网络(CNN),或者使用迁移学习利用预训练模型。

配置训练选项与训练模型

使用 trainingOptions 函数来配置训练参数。

options = trainingOptions('sgdm', ... % 优化算法,也可以是 'adam', 'rmsprop' 等
    'MaxEpochs', 10, ...              % 最大训练轮数
    'MiniBatchSize', 32, ...          % 小批量大小
    'InitialLearnRate', 0.001, ...    % 初始学习率
    'ValidationData', augimdsValidation, ... % 指定验证数据
    'ValidationFrequency', 50, ...    % 每隔多少迭代验证一次
    'Verbose', false, ...             % 是否在命令行窗口显示训练过程
    'Plots', 'training-progress');    % 显示训练进度图

使用 trainNetwork 函数开始训练模型。

net = trainNetwork(augimdsTrain, layers, options); % 对于从头训练
% 或者对于迁移学习
net = trainNetwork(augimdsTrain, lgraph, options);

训练过程中,MATLAB会显示一个进度图,你可以实时观察训练集和验证集上的准确率和损失变化。

评估模型性能与进行预测

训练完成后,需要在独立的测试集上评估模型的最终性能。

% 对测试集图像进行分类预测
[YPred, scores] = classify(net, augimdsTest);
YTest = imdsTest.Labels; % 获取测试集的真实标签

% 计算准确率
accuracy = mean(YPred == YTest);
fprintf('Test Accuracy: %.2f%%\n', accuracy * 100);

% 绘制混淆矩阵来分析各类别的分类情况
figure;
confusionchart(YTest, YPred);
title('Confusion Matrix for Test Data');

训练好的模型可以用来预测新的图像。

% 预测单张图像
img = imread('path/to/your/new_image.jpg');
imgResized = imresize(img, net.Layers(1).InputSize(1:2)); % 调整到网络输入大小
[label, score] = classify(net, imgResized);

% 显示图像及预测结果
figure;
imshow(img);
title(['Predicted: ', char(label), ', Confidence: ', num2str(max(score)*100, '%.2f'), '%']);

参考代码 运用深度学习模型实现图像的分类 www.youwenfan.com/contentcnh/55199.html

实用技巧与注意事项

进阶探索

当你掌握了基本流程后,还可以探索:

 

专注于matlab/simulink,电子电路,编程