当前位置: 首页 > news >正文

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

利用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),或者使用迁移学习利用预训练模型。

  • 从头构建CNN(适用于简单任务或数据量较小的情况):

    layers = [imageInputLayer([28 28 1]) % 输入层,指定图像大小convolution2dLayer(3, 8, 'Padding', 'same') % 卷积层batchNormalizationLayer   % 批归一化层reluLayer                 % ReLU激活层maxPooling2dLayer(2, 'Stride', 2) % 最大池化层convolution2dLayer(3, 16, 'Padding', 'same')batchNormalizationLayerreluLayerfullyConnectedLayer(10)   % 全连接层,输出节点数对应类别数softmaxLayer              % Softmax层classificationLayer];     % 分类层
    

    这是一个简单的例子,你可以根据需要增加卷积层、全连接层等。

  • 迁移学习(强烈推荐,尤其当你的数据量不是特别巨大时):

    net = googlenet; % 加载预训练的GoogLeNet模型,其他可选如resnet50, efficientnetb0等
    lgraph = layerGraph(net); % 获取网络层图
    % 修改最后的全连接层和分类层以适应你的类别数
    numClasses = numel(categories(imdsTrain.Labels));
    newFCLayer = fullyConnectedLayer(numClasses, 'Name', 'new_fc');
    newClassLayer = classificationLayer('Name', 'new_classoutput');
    lgraph = replaceLayer(lgraph, 'loss3-classifier', newFCLayer);
    lgraph = replaceLayer(lgraph, 'output', newClassLayer);
    % 设置训练选项,通常微调时使用较小的学习率
    options = trainingOptions('adam', ...'InitialLearnRate', 0.0001, ... % 微调时学习率通常设置较小... % 其他选项);
    

配置训练选项与训练模型

使用 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

实用技巧与注意事项

  • 数据是关键:数据质量、数量和多样性直接影响模型性能。数据增强是提升模型泛化能力的有效手段。
  • 从迁移学习开始:除非你有海量数据,否则从预训练模型(如GoogLeNet、ResNet、EfficientNet等)开始进行微调,通常比从头训练更快、效果更好。
  • 利用GPU加速:如果有GPU,MATLAB会自动尝试使用它来加速训练(需要Parallel Computing Toolbox)。
  • 超参数调优:学习率(InitialLearnRate)、批量大小(MiniBatchSize)、训练轮数(MaxEpochs)等都是重要的超参数,需要根据实际情况调整。可以使用MATLAB的Experiment Manager App来系统地进行超参数调优。
  • 理解过拟合:如果训练准确率很高但验证/测试准确率很低,模型很可能过拟合了。可以通过增加数据增强、添加Dropout层、使用L2正则化、减少模型复杂度或提前停止训练来缓解。
  • 可视化与解释性:使用Grad-CAM等工具可视化网络关注图像的那些区域,有助于理解模型决策的依据和调试模型。

进阶探索

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

  • 使用深度网络设计器(Deep Network Designer)App:通过图形化界面拖拽方式设计、编辑和训练网络,非常适合初学者直观理解网络结构。
  • 其他计算机视觉任务:如目标检测(使用trainFasterRCNNObjectDetectortrainYOLOv2ObjectDetector)、语义分割等。
  • 模型部署:将训练好的模型部署到嵌入式设备、企业系统或生成代码。
http://www.rkmt.cn/news/6558.html

相关文章:

  • sumifs根据条件求和
  • c++右值引用和移动语义
  • 彩笔运维勇闯机器学习--梯度下降法
  • 项目管理软件产业革命:从工具升级到生产力范式转移
  • 详细介绍:Linux--初识网络
  • lua程序调试方法
  • 提示词工程(Prompt Engineering)是不是“新时代的编程”?
  • python日志记录之logging模块
  • O - Color a Tree
  • 前 k 小问题期末考
  • lvm硬盘分区与不分区优缺点
  • 中电金信能碳虚拟电厂数智化平台破局“双碳”难题
  • milvus创建一个用户管理多个库
  • 为什么ceph新添加的硬盘会自动变为osd
  • OF SF CF ZF 的判断方式以及例子
  • 2025年30个CRM系统盘点:哪款CRM系统适合你的企业? - SaaS软件
  • TSN Qav测试实践
  • 燕千云ITR平台引领服务流管理革命,构建企业客户服务智慧生态
  • Gitee推出革命性MCP Server:AI深度参与开发全流程 开启智能协作新时代
  • 取证 - voasem
  • 【SPIE独立出版|连续多年EI稳定检索】第七届地球科学与遥感测绘国际学术会议(GRSM 2025)
  • Python psutil模块
  • AI赋能CRM:纷享销客智能图像提升终端运营效率
  • 【linux命令】网卡命令 ①
  • 一款基于 .NET 开源美观、功能丰富的串口调试工具
  • 麒麟系统中docker常用命令
  • 在Oracle中,如何彻底停止expdp进程?
  • 服务器文件同步工具大盘点
  • 基于Python+Vue开发的酒店客房预订管理系统源码+运行步骤
  • 解锁RAG高阶密码:自适应、多模态、个性化技术深度剖析