【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期”即可获取下载链接。

相关文章
|
5天前
|
机器学习/深度学习 监控 算法
基于yolov4深度学习网络的排队人数统计系统matlab仿真,带GUI界面
本项目基于YOLOv4深度学习网络,利用MATLAB 2022a实现排队人数统计的算法仿真。通过先进的计算机视觉技术,系统能自动、准确地检测和统计监控画面中的人数,适用于银行、车站等场景,优化资源分配和服务管理。核心程序包含多个回调函数,用于处理用户输入及界面交互,确保系统的高效运行。仿真结果无水印,操作步骤详见配套视频。
41 18
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于yolov4深度学习网络的公共场所人流密度检测系统matlab仿真,带GUI界面
本项目使用 MATLAB 2022a 进行 YOLOv4 算法仿真,实现公共场所人流密度检测。通过卷积神经网络提取图像特征,将图像划分为多个网格进行目标检测和识别,最终计算人流密度。核心程序包括图像和视频读取、处理和显示功能。仿真结果展示了算法的有效性和准确性。
67 31
|
28天前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
103 1
|
1月前
|
监控 安全 BI
什么是零信任模型?如何实施以保证网络安全?
随着数字化转型,网络边界不断变化,组织需采用新的安全方法。零信任基于“永不信任,永远验证”原则,强调无论内外部,任何用户、设备或网络都不可信任。该模型包括微分段、多因素身份验证、单点登录、最小特权原则、持续监控和审核用户活动、监控设备等核心准则,以实现强大的网络安全态势。
132 2
|
1月前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如&quot;How are you&quot;、&quot;I am fine&quot;、&quot;I love you&quot;等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
2月前
|
机器学习/深度学习 自然语言处理 数据可视化
【由浅到深】从神经网络原理、Transformer模型演进、到代码工程实现
阅读这个文章可能的收获:理解AI、看懂模型和代码、能够自己搭建模型用于实际任务。
172 11
|
1月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的宝石类型识别算法matlab仿真
本项目利用GoogLeNet深度学习网络进行宝石类型识别,实验包括收集多类宝石图像数据集并按7:1:2比例划分。使用Matlab2022a实现算法,提供含中文注释的完整代码及操作视频。GoogLeNet通过其独特的Inception模块,结合数据增强、学习率调整和正则化等优化手段,有效提升了宝石识别的准确性和效率。
|
2月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
139 2
|
2月前
|
运维 网络协议 算法
7 层 OSI 参考模型:详解网络通信的层次结构
7 层 OSI 参考模型:详解网络通信的层次结构
449 1
|
2月前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议