主要内容

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

这个例子说明了如何既机器和深学习方法分类的雷达回波。机器学习方法使用小波散射加上一个支持向量机的特征提取。金宝app此外,两道深深的学习方法中说明:使用迁移学习SqueezeNet和长短期记忆(LSTM)复发性神经网络。请注意,数据集本例中使用并不需要先进的技术,但所描述的工作流程,因为该技术可以扩展到更复杂的问题。

介绍

目标分类是现代雷达系统的一项重要功能。本例使用机器和深度学习对圆柱体和圆锥体的雷达回波进行分类。虽然本示例使用了合成的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 = phased.BackscatterRadarTarget('繁殖'c......“OperatingFrequency”足球俱乐部,'azimuthangles'阿兹,“ElevationAngles”,EL,'rcspattern'圆柱形);

下面的图显示了如何模拟随着时间的推移缸100点返回。据推测,下缸前进使得围绕孔瞄准器小的振动,其结果是,该方面的角度从一个样品切换到下一个运动。

rng默认;N = 100;阿兹= 2 * randn (1, N);el = 2 * randn (1, N);cylrtn = cyltgt ((1, N), [az; el]);情节(mag2db (abs (cylrtn)));Xlabel(“时间指数”) ylabel (“目标回报(dB)”);标题(“目标返回气缸”);

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

加载('rcsclassificationsreturn');加载(“RCSClassificationReturnsTest”);

作为一个例子,下一个图显示了从每个形状的一个运动配置文件的返回。图中显示了入射方位角和目标返回值随时间的变化情况。

子图(2,2,1)绘图(圆柱形(1,:))ylim([ -  90 90])网格标题(“柱面角度与时间”);Xlabel(“时间指数”);ylabel('方面角度(度)');次要情节(2,2,3)情节(RCSReturns.Cylinder_1);ylim (50 [-50]);网格标题(“缸返回”);Xlabel(“时间指数”);ylabel(“目标回报(dB)”);副区(2,2,2)情节(coneAspectAngle(1,:));ylim([ -  90 90]);网格;标题(“锥体方向角度与时间”);Xlabel(“时间指数”);ylabel('方面角度(度)');子图(2,2,4);情节(RCSReturns.Cone_1);ylim (50 [-50]);网格;标题('锥返回');Xlabel(“时间指数”);ylabel(“目标回报(dB)”);

小波散射

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

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

sn = waveletScattering (“SignalLength”,701,'invariarcescale',701,'QualityFactors'[4 2]);

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

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

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

TrainFeatures =挤压(平均值(应变,2))';TestFeatures =挤压(平均值(STEST,2))';

为培训和学习创建标签

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

模型训练

将二次核支持金宝app向量机模型拟合到散射特征上,得到交叉验证的精度。

模板= templateSVM (“KernelFunction”多项式的......'polynomialOrder'2,......'kernelscale''汽车'......'boxconstraint',1,......“标准化”,真正的);classificationSVM = fitcecoc (......TrainFeatures,......Trainlabels,......'学习者'模板,......“编码”“onevsone”......“类名”,分类({“气缸”'锥体'}));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 = confusionchart(TestLabels,predLabels);ccDCNN.Title =“混乱图”;ccDCNN。ColumnSummary =“列归一化”;ccDCNN。RowSummary =“row-normalized”

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

用CNN转移学习

SqueezeNet是一种深度卷积神经网络(CNN),用于ImageNet大规模视觉识别挑战(ILSVRC)中训练的1000类图像。在本例中,我们重用了预先训练过的SqueezeNet,将雷达返回归为以下两类之一。

负载SqueezeNet。

SNET = squeezenet;

SqueezeNet由68层。像所有DCNNs,SqueezeNet级联卷积运算符,然后非线性和池,或平均。SqueezeNet预计大小227逐227×3,其可以用下面的代码看到的图像输入。

snet.Layers (1)
ANS = ImageInputLayer与属性:名称: '数据' InputSize:[227 227 3]超参数DataAugmentation: '无' 归一化: 'zerocenter' NormalizationDimension: '自动' 平均数:[1×1×3单一]

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

snet.Layers (68)
ANS = ClassificationOutputLayer与属性:名称: 'ClassificationLayer_predictions' 类:[1000×1分类] ClassWeights: '无' OutputSize:1000超参数LossFunction: 'crossentropyex'

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

连续小波变换

SqueezeNet的设计目的是区分图像的差异,并对结果进行分类。因此,为了使用SqueezeNet对雷达回波进行分类,必须将一维雷达回波时间序列转换为图像。一种常见的方法是使用时频表示(TFR)。信号的时频表示有多种选择,其中哪一种最合适取决于信号的特性。为了确定哪个TFR可能适合这个问题,从每个类中随机选择和绘制一些雷达返回。

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

很明显,前面显示的雷达回波的特征是变慢的变化,被前面描述的大的瞬态下降打断。小波变换非常适合于稀疏地表示这些信号。小波收缩,以局部瞬态现象与高时间分辨率和拉伸,以捕获缓慢变化的信号结构。获得并绘制其中一个圆柱体的连续小波变换。

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

的CWT同时捕获缓慢变化(低频)的波动和瞬变现象两者。对比从锥体目标与一个气缸回程的CWT。

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

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

形象准备

辅助功能,HelpergenWavelettFimg.,获得每个雷达回波的CWT,重塑CWT为与SqueezeNet兼容,并写入CWT为JPEG文件。跑步HelpergenWavelettFimg., 选择一个parentDir在这里你有写权限。这个例子用途Tempdir.,但您可以使用计算机上您拥有写权限的任何文件夹。helper函数创建训练测试设置文件夹parentDir以及创造圆筒子文件夹下都训练测试。这些文件夹填充被用作输入,以SqueezeNet JPEG图像。

parentdir = tempdir;HelpergenWavelettFimg(Parentdir,RCSReturns,RCSReturnstest)
生成时频表示...请稍候创建缸时频表示...完成创建锥时频表示...完成创建缸时频表示...完成创建锥时频表示做...

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

trainingdata = imagedataStore(fullfile(parentdir,'训练'),“IncludeSubfolders”,真的,......“LabelSource”'foldernames');TESTDATA = imageDatastore(完整文件(parentDir,'测试'),“IncludeSubfolders”,真的,......“LabelSource”'foldernames');

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

lgraphSqueeze = layerGraph(SNET);convLayer = lgraphSqueeze.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('姓名''二进制');lgraphSqueeze = replaceLayer(lgraphSqueeze,classLayer.Name,newClassLayer);

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

劳工关系= 1的军医;mxEpochs = 15;mbSize = 10;选择= trainingOptions ('sgdm''InitialLearnRate',ILR,......“MaxEpochs”,mxEpochs,'minibatchsize',mbsize,......'plots''培训 - 进步''executionenvironment''中央处理器');

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

CWTnet = trainNetwork(trainingData,lgraphSqueeze,OPTS);
初始化输入数据规范化。
|========================================================================================| | 时代| |迭代时间| Mini-batch | Mini-batch |基地学习  | | | | ( hh: mm: ss) | | |丧失准确性  | |========================================================================================|
|1 |1 |00:00:06 |60.00%|2.6639 |1.0000e-04 |
|5 |50 |0时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,'executionenvironment''中央处理器');精度=总和(predictedLabels == testData.Labels)/ 50 * 100
精度= 100

剧情混乱的图表与准确率和查一起。在这种情况下,测试样品的100%正确分类。

数字(“单位”'标准化'“位置”,[0.2 0.2 0.5 0.5]);ccDCNN = confusionchart (testData.Labels predictedLabels);ccDCNN.Title =“混乱图”;ccDCNN。ColumnSummary =“列归一化”;ccDCNN。RowSummary =“row-normalized”

LSTM.

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

LSTMlayers = [......sequenceInputLayer (1) bilstmLayer (100'OutputMode''最后的') fulllyconnectedlayer (2) softmaxLayer classificationLayer];选择= trainingOptions ('亚当'......“MaxEpochs”30岁的......'minibatchsize',150,......'InitialLearnRate',0.01,......“GradientThreshold”,1,......“阴谋”'培训 - 进步'......'verbose'假的,'executionenvironment''中央处理器');trainLabels = repelem(分类({“气缸”“锥”}), 50 50);trainLabels = trainLabels (:);trainData = num2cell (table2array (RCSReturns) ', 2);testData = num2cell (table2array (RCSReturnsTest) ', 2);testLabels = repelem(分类({“气缸”“锥”}), [25] 25);testLabels = testLabels (:);RNNnet = trainNetwork (trainData trainLabels、LSTMlayers选项);

该系统的精度也绘制。

predictedLabels =分类(RNNnet,TESTDATA,'executionenvironment''中央处理器');准确性= SUM(预测标签== TESTLABELS)/ 50 * 100
精度= 100

结论

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

使用这个数据集,我们也获得了类似的精度,只需将原始数据输入LSTM。在更复杂的数据集中,原始数据可能在本质上太不稳定,以至于模型无法从原始数据中学习到可靠的特征,因此在使用LSTM之前,您可能不得不求助于特征提取。