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

news/2024/12/5 4:46:20/

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


http://www.ppmy.cn/news/549897.html

相关文章

科技实现“大同”,平安以“新”谋城市发展之“变”

文 |陈选滨 来源|智能相对论&#xff08;aixdlun&#xff09; 城市发展到达一定的阶段&#xff0c;特别是对于一些特大城市&#xff0c;譬如我国的北上广深&#xff0c;必然会面临着诸多城市治理和管理上的“疑难杂症”&#xff0c;如此依托信息化技术的力量&#xff0c;以智…

首批国家智慧城市朔州将起航

城市化进程的加快&#xff0c;使城市被赋予了前所未有的经济、政治和技术的权利&#xff0c;城市被无可避免地推到了世界舞台的中心&#xff0c;发挥着主导作用。与此同时&#xff0c;城市也面临着环境污染、交通堵塞、能源紧缺、住房不足、失业、疾病等方面的挑战。在此背景下…

最新天气网中国城市ID列表 - 2017年12月更新

更新于&#xff1a;2017/12/11 欢迎转载&#xff0c;但请务必注明出处&#xff01; 本文地址&#xff1a;http://blog.csdn.net/wu9797/article/details/78768938 citycode 城市 二级 一级 101010100,北京&#xff0c;北京&#xff0c;北京 101010200,海淀,北京,北京 101…

山西最新五大姓氏排名发布,排名第一的是王,第二的竟是……

山西被称为中华文化发源地之一&#xff0c;是10万年前人类诞生之源、五千年华夏文明之宗&#xff0c;也是600年大槐树移民之根。中国人口最多的十大姓氏有一半源自山西。那在今天的山西省&#xff0c;人口最多的五大姓氏分别是什么呢&#xff1f; 王姓 排名第一的姓氏是“王…

临汾的前世今生

汾河边的丁村人文化遗址&#xff0c;从我家骑车十几分钟就到。馆里有文字标明&#xff1a;“十万年前&#xff0c;古人类在这里生存&#xff0c;汾河两岸是连绵不断的山冈、砂地和禾草草原。当时的河湖沼泽里长满了香蒲、黑三棱、泽泻……水边草甸上有蒿、藜、野菊&#xff0c;…

临汾市新东方计算机学校,新东方在线走进校园——全国中小学大型公益讲座“怒放青春”走进临汾...

原标题&#xff1a;新东方在线走进校园——全国中小学大型公益讲座“怒放青春”走进临汾 2020年10月23日&#xff0c;“新东方在线-怒放的青春”全国中小学大型公益讲座在临汾市同盛中学顺利开展。 此次活动由新东方在线主办&#xff0c;临汾市同盛中学承办。本次讲座针对高一和…

家乡的互联网---山西阳高

家乡是一个不大不小的村庄&#xff0c;名字叫尉&#xff08;yu&#xff09;家小堡&#xff0c;位于山西省北部&#xff0c;主要 农作物是葡萄&#xff0c;很甜的&#xff0c;嘿嘿。OK&#xff0c;下面步入正题——说说家乡的互联网&#xff0c;主要从人们用互联网干什么来说起。…

山西师范大学-临汾 河南师范大学在新乡 四川师范大学 浙江师范大学在金华 安徽师范大学-芜湖

1、首都师范大学&#xff08;北京&#xff0c;首都最的是北京师范大学&#xff0c;其次才是首都师范大学&#xff0c;是北京市属高校&#xff0c;现在已经成为双一流院校&#xff0c;但是京外生源想留在北京的难度相当大&#xff0c;必须要考研&#xff09; 2、天津师范大学&a…