【MATLAB第45期】基于MATLAB的深度学习SqueezeNet卷积神经网络混凝土裂纹图像识别预测模型

本文涉及的产品
图像搜索,7款服务类型 1个月
简介: 【MATLAB第45期】基于MATLAB的深度学习SqueezeNet卷积神经网络混凝土裂纹图像识别预测模型

【MATLAB第45期】基于MATLAB的深度学习SqueezeNet卷积神经网络混凝土裂纹图像识别预测模型


引言


该文章展示如何微调名为SqueezeNet的预训练深度卷积网络,以执行裂纹图像分类预测。并使用一种称为Grad-CAM的技术来解释和分析分类输出。文章使用L.Zhang介绍的混凝土裂缝图像数据集。


SqueezeNet卷积神经网络是Matlab官方支持的网络中最小的预训练网络。


SqueezeNet已经对超过一百万张图像进行了训练,可以将图像分类为1000个对象类别(如键盘、咖啡杯、铅笔和许多动物)。该网络已经为广泛的图像学习了丰富的特征表示。该网络将图像作为输入,并输出图像中对象的标签以及每个对象类别的概率。


常见的还有迁移学习,通常用于深度学习应用。可以把一个预先训练好的网络作为学习新任务的起点。使用迁移学习对网络进行微调通常比从头开始训练具有随机初始化权重的网络更快、更容易。可以使用少量的训练图像将学习到的功能快速转移到新任务中。


本文以SqueezeNet卷积神经网络为例。


数据下载链接:https://data.mendeley.com/datasets/5y9wdsg2zt/1


一、加载数据


首先,请从上述链接下载图像。然后将其解压缩,命名为Concrete Crack Images for Classification。请在确认文件在您的当前目录中后运行此代码,如下所示。

clear;clc;close all
imds = imageDatastore('Concrete Crack Images for Classification','IncludeSubfolders',true, 'LabelSource','foldernames');
numExample=16;
idx = randperm(numel(imds.Files),numExample);
for i=1:numExample
    I=readimage(imds,idx(i));
    I_tile{i}=insertText(I,[1,1],string(imds.Labels(idx(i))),'FontSize',20);
end
I_tile = imtile(I_tile);
figure;imshow(I_tile);title('examples of the dataset')

使用imageDatastore功能存储带有标签信息的图像。标签信息是根据文件“Concrete Crack Images for Classification”中的文件夹名称识别的。

该数据集包含正常(负)和裂纹图像(正)。数据是从各个 METU 校园建筑收集的。

将数据集分为两部分,即负裂纹图像和正裂纹图像,以进行图像分类。每个类有 20000 张图像,总共 40000 张 227 x 227 像素、RGB 通道的图像。该数据集是根据Zhang等人(2016)提出的方法从458张高分辨率图像(4032x3024像素)生成的。

高分辨率图像在表面光洁度和照明条件方面存在差异。不应用随机旋转或翻转方面的数据增强。


二、分割图像


将数据划分为训练、验证和测试数据集。函数splitEachLabel将图像数据存储拆分为两个新的数据存储。该数据集包含20k个正常图像和20k个裂纹图像。由于数据集有许多图像,因此需要一些时间进行训练。

为了方便演示,您可以将训练图像的比例设置为较低,例如0.01,以使图像数量非常少。imds之后的比率表示确定训练、验证和测试数据的图像数量的比率。

例如,如果比率为0.01,则图像数量为40k*0.01=400。

[imdsTrain,imdsValidation,imdsTest] = splitEachLabel(imds,0.01,0.01,0.01,'randomized');

计算训练数据集中的图像数量。确认数字是否符合上述预期。

numTrainImages = numel(imdsTrain.Labels)


三、加载预训练网络


net = squeezenet;

使用analyzeNetwork可以显示网络体系结构的交互式可视化以及有关网络层的详细信息。

analyzeNetwork(net)

第一层,即图像输入层,需要大小为227×227×3的输入图像,其中3是颜色通道的数量。

inputSize = net.Layers(1).InputSize;

四、替换最终图层


由于SqueezeNet的原始版本是一个可容纳1000个类的网络,必须将其调整为正常/裂纹分类(2类)。从经过训练的网络中提取层图。


lgraph = layerGraph(net); 

在大多数网络中,具有可学习权重的最后一层是完全连接层。在一些网络中,例如SqueezeNet,最后一个可学习层是1乘1的卷积层。在这种情况下,在softmax层之前添加了一个完全连接的层。

numClasses = numel(categories(imdsTrain.Labels))


五、数据增强


网络需要大小为227×227×3的输入图像,但是图像数据存储中的图像具有不同的大小。使用增强图像数据存储自动调整训练图像的大小。指定要在训练图像上执行的其他增强操作:

(1)沿垂直轴随机翻转训练图像,并在水平和垂直方向上随机平移最多30个像素。

(2)数据增强有助于防止网络过拟合和记忆训练图像的确切细节

pixelRange = [-30 30];
imageAugmenter = imageDataAugmenter( ...
    'RandXReflection',true, ...
    'RandXTranslation',pixelRange, ...
    'RandYTranslation',pixelRange);
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain, ...
    'DataAugmentation',imageAugmenter);

要在不执行进一步数据扩充的情况下自动调整验证和测试图像的大小,请使用扩充图像数据存储,而不指定任何额外的预处理操作。

六、训练网络

指定参数选项。使用adam优化器。

options = trainingOptions('adam', ...
    'MiniBatchSize',100, ...
    'MaxEpochs',5, ...
    'InitialLearnRate',2e-4, ...
    'Shuffle','every-epoch', ...
    'ValidationData',augimdsValidation, ...
    'ExecutionEnvironment',"auto", ...
    'ValidationFrequency',30, ...
    'Verbose',false, ...
    'Plots','training-progress');

网络在GPU上进行训练(如果可用)。它由ExecutionEnvironment指定,如上所述为“auto”。

对测试图像进行分类以计算分类精度,使用微调网络对正常图像和裂纹图像的测试图像进行分类。

[YPred,scores] = classify(netTransfer,augimdsTest);

显示四个样本验证图像及其预测标签。计算验证集上的分类精度。准确度是网络正确预测的标签的分数。

YTest = imdsTest.Labels;
accuracy = mean(YPred == YTest)
figure()
    plot(YPred)
    hold on
    plot(YTest)
    legend('预测值','实测值')
xlabel('测试样本')

正确率:accuracy = 0.9925

七、结果分析

grad-cam揭示深度学习决策背后的原因。从图层图创建一个dlnetwork。

dlnet = dlnetwork(lgraph);

指定Grad-cam的名称

softmaxName = 'softmax_layer';
featureLayerName = 'relu_conv10';

dispNum控制要使用grad-cam的图像数量,如设为12。使用自动区分,请将sherlock图像转换为dlarray。

dlImg = dlarray(single(img),'SSC');

通过调用gradcam函数上的dlfeval来计算图像的Grad-CAM梯度。将gradient map的大小调整为SqueezeNet图像的大小,并将分数缩放到适当的级别以进行显示。

gradcamMap = sum(featureMap .* sum(dScoresdMap, [1 2]), 3);
gradcamMap = extractdata(gradcamMap);
gradcamMap = rescale(gradcamMap);
imagesc(imresize(gradcamMap,inputSize(1:2) ,'Method', 'bicubic'),'AlphaData',0.5;

使用“AlphaData”值0.5在图像顶部显示gradCAM级别。颜色图的深蓝色值最低,深红色值最高。这种显示分类重要性的可视化也可以在训练过程中进行。可以确认,网络逐步学习了用于分类的良好特征。


参考文献:

[1] Iandola, Forrest N., Song Han, Matthew W. Moskewicz, Khalid Ashraf, William J. Dally, and Kurt Keutzer. “SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5 MB model size.” arXiv preprint arXiv:1602.07360 (2016).

[2] Matlab Documentation: Train Deep Learning Network to Classify New Images

[3] Matlab Documentation: Grad-CAM Reveals the Why Behind Deep Learning Decisions

[4] Zhang, Lei, et al. “Road crack detection using deep convolutional neural network.” 2016 IEEE international conference on image processing (ICIP). IEEE, 2016.


八、代码获取


后台私信回复“45期”即可获取下载链接。

相关文章
|
15天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
74 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
16天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
6天前
|
机器学习/深度学习 监控 算法
基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面
本项目基于YOLOv4深度学习网络,利用MATLAB 2022a实现排队人数统计的算法仿真。通过先进的计算机视觉技术,系统能自动、准确地检测和统计监控画面中的人数,适用于银行、车站等场景,优化资源分配和服务管理。核心程序包含多个回调函数,用于处理用户输入及界面交互,确保系统的高效运行。仿真结果无水印,操作步骤详见配套视频。
41 18
|
12天前
|
机器学习/深度学习 算法 计算机视觉
基于CNN卷积神经网络的金融数据预测matlab仿真,对比BP,RBF,LSTM
本项目基于MATLAB2022A,利用CNN卷积神经网络对金融数据进行预测,并与BP、RBF和LSTM网络对比。核心程序通过处理历史价格数据,训练并测试各模型,展示预测结果及误差分析。CNN通过卷积层捕捉局部特征,BP网络学习非线性映射,RBF网络进行局部逼近,LSTM解决长序列预测中的梯度问题。实验结果表明各模型在金融数据预测中的表现差异。
|
21天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
18天前
|
传感器 算法
基于GA遗传优化的WSN网络最优节点部署算法matlab仿真
本项目基于遗传算法(GA)优化无线传感器网络(WSN)的节点部署,旨在通过最少的节点数量实现最大覆盖。使用MATLAB2022A进行仿真,展示了不同初始节点数量(15、25、40)下的优化结果。核心程序实现了最佳解获取、节点部署绘制及适应度变化曲线展示。遗传算法通过初始化、选择、交叉和变异步骤,逐步优化节点位置配置,最终达到最优覆盖率。
|
1月前
|
机器学习/深度学习 传感器 数据采集
深度学习在故障检测中的应用:从理论到实践
深度学习在故障检测中的应用:从理论到实践
163 6
|
26天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习的原理与应用:开启智能时代的大门
深度学习的原理与应用:开启智能时代的大门
143 16
|
1月前
|
机器学习/深度学习 网络架构 计算机视觉
深度学习在图像识别中的应用与挑战
【10月更文挑战第21天】 本文探讨了深度学习技术在图像识别领域的应用,并分析了当前面临的主要挑战。通过研究卷积神经网络(CNN)的结构和原理,本文展示了深度学习如何提高图像识别的准确性和效率。同时,本文也讨论了数据不平衡、过拟合、计算资源限制等问题,并提出了相应的解决策略。
100 19
|
1月前
|
机器学习/深度学习 传感器 人工智能
探索深度学习在图像识别中的应用与挑战
【10月更文挑战第21天】 本文深入探讨了深度学习技术在图像识别领域的应用,并分析了当前面临的主要挑战。通过介绍卷积神经网络(CNN)的基本原理和架构设计,阐述了深度学习如何有效地从图像数据中提取特征,并在多个领域实现突破性进展。同时,文章也指出了训练深度模型时常见的过拟合问题、数据不平衡以及计算资源需求高等挑战,并提出了相应的解决策略。
94 7