基于深度学习的SAR目标分类
这个例子展示了如何创建和训练一个简单的卷积神经网络来使用深度学习对SAR目标进行分类。
深度学习是一种强大的训练鲁棒分类器的技术。它在从图像分析到自然语言处理的各个领域都显示了其有效性。这些发展对SAR数据分析和总体SAR技术具有巨大的潜力,正在慢慢实现。长期以来,sar相关算法的主要任务是目标检测和分类,即自动目标识别(ATR)。在这里,我们使用一个简单的卷积神经网络来训练和分类SAR目标,使用深度学习工具箱™。
深度学习工具箱提供了一个框架,用于设计和实现带有算法、预训练模型和应用程序的深度神经网络。
这个例子演示了如何:
下载数据集。
加载和分析图像数据。
数据的分割和扩充。
定义网络架构。
培训网络。
预测新数据的标签,计算分类精度。
为了说明这一工作流程,我们将使用空军研究实验室发布的移动和静止目标采集与识别(MSTAR)混合目标数据集[1].我们的目标是建立一个基于SAR图像的地面目标分类模型。
下载数据集
本例使用的MSTAR目标数据集包含来自7辆地面车辆和一个校准目标的8688张SAR图像。数据是使用x波段传感器在聚光灯模式下收集的,分辨率为1英尺。我们使用的目标类型是BMP2(步兵战车),BTR70(装甲车)和T72(坦克)。在15度和17度两种不同的俯仰角度拍摄图像,有190 ~ 300个不同的方面版本,可实现360度的全方面覆盖。这三类目标及其复制目标的光学图像和SAR图像如下图所示。
方法从给定的URL下载数据集helperDownloadMSTARTargetData
Helper函数,在本例的末尾定义。数据集大小为28MiB。
outputFolder = pwd;dataURL = [“https://ssd.mathworks.com/万博1manbetxsupportfiles/radar/data/”...“MSTAR_TargetData.tar.gz”];helperDownloadMSTARTargetData (outputFolder dataURL);
根据您的互联网连接,下载过程可能需要一些时间。该代码暂停MATLAB®执行,直到下载过程完成。或者,您可以使用web浏览器将数据集下载到本地磁盘并提取文件。如果这样做,请将代码中的outputFolder变量更改为下载文件的位置。
加载和分析图像数据
将SAR图像数据加载为图像数据存储。imageDatastore
根据文件夹名称自动标记图像,并将数据存储为imageDatastore
对象。图像数据存储使您能够存储大量图像数据,包括不适合内存的数据,并在卷积神经网络训练期间有效地读取批量图像。
sarDatasetPath = fullfile(pwd,“数据”);imds =图像数据存储(sarDatasetPath,...“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);
MSTAR数据集包含来自7辆地面车辆和一个校准目标的SAR返回。这8个目标的光学图像和SAR图像如下所示
让我们通过随机显示一些芯片图像来探索数据存储。
rng(0)图打乱数据存储。Imds = shuffle(Imds);为I = 1:20 subplot(4,5, I) img = read(imds);imds.Labels(i))“训练图像样本”)结束
的洛桑国际管理发展学院
变量现在包含图像和与每个图像关联的类别标签。标签是根据图像文件的文件夹名称自动分配的。使用countEachLabel
总结每个类别的图像数量。
labelCount = countEachLabel(imds)
labelCount =8×2表标签计数________ _____ 2S1 1164 BRDM_2 1415 BTR_60 451 D7 573 SLICY 2539 T62 572 ZIL131 573 ZSU_23_4 1401
首先,指定网络输入大小。在选择网络输入大小时,要考虑系统的内存限制和训练中的计算成本。
imgSize = [128,128,1];
创建用于培训、验证和测试的数据存储对象
将数据分为训练集、验证集和测试集。我们将使用80%的数据集用于训练,10%用于训练期间的模型验证,10%用于训练后的测试。splitEachLabel
拆分数据存储洛桑国际管理发展学院
三个新的数据存储,imdsTrain
,imdsValidation
,imdsTest
.在此过程中,它考虑了不同类的图像数量的变化,以便训练、验证和测试集具有相同的每个类的比例。
trainingPct = 0.8;validationPct = 0.1;[imdsTrain,imdsValidation,imdsTest] = splitEachLabel(imds,...trainingPct validationPct,“随机”);
数据增加
数据存储中的映像没有一致的大小。为了用我们的网络训练图像,图像的大小必须与网络输入层的大小相匹配。不需要自己调整图像大小,我们可以使用augmentedImageDatastore
,它会在将图像传送到网络之前自动调整图像的大小。的augmentedImageDatastore
也可用于对输入图像应用转换,如旋转、反射或缩放。这有助于防止网络过度拟合我们的数据。
auimdsTrain = augmentedImageDatastore(imgSize, imdsTrain);auimdsValidation = augmentedImageDatastore(imgSize, imdsValidation);auimdsTest = augmentedImageDatastore(imgSize, imdsTest);
定义网络架构
定义卷积神经网络架构。
layers = createNetwork(imgSize);
列车网络的
定义网络结构后,使用trainingOptions
(深度学习工具箱)指定培训选项。使用随机动量梯度下降(SGDM)训练网络,初始学习率为0.001。我们将最大epoch数设置为3。epoch是整个训练数据集上的一个完整的训练周期。通过指定验证数据和验证频率,在培训过程中监控网络的准确性。对每个纪元的数据进行洗牌。该软件在训练数据上训练网络,并在训练期间定期计算验证数据的准确性。验证数据不用于更新网络权重。我们设置“CheckpointPath”
到一个临时地点。这使得在训练过程中可以保存部分训练过的检测器。如果培训中断,例如由于停电或系统故障,您可以从保存的检查点恢复培训。
选项= trainingOptions(“个”,...“InitialLearnRate”, 0.001,...“MaxEpochs”3,...“洗牌”,“every-epoch”,...“MiniBatchSize”现年48岁的...“ValidationData”auimdsValidation,...“ValidationFrequency”15岁的...“详细”假的,...“CheckpointPath”tempdir,...“阴谋”,“训练进步”);
使用定义的体系结构训练网络层
、训练数据和训练选项。默认情况下,trainNetwork
使用GPU(如果有的话)(需要并行计算工具箱™和CUDA®支持的GPU,具有3.0或更高的计算能力)。有关支持的计算能力的信息,请参见GPU支持的版本(并万博1manbetx行计算工具箱)。否则,它使用CPU。属性指定执行环境“ExecutionEnvironment”
的名称-值对参数trainingOptions
.
训练进度图显示了小批损失和准确性以及验证损失和准确性。有关训练进度图的更多信息,请参见监控深度学习训练进度(深度学习工具箱).损失是交叉熵损失。准确率是网络正确分类图像的百分比。
net = trainNetwork(auimdsTrain,layers,options);
训练过程如上图所示。上图上的深蓝色线表示模型在训练数据上的准确性,而黑色虚线表示模型在验证数据上的准确性(与训练分开)。验证准确率在97%以上,对于一个八类分类器来说已经相当不错了。此外,请注意验证精度和训练精度是相似的。这表明我们有一个健壮的分类器。当训练精度远高于验证精度时,模型会过度拟合(即记忆)训练数据。
分类测试图像和计算精度
利用训练好的网络预测验证数据的标签,并计算最终的准确率。准确率是网络正确预测的标签的比例。
YPred = category (net,auimdsTest);YTest = imdsTest.Labels;精度= sum(YPred == YTest)/numel(YTest)
准确度= 0.9827
测试精度与验证精度非常接近,使我们对模型的预测能力有信心。
我们可以使用混淆矩阵来更详细地研究模型的分类行为。强烈的中心对角线代表准确的预测。理想情况下,我们希望看到对角线外随机分布的小值。对角线外的大值可能表示模型挣扎的特定场景。
figure cm = confusichart (YPred, YTest);厘米。RowSummary =“row-normalized”;厘米。Title =SAR目标分类混淆矩阵;
在八个类别中,该模型似乎最难以正确分类ZSU-23/4。ZSU-23/4和2S1有非常相似的SAR图像,因此我们观察到我们训练的模型有一些错误分类。然而,它仍然能够达到超过90%的准确率的类。
Helper函数
这个函数createNetwork
以图像输入大小作为输入imgSize
并返回一个卷积神经网络。请参见下面对每个层类型的功能的描述。
图像输入层——一个imageInputLayer
(深度学习工具箱)是指定图像大小的地方。这些数字对应于高度、宽度和通道大小。SAR图像数据由灰度图像组成,因此通道大小(彩色通道)为1。对于彩色图像,通道大小为3,对应于RGB值。您不需要打乱数据,因为trainNetwork
,默认情况下,在训练开始时对数据进行洗牌。trainNetwork
还可以在训练期间的每个纪元开始时自动洗牌数据。
卷积的层-在卷积层中,第一个参数为filterSize
,这是训练函数在沿图像扫描时使用的过滤器的高度和宽度。在本例中,数字3表示过滤器大小为3 × 3。您可以为筛选器的高度和宽度指定不同的大小。第二个参数是过滤器的数量,numFilters
,这是连接到输入的同一区域的神经元的数量。该参数决定特征映射的数量。使用“填充”
名称-值对,向输入特征映射添加填充。对于默认步幅为1的卷积层,“相同”
填充确保空间输出大小与输入大小相同。您还可以使用的名称-值对参数定义该层的步幅和学习率convolution2dLayer
(深度学习工具箱).
批处理规范化层批处理归一化层将激活和梯度在网络中传播归一化,使网络训练成为一个更容易的优化问题。在卷积层和非线性层之间使用批处理归一化层,如ReLU层,以加快网络训练并降低对网络初始化的敏感性。使用batchNormalizationLayer
(深度学习工具箱)创建批处理规范化层。
ReLU层批处理归一化层后面是一个非线性激活函数。最常见的激活函数是整流线性单元(ReLU)。使用reluLayer
(深度学习工具箱)来创建一个ReLU层。
最大池化层-卷积层(带有激活函数)有时会跟随下采样操作,以减少特征图的空间大小并删除冗余的空间信息。向下采样可以在不增加每层所需计算量的情况下增加更深卷积层中的过滤器数量。向下采样的一种方法是使用最大池,您可以使用maxPooling2dLayer
(深度学习工具箱).最大池化层返回输入矩形区域的最大值,由第一个参数指定,poolSize
.在本例中,矩形区域的大小为[2,2]。的“步”
名称-值对参数指定训练函数在扫描输入时采用的步长。
全连接层卷积层和向下采样层后面是一个或多个完全连接层。顾名思义,全连接层是指神经元与前一层中的所有神经元连接的层。这一层结合了前一层在图像中学习到的所有特征,以识别更大的模式。最后一个全连接层结合特征对图像进行分类。因此,OutputSize
参数在最后一个完全连接层中等于目标数据中的类数。在本例中,输出大小为10,对应于10个类。使用fullyConnectedLayer
(深度学习工具箱)创建一个完全连接的层。
Softmax层—softmax激活函数用于全连通层输出的归一化。softmax层的输出由和为1的正数组成,然后可以被分类层用作分类概率。创建一个softmax图层softmaxLayer
(深度学习工具箱)在最后一个完全连接层之后的功能。
分类层-最后一层是分类层。这一层使用softmax激活函数为每个输入返回的概率,将输入分配给一个互斥类并计算损失。要创建分类层,请使用classificationLayer
(深度学习工具箱).
函数layers = createNetwork(imgSize) layers = [imageInputLayer([imgSize(1) imgSize(2) 1])输入层32岁的convolution2dLayer (3“填充”,“相同”)%卷积层reluLayer% Relu层32岁的convolution2dLayer (3“填充”,“相同”) batchNormalizationLayer批处理归一化层reluLayer maxPooling2dLayer (2“步”, 2)最大池化层convolution2dLayer (64,“填充”,“相同”) reluLayer卷积2dlayer (3,64,“填充”,“相同”maxPooling2dLayer(2,“步”2) convolution2dLayer(3128年,“填充”,“相同”) reluLayer卷积2dlayer (3,128,“填充”,“相同”maxPooling2dLayer(2,“步”2) convolution2dLayer(3256年,“填充”,“相同”) reluLayer卷积2dlayer (3256,“填充”,“相同”maxPooling2dLayer(2,“步”,2)卷积2dlayer (6,512) reluLayer dropoutLayer(0.5)%退出层fullyConnectedLayer (512)%全连接层。reluLayer fullyConnectedLayer(8) softmaxLayerSoftmax层classificationLayer分类层];结束函数helperDownloadMSTARTargetData (outputFolder DataURL)从给定的URL下载数据集到输出文件夹。radarDataTarFile = fullfile(输出文件夹,“MSTAR_TargetData.tar.gz”);如果~存在(radarDataTarFile“文件”) disp (“正在下载MSTAR目标数据(28 MiB)…”);websave (radarDataTarFile DataURL);解压(radarDataTarFile outputFolder);结束结束
参考文献
[1] MSTAR数据集。https://www.sdms.afrl.af.mil/index.php?collection=mstar