主要内容

利用机器学习和深度学习的雷达目标分类

本例展示了如何使用机器学习和深度学习方法对雷达回波进行分类。机器学习方法使用小波散射特征提取和支持向量机。此外,还说明了两种深度学习方法:使用挤压网的转移学习和长-短期记忆(LSTM)递归神经网络。请注意,本示例中使用的数据集不需要高级技术,但描述了工作流程,因为这些技术可以扩展到更复杂的问题。金宝app

介绍

目标分类是现代雷达系统中的一项重要功能。本例使用机器和深度学习对圆柱体和圆锥体的雷达回波进行分类。虽然本例使用合成I/Q样本,但工作流适用于实际雷达回波。

RCS合成

下一节将展示如何创建合成数据来训练学习算法。

以下代码模拟圆柱的RCS模式,半径为1米,高度为10米。雷达的工作频率为850 MHz。

c = 3 e8;fc = 850 e6;[cylrcs, az, el] = rcscylinder (1,1 10 c, fc);helperTargetRCSPatternPlot (az, el, cylrcs);

然后,该模式可应用于后向散射雷达目标,以模拟不同角度的回波。

cyltgt=相控后向散射目标('繁殖'C......“工作频率”足球俱乐部,'azimuthangles'阿兹,“ElevationAngles”,el,'rcspattern'圆柱形);

下图显示了如何模拟气缸随时间的100次回程。假设气缸发生运动,导致孔瞄准具周围的小振动,因此,从一个样本到下一个样本的纵横角发生变化。

rng默认N=100;az=2*randn(1,N);el=2*randn(1,N);cylrtn=cyltgt(一个(1,N),[az;el]);绘图(mag2db(abs(cylrtn));xlabel(“时间索引”)伊拉贝尔(“目标回报(dB)”);标题(“气缸的目标返回”);

同样可以产生圆锥的返回。为了创建训练集,对任意选择的5个圆柱体半径重复上述过程。此外,对于每个半径,通过改变入射角,跟随10条随机生成的正弦波曲线,模拟10条运动轨迹。每个运动轮廓中有701个样本,所以有701 × 50个样本。对圆柱体目标重复这一过程,得到一个701 × 100矩阵的训练数据,包含50个圆柱体和50个锥体轮廓。在测试集中,我们使用25个圆柱体和25个锥体轮廓来创建701 × 50的训练集。由于计算时间长,将训练数据预先计算并加载如下。

加载('rcsclassificationsreturn');加载(“RCSCL分类返回测试”);

例如,下一个图显示了每个形状的一个运动剖面的返回。该图显示了入射方位角和目标返回值随时间的变化。

子图(2,2,1)绘图(圆柱形(1,:))ylim([ -  90 90])网格在…上标题(“柱面角度与时间”);xlabel(“时间索引”);ylabel('方面角度(度)');子地块(2,2,3)图(RCSReturns.Cylinder_1);ylim([-50]);网格在…上标题(“气缸回油”);xlabel(“时间索引”);ylabel(“目标回报(dB)”);子地块(2,2,2)绘图(圆锥角度(1,:);ylim([-90]);网格在…上;头衔(“圆锥体纵横角与时间”);xlabel(“时间索引”);ylabel('方面角度(度)');子地块(2,2,4);地块(RCSReturns.Cone_1);ylim([-50]);网格在…上;头衔('锥返回');xlabel(“时间索引”);ylabel(“目标回报(dB)”);

小波散射

在小波散射特征提取器中,数据通过一系列小波变换、非线性和平均来产生时间序列的低方差表示。小波时间散射产生的信号表示对输入信号的移位不敏感,而不牺牲类的可辨别性。

在小波时间散射网络中需要指定的关键参数是时不变的尺度、小波变换的次数以及每个小波滤波器组中每倍频程的小波数。在许多应用中,两个滤波器组的级联就足以实现良好的性能。在这个例子中,我们构造了一个带有两个滤波器组的小波时间散射网络:第一个滤波器组每八度有4个小波,第二个滤波器组每八度有2个小波。不变性尺度设置为701个样本,即数据的长度。

sn=小波模式(“信号长度”,701,'invariarcescale',701,“质量因素”,[4 2]);

接下来,我们获得训练和测试集的散射变换。

rucate = sn.featurematrix(rcsreturns {::,:},'转变',“日志”);stest = sn.featurematrix(rcsreturnstest {::,:},'转变',“日志”);

对于这个例子,使用沿每条路径的散射系数的平均值。

列车特征=挤压(平均值(应变,2));试验特征=挤压(平均值(应变,2));

为培训和学习创建标签

TrainLabels = Repelem(分类({“气缸”,'锥体'}),[50]);TestLabels=repelem(分类({“气缸”,'锥体'}),[25 25])';

模型训练

对散射特征进金宝app行二次核支持向量机模型拟合,获得交叉验证精度。

template=templateSVM(“内核函数”,“多项式”,......'polynomialOrder'2,......'kernelscale',“自动”,......'boxconstraint',1,......“标准化”,true);classificationSVM=FitCecc(......TrainFeatures,......Trainlabels,......“学习者”样板......“编码”,“一对一”,......“类名”,分类({“气缸”,'锥体'}));partitionedModel=crossval(classificationSVM,'kfold'5);[validationPredictions, validationScores] = kfoldPredict(partitionedModel);validationAccuracy = (1 - kfoldLoss(partitionedModel,'lockfun','classiferror'))* 100
ValidationAccuracy = 100.

目标分类

使用训练有素的SVM,对从测试集获得的散射功能进行分类。

predLabels =预测(classificationSVM TestFeatures);精度= sum(predLabels == TestLabels) /numel(TestLabels)*100
精度=100

绘制混乱矩阵。

身材(“单位”,“正常化”,“位置”,[0.2 0.2 0.5 0.5]);ccDCNN=混淆图(测试标签,预标签);ccDCNN.Title=“混乱图”;ccDCNN。ColumnSummary =“列规格化”;ccDCNN.row摘要=“row-normalized”

对于更复杂的数据集,深度学习工作流程可能会提高性能。

用CNN转移学习

SqueezeNet是一种深度卷积神经网络(CNN),用于在ImageNet大规模视觉识别挑战(ILSVRC)中对1000类图像进行训练。在本例中,我们重用预训练的SqueezeNet对属于两类之一的雷达回波进行分类。

加载挤压网。

snet=挤压网;

SqueezeNet由68层组成。与所有DCNN一样,SqueezeNet级联卷积运算符,后跟非线性和池或平均。SqueezeNet需要大小为227×227×3的图像输入,您可以通过以下代码看到。

snet.Layers (1)
ans=ImageInputLayer,具有以下属性:名称:'data'InputSize:[227 227 3]超参数数据增强:'none'规格化:'zerocenter'规格化维度:'auto'平均值:[1×1×3 single]

此外,Screezenet配置为识别1,000个不同的类,您可以使用以下代码查看。

snet.层(68)
ans=ClassificationOutputLayer,属性:名称:'ClassificationLayer_predictions'类:[1000×1分类]类权重:'none'OutputSize:1000超参数丢失函数:'crossentropyex'

在随后的部分中,我们将修改Scheezenet的选择层,以将其应用于我们的分类问题。

连续小波变换

挤压网用于区分图像中的差异并对结果进行分类。因此,为了使用挤压网对雷达回波进行分类,我们必须将一维雷达回波时间序列转换为图像。通常的方法是使用时频表示(TFR)。信号的时频表示有多种选择,其中哪种最合适取决于信号特征。要确定哪种TFR可能适用于此问题,请随机选择并绘制每个类别的几个雷达回波。

rng默认; idxCylinder=randperm(50,2);idxCone=randperm(50,2)+50;

很明显,之前显示的雷达回波的特点是,如前所述,以大幅度瞬态下降为标志的缓慢变化。小波变换非常适合稀疏地表示此类信号。小波收缩以高时间分辨率定位瞬态现象,并拉伸以缓慢捕获var获取并绘制其中一个圆柱体回波的连续小波变换。

类(RCSReturns {: idxCylinder (1)},“VoicesPerOctave”,8)

CWT同时捕获缓慢变化(低频)的波动和瞬态现象。对比圆柱体返回的CWT和锥形目标返回的CWT。

CWT(RCSRETURNS {:,IDXCONE(2)},“VoicesPerOctave”8);

由于瞬态在确定目标返回是否源自圆柱形或锥形目标时,因此选择CWT作为理想的TFR,因此选择了CWT。获取每个目标返回的CWT后,我们从每个雷达返回的CWT中制作图像。这些图像被调整为兼容Squeezenet的输入层,并且我们利用挤压Zenet来分类所得到的图像。

形象准备

辅助功能,HelpergenWavelettFimg.,获取每个雷达回波的CWT,重塑CWT以与SqueezeNet兼容,并将CWT写入jpeg文件。要运行HelpergenWavelettFimg.,选择一个父目录您具有写入权限的位置。此示例使用Tempdir.,但您可以使用计算机上具有写入权限的任何文件夹。helper函数创建训练测验设置文件夹父目录以及创造圆柱两个文件夹下的子文件夹训练测验。这些文件夹中填充了jpeg图像,用作压缩网络的输入。

parentdir = tempdir;HelpergenWavelettFimg(Parentdir,RCSReturns,RCSReturnstest)
正在生成时间频率表示法…请稍候正在创建圆柱体时间频率表示法。。。已完成创建圆锥体时间频率表示。。。已完成创建圆柱体时间频率表示。。。已完成创建圆锥体时间频率表示。。。多恩

现在使用图像数据存储管理文件夹中的文件访问,以便培训挤压Zenet。为培训和测试数据创建数据存储。

trainingdata = imagedataStore(fullfile(parentdir,'训练'),“包含子文件夹”,真的,......“标签源”,'foldernames');testData=图像数据存储(完整文件(parentDir,'测试'),“包含子文件夹”,真的,......“标签源”,'foldernames');

为了使用Queeezenet进行这个二进制分类问题,我们需要修改几个层。首先,我们在Screezenet(第64层)中更改最后一个可知的图层,以具有与我们新的类别数量的相同数量的1-1×1卷曲。

LgraphSquence=layerGraph(snet);convLayer=LgraphSquence.Layers(64);numClasses=numel(类别(trainingData.Labels));newLearnableLayer=convolution2dLayer(1,numClasses,......“姓名”,“binaryconv”,......'wexerlearnratefactor'10,......'biaslearnratefactor',10);lgraphsqueeze = replaceElayer(lgraphsqueeze,convlayer.name,newlearnablayer);classlayer = lgraphsqueeze.layers(结束);newclasslayer = classificationlayer(“姓名”,'二进制');lgraphsquence=replaceLayer(lgraphsquence,classLayer.Name,newClassLayer);

最后,设置重新训练挤压罩的选项。将初始学习速率设置为1E-4,将最大时期的最大数量设置为15,小匹匹匹匹匹匹匹尺寸到10。使用动量随机梯度下降。

ilr=1e-4;MXEPOCH=15;mbSize=10;opts=培训选项('sgdm',“初始学习率”,ilr,......“MaxEpochs”,年代,'minibatchsize',mbsize,......“情节”,'培训 - 进步',“执行环境”,'中央处理器');

培训网络。如果你有一个兼容的GPU,列车网络自动使用GPU,培训应在一分钟内完成。如果您没有兼容的GPU,列车网络利用CPU和培训应该需要大约五分钟。培训时间确实根据许多因素而变化。在这种情况下,通过设置训练在CPU上进行ExecutionEnvironment参数到中央处理器.

CWTnet=列车网络(列车数据、LGT、opts);
初始化输入数据规范化。
|===================================================================================================================================================================================================历元|迭代|时间流逝|小批量|小批量|基础学习| | | | |(hh:mm:ss)|准确率||========================================================================================|
|1 |1 |00:00:06 |60.00%|2.6639 |1.0000E-04 |
|5 | 50 | 00:01:08 | 100.00%| 0.0001 | 1.0000e-04|
| 10 | 100 | 00:02:11 | 100.00% | 0.0002 | 1.0000e-04 |
| 15 | 150 | 00:03:12 | 100.00% | 2.2264e-05 | 1.0000e-04 |
|========================================================================================|

使用经过训练的网络预测测试集中的目标收益。

predigedlabels = classify(cwtnet,testdata,“执行环境”,'中央处理器');精度=总和(predictedLabels==testData.Labels)/50*100
精度=100

绘制混淆图以及精确度和召回率。在这种情况下,100%的测试样本分类正确。

身材(“单位”,“正常化”,“位置”,[0.2 0.2 0.5 0.5]);ccDCNN=混淆图(testData.Labels,predictedLabels);ccDCNN.Title=“混乱图”;ccDCNN。ColumnSummary =“列规格化”;ccDCNN.row摘要=“row-normalized”

LSTM.

在该示例的最后一部分中,描述了LSTM工作流程。首先定义LSTM层:

LSTMlayers=[......sequenceInputLayer(1)bilstmLayer(100,'OutputMode',“最后”)fullyConnectedLayer(2)softmaxLayer classificationLayer];选项=培训选项('亚当',......“MaxEpochs”,30,......'minibatchsize',150,......“初始学习率”,0.01,......“梯度阈值”,1,......“情节”,'培训 - 进步',......'verbose'错误的“执行环境”,'中央处理器');trainLabels = repelem(分类({“气缸”,“圆锥体”}),[50 50]); 列车标签=列车标签(:);列车数据=num2单元(表2阵列(RCSReturns)”,2);testData=num2单元(表2阵列(RCSReturnsTest)”,2);testLabels=repelem(分类({“气缸”,“圆锥体”}),[25]);测试标签=测试标签(:);RNNnet=列车网络(列车数据、列车标签、LSTMlayers、选项);

还绘制了该系统的精度。

predictedLabels=分类(RNNnet、testData、,“执行环境”,'中央处理器');准确性= SUM(预测标签== TESTLABELS)/ 50 * 100
精度=100

结论

这个例子展示了一个使用机器和深度学习技术进行雷达目标分类的工作流程。虽然本示例使用合成数据进行训练和测试,但它可以很容易地扩展以适应真实的雷达返回。由于信号的特点,小波技术被用于机器学习和CNN方法。

利用该数据集,我们还通过将原始数据输入LSTM获得了类似的精度。在更复杂的数据集中,原始数据可能因其固有的变量而使模型无法从原始数据中学习稳健的特征,并且在使用LSTM之前,您可能不得不求助于特征提取。