文章目录
- 实训目的
- 实训原理
- MSTAR数据集
- CNN(卷积神经网络)
- LSTM(长短时记忆网络)
- CNN+LSTM
- 实训操作步骤
- 数据预处理
- 网络模型构建
- CNN
- CNN+LSTM
- 实训原始数据及处理结果
- CNN的准确率、召回率、精准率以及分类报告
- CNN+LSTM的准确率、召回率、精准率以及分类报告
- 实训误差分析
- CNN
- CNN+LSTM
- 思考题
实训目的
本次实训的主要目的是通过基于CNN(卷积神经网络)和LSTM(长短时记忆网络)的模型对MSTAR(Moving and Stationary Target Acquisition and Recognition)数据集进行目标分类。
在这次实训中,我们需要了解MSTAR这一经典的数据集,学习并理解CNN和LSTM这两种深度学习模型的基本原理和工作机制。在这次实训中,需要完成CNN对MSTAR数据集进行目标分类和完成CNN+LSTM对数据集进行目标分类。对这两个方法单独进行结果的数据分析,例如画出loss曲线,画出混淆矩阵,得到正确率、召回率、精确率以及分类报告 。在实验的最后通过对CNN和CNN+LSTM两种模型的对比分析,评估它们在MSTAR数据集上的性能差异,分析加入LSTM对实验最后结果的影响的原因。
实训原理
MSTAR数据集
实验数据采用美国国防高等研究计划署(DARPA)支持的MSTAR计划所公布的实测SAR地面静止目标数据,无论是在国内还是国际上,针对SAR图像目标识别的研究基本上是基于该数据集而展开的。该数据集一共有十种不同类型的车辆,包括:2S1(自行榴弹炮)、BRDM2(装甲侦察车)、BTR60(装甲运输车)、D7(推土机)、T62(坦克)、ZIL131(货运卡车)、ZSU234(自行高炮)BTR70(装甲运输车)、BMP2(步兵战车)、T72(坦克)。
CNN(卷积神经网络)
卷积神经网络(Convolutional Neural Networks, CNN)这个概念的提出可以追溯到二十世纪80~90年代。卷积神经网络(CNN)是一种深度学习模型,特别适用于图像处理任务。其核心原理包括卷积层、池化层和全连接层。在卷积层中,模型通过滑动的卷积核来提取图像中的特征。这种局部连接和权值共享的设计使得CNN能够有效捕捉图像中的空间关系,从而实现对图像的高效特征学习。池化层用于降低特征图的维度,减少计算复杂性。全连接层则将学到的特征映射到最终的分类结果。通过这一系列的层次化处理,CNN能够自动学习和提取图像的抽象特征,使其在图像分类任务中表现出色。
LSTM(长短时记忆网络)
长短时记忆网络(LSTM)是递归神经网络(RNN)的一种改进,专门设计用于处理和学习序列数据。LSTM通过引入记忆单元和门控机制,成功解决了传统RNN在长序列上的梯度消失和梯度爆炸问题。具体而言,LSTM的记忆单元可以保持信息,并有选择地更新或遗忘它,而门控机制则有助于调控信息的流动。这种设计赋予了LSTM更好地捕捉序列中长距离依赖关系的能力,使其在语言建模、时间序列分析等任务中表现出色。
CNN+LSTM
将卷积神经网络(CNN)与长短时记忆网络(LSTM)结合的动机在于充分利用两者在不同方面的优势。将CNN和LSTM结合使用可以在处理具有空间结构和时间序列结构的数据时取得更好的效果。例如,在视频分类任务中,可以使用CNN提取帧间特征,然后通过LSTM捕捉视频帧的时间序列信息,从而提高模型对视频内容的理解能力。在目标分类任务中,CNN通过卓越的图像特征学习能力,能够捕捉图像中的空间特征。然而,为了更全面地理解图像中的目标,需要考虑目标在时序上的变化。这时,LSTM的序列建模能力发挥关键作用。通过融合CNN和LSTM,我们期望模型能够更全面地理解并利用MSTAR数据集中目标的复杂特征,从而提高目标分类的性能。这种融合模型使我们能够更好地应对雷达图像分类任务中的多样性和挑战。
实训操作步骤
数据预处理
首先遍历十个文件夹,将文件里的图片都读取进来的同时将图片统一到同一个图片尺寸,以方便我们后续的数据使用。将读取进来的图片转为numpy数组之后对其进行标准化,创建一个图像名称和图像标签对应的字典,将图片的名称转化为标签,之后划分为训练集和测试集。
为了之后跟我们的模型结合,在这里我们将数据集改变为[x,1,128,128]的尺寸,之后通过TensorDataset将train和test合在一起,然后通过DataLoader创建一个迭代数据的加载器类,将训练集设为shuffle=True使在每个epoch开始时对数据进行随机洗牌,这有助于模型学习更鲁棒的特征;将测试集设为shuffle=False,使在测试时不进行数据洗牌,以确保测试的一致性。
网络模型构建
CNN
下面是CNN整个网络各层的参数选择以及图像的尺寸变化的过程。
输入图像为:12828
卷积层1:
输入通道数:1
输出通道数:16
卷积核大小:1111
步幅:3
输出特征图大小:164040
池化层1:
核大小:77
步幅:3
输出特征图大小:161212
ReLU激活函数1:
输出特征图大小:161212
卷积层2:
输入通道数:16
输出通道数:32
卷积核大小:55
步幅:1
填充:2
输出特征图大小:321212
最大池化层2:
池化核大小:33
步幅:3
输出特征图大小:3244
ReLU激活函数2:
输出特征图大小:3244
全连接层1:
输入特征数:3244
输出特征数:4096
ReLU激活函数3:
输出特征数:4096
全连接层2:
输入特征数:4096
输出特征数:10
CNN+LSTM
我的思路是将使用CNN层来处理输入数据,因为卷积层和池化层可以有效地捕捉输入数据的空间结构和特征。然后将CNN提取的特征映射转换成时间序列数据。这可以通过将每个位置的特征映射看作时间步来实现。这个过程可以是将二维空间特征映射转换为一维序列。之后将转换后的序列数据输入到LSTM层中。LSTM可以捕捉输入数据中的时间依赖性,并记忆长期信息。在LSTM层之后,再全连接层来进行最终的预测或分类。在原来的CNN的基础上加上LSTM层。
实训原始数据及处理结果
在这次实训中,我们选择使用交叉熵损失函数和Adam 优化器。设置一共20个epochs和学习速率设为0.001。
CNN的准确率、召回率、精准率以及分类报告
CNN+LSTM的准确率、召回率、精准率以及分类报告
实训误差分析
对CNN和CNN+LSTM画出loss曲线,画出混淆矩阵。
CNN
Loss曲线整体是向下降的一个趋势,并且最后是趋于稳定,说明整个模型的收敛效果还是不错的,并且最后的正确率有97%,虽然从数值上来说看着不错,但是从混淆矩阵可以看出是4类的被识别错误占比比较大,在以后的改进中,可以通过增加4类的数据集或者其他有效的方法来提高正确率。
CNN+LSTM
Loss曲线平滑下降,最后趋于稳定,最终的正确率是97.5%。从混淆矩阵中可以看出,没有哪一类的错误识别比较突出,整体识别都有一点小错误,在后面的改进中,可以试着加深网络,或者增加整体的数据样本数量来尝试提高正确率。
思考题
CNN+LSTM相对CNN来说在正确率方面没有多少提高。LSTM是对时间序列十分的敏感,但在这个数据集中没带来很大的提高,说明MSTAR数据集的时序信息并不显著,LSTM可能无法充分发挥作用以及MSTAR数据集更侧重于空间信息。在CNN引入LSTM是我之前看到了解到的,但是没有实践过,通过这一次实训,让我对这个网络从理论向实践落地。之后还可以通过数据预处理和增强,以提高数据多样性;调整超参数;改进网络结构,使CNN和LSTM更有效的整合在一起等方法来使整个网络更加的完善。