主要内容

雷达目标分类使用机器学习和深入学习

这个例子展示了如何分类雷达返回机器和深度学习的方法。机器学习方法使用小波散射特征提取和支持向量机。金宝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 (“PropagationSpeed”c“OperatingFrequency”足球俱乐部,“AzimuthAngles”阿兹,“ElevationAngles”埃尔,“RCSPattern”,cylrcs);

下面的图显示了如何模拟100返回汽缸。假设下的气缸动作,导致小振动在瞄准线,因此,视线角变化从一个样本。

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

锥可以生成同样的回报。建立训练集,重复上述过程任意5缸半径。此外,对于每一个半径,10运动模拟配置文件通过改变入射角以下10个随机生成正弦信号曲线在瞄准线。有701个样本在每个运动形象,所以有701 -由50个样本。汽缸的重复过程的目标,结果以701 - 50 - 100的训练数据矩阵缸和50锥概要文件。在测试设置中,我们使用25缸和25锥概要文件创建一个701 -由50个训练集。由于计算时间长,下面的训练数据是预算和加载。

负载(“RCSClassificationReturnsTraining”);负载(“RCSClassificationReturnsTest”);

作为一个例子,下一个图显示,换取一个运动资料从每个形状。情节显示值随时间变化的入射方位角度和目标的回报。

次要情节(2,2,1)情节(cylinderAspectAngle (1:)) ylim网格(90 [-90])标题(“缸方面角与时间”);包含(“时间指数”);ylabel (的视线角(度));次要情节(2,2,3)情节(RCSReturns.Cylinder_1);ylim (50 [-50]);网格标题(“缸返回”);包含(“时间指数”);ylabel (“目标回报(dB)”);次要情节(2 2 2)情节(coneAspectAngle (1:));ylim(90年[-90]);网格;标题(锥角与时间方面的);包含(“时间指数”);ylabel (的视线角(度));次要情节(2、2、4);情节(RCSReturns.Cone_1);ylim (50 [-50]);网格;标题(“锥返回”);包含(“时间指数”);ylabel (“目标回报(dB)”);

小波散射

小波散射特征提取器,数据传播通过一系列的小波变换,非线性,平均生产低温度差表示时间序列。小波时间收益率散射信号表示对输入信号的变化而不牺牲类辨别力。

小波时间散射的关键参数来指定网络的规模不变时,小波变换,和小波的数量每倍频程的每个小波滤波器。在许多应用程序中,两个滤波器的级联能充分实现良好的性能。在这个例子中,我们构造了小波时间散射网络两个滤波器:4小波每倍频程第一每倍频程滤波器组和2小波第二滤波器组。不变性范围设置为701个样本,数据的长度。

sn = waveletScattering (“SignalLength”,701,“InvarianceScale”,701,“QualityFactors”(4 - 2));

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

应变= sn.featureMatrix (RCSReturns {:,:},“转换”,“日志”);圣= sn.featureMatrix (RCSReturnsTest {:,:},“转换”,“日志”);

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

TrainFeatures =挤压(平均(压力,2))的;TestFeatures =挤压(平均(圣,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“LossFun”,“ClassifError”))* 100
validationAccuracy = 100

目标分类

使用训练支持向量机,从测试集获得的散射特性进行分类。

predLabels =预测(classificationSVM TestFeatures);精度= (predLabels = = TestLabels) /元素个数之和(TestLabels) * 100
精度= 100

情节混乱矩阵。

图(“单位”,“归一化”,“位置”(0.2 - 0.2 0.5 - 0.5));ccDCNN = confusionchart (TestLabels predLabels);ccDCNN。Title =“混乱图”;ccDCNN。ColumnSummary =“column-normalized”;ccDCNN。RowSummary =“row-normalized”;

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

CNN转移学习

SqueezeNet是深卷积神经网络(CNN)在1000年为图像训练类用于ImageNet大规模视觉识别的挑战(ILSVRC)。在这个例子中,我们重用pre-trained SqueezeNet分类雷达返回属于两类之一。

负载SqueezeNet。

snet = squeezenet;

SqueezeNet包括68层。像所有DCNNs, SqueezeNet级联卷积算子其次是非线性和池、或平均。SqueezeNet预计一个图像输入的大小227 - 227 - 3,你可以看到下面的代码。

snet.Layers (1)
ans = ImageInputLayer属性:名称:“数据”InputSize: [227 227 3] Hyperparameters DataAugmentation:“没有”正常化:“zerocenter”NormalizationDimension:“汽车”的意思是:[1×1×3单)

此外,SqueezeNet配置为公认的1000个不同的类,你可以看到下面的代码。

snet.Layers (68)
ans = ClassificationOutputLayer属性:名称:“ClassificationLayer_predictions”类:[1000×1分类]ClassWeights:“没有一个”OutputSize: 1000 Hyperparameters LossFunction:“crossentropyex”

在后续部分中,我们将修改选择层SqueezeNet为了把它应用到我们的分类问题。

连续小波变换

SqueezeNet是为了区分不同的图像和分类结果。因此,为了使用SqueezeNet分类雷达的回报,我们必须将一维雷达回波时间序列转换为图像。一个常见的方法是使用一个时频表示(总和生育率)。有很多的选择信号的时频表示,哪一个是最合适取决于信号特征。确定哪些总和生育率可能适合这个问题,随机选择和策划一些雷达返回从每个类。

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

很明显,雷达返回之前显示的特点是减缓不同变化被大瞬态减少如前所述。小波变换是适合稀疏表示这样的信号。小波收缩本地化瞬变现象与高时间分辨率和拉伸捕捉慢变信号结构。获得和情节的连续小波变换的一个气缸的回报。

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

慢变的CWT同时捕获(低频)波动和瞬态现象。对比的CWT缸返回一个从锥目标。

类(RCSReturns {: idxCone (2)},“VoicesPerOctave”8);

由于明显的瞬变的重要性确定目标回报来源于一个圆柱或圆锥目标,我们选择CWT作为理想总和生育率。获取每个目标返回的类之后,我们让每个雷达回波图像类的。这些图像缩放是兼容SqueezeNet的输入层,我们利用SqueezeNet对得到的图像进行分类。

形象准备

辅助功能,helpergenWaveletTFImg为每个雷达回波、获得CWT,重塑CWT兼容SqueezeNet,和写CWT为jpeg文件。运行helpergenWaveletTFImg,选择一个parentDir你有写权限。这个示例使用tempdir,但你可以用任何文件夹在您的机器上有写权限。辅助函数创建培训测试设置文件夹下parentDir以及创建油缸子文件夹下都培训测试。这些文件夹填充SqueezeNet jpeg图像作为输入。

parentDir = tempdir;helpergenWaveletTFImg (parentDir RCSReturns RCSReturnsTest)
生成时频表示……请稍等创建圆柱体时频表示……完成创建锥时频表示……完成创建圆柱体时频表示……完成创建锥时频表示……完成

现在使用imageDataStore管理文件访问的文件夹以SqueezeNet训练。创建数据存储为训练和测试数据。

trainingData = imageDatastore (fullfile (parentDir“培训”),“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);testData = imageDatastore (fullfile (parentDir“测试”),“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);

为了使用SqueezeNet二元分类问题,我们需要修改几层。首先,我们改变过去可学的层SqueezeNet(64层)有相同数量的1×1运算作为我们的新类,2。

lgraphSqueeze = layerGraph (snet);convLayer = lgraphSqueeze.Layers (64);numClasses =元素个数(类别(trainingData.Labels));numClasses newLearnableLayer = convolution2dLayer (1,“名字”,“binaryconv”,“WeightLearnRateFactor”10“BiasLearnRateFactor”10);lgraphSqueeze = replaceLayer (lgraphSqueeze convLayer.Name newLearnableLayer);classLayer = lgraphSqueeze.Layers(结束);newClassLayer = classificationLayer (“名字”,“二元”);lgraphSqueeze = replaceLayer (lgraphSqueeze classLayer.Name newClassLayer);

最后,为重新训练SqueezeNet设置选项。设置初始学习速率为1的军医,时代的最大数量设置为15,minibatch大小为10。使用随机梯度下降的势头。

劳工关系= 1的军医;mxEpochs = 15;mbSize = 10;选择= trainingOptions (“个”,“InitialLearnRate”劳工关系,“MaxEpochs”mxEpochs,“MiniBatchSize”mbSize,“阴谋”,“训练进步”,“ExecutionEnvironment”,“cpu”);

培训网络。如果你有一个兼容的GPU,trainNetwork自动利用GPU和培训应该完成在不到一分钟。如果你没有一个兼容的GPU,trainNetwork利用CPU和培训需要大约五分钟。培训时间做基于许多因素各不相同。在这种情况下,训练发生在cpu通过设置ExecutionEnvironment参数cpu

CWTnet = trainNetwork (trainingData lgraphSqueeze,选择);
初始化输入数据规范化。
| = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | | | |时代迭代时间| Mini-batch | Mini-batch |基地学习| | | | (hh: mm: ss) | | |损失精度率| | = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |
| 1 | 1 | 00:00:06 | 60.00% | 2.6639 | 1.0000 e-04 |
| 5 | 50 | 00:01:08 | 100.00% | 0.0001 | 1.0000 e-04 |
| | 100 | 00:02:11 | 100.00% | 0.0002 | 1.0000 e-04 |
| | 150 | | 00:03:12 | 100.00% 2.2264 e-05 | 1.0000 e-04 |
| = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = |

使用训练网络来预测目标返回在伸出测试集。

predictedLabels =分类(CWTnet testData,“ExecutionEnvironment”,“cpu”);精度=总和(predictedLabels = = testData.Labels) / 50 * 100
精度= 100

情节混乱图的精度和召回。在这种情况下,100%的测试样本正确分类。

图(“单位”,“归一化”,“位置”(0.2 - 0.2 0.5 - 0.5));ccDCNN = confusionchart (testData.Labels predictedLabels);ccDCNN。Title =“混乱图”;ccDCNN。ColumnSummary =“column-normalized”;ccDCNN。RowSummary =“row-normalized”;

LSTM

在这个示例的最后一节,LSTM工作流描述。第一个定义LSTM层:

LSTMlayers = [sequenceInputLayer (1) bilstmLayer (100“OutputMode”,“最后一次”)fullyConnectedLayer (2) softmaxLayer classificationLayer];选择= trainingOptions (“亚当”,“MaxEpochs”30岁的“MiniBatchSize”,150,“InitialLearnRate”,0.01,“GradientThreshold”,1“阴谋”,“训练进步”,“详细”假的,“ExecutionEnvironment”,“cpu”);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”,“cpu”);精度=总和(predictedLabels = = testLabels) / 50 * 100
精度= 100

结论

这个例子展示了一个工作流执行雷达目标分类使用机器和深度学习技术。尽管这个示例使用合成数据进行训练和测试,它可以很容易地扩展以适应真正的雷达的回报。因为信号的特点,小波技术用于机器学习和CNN的方法。

有了这个数据集,我们也获得了实现类似的准确性仅喂养LSTM原始数据。在更复杂的数据集,原始数据可能过于内在变量原始数据的模型学习强大的功能,你可能不得不诉诸使用LSTM特征提取之前。