主要内容

基于机器学习和深度学习的雷达目标分类

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

简介

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

RCS合成

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

下面的代码模拟半径为1米,高度为10米的圆柱体的RCS模式。雷达的工作频率是850兆赫兹。

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

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

Cyltgt =阶段性。BackscatterRadarTarget (“PropagationSpeed”c...“OperatingFrequency”足球俱乐部,“AzimuthAngles”阿兹,“ElevationAngles”埃尔,“RCSPattern”, cylrcs);

下面的图展示了如何模拟圆柱体在一段时间内的100次返回。假定圆柱体的运动使其在瞄准镜周围产生微小的振动,因此,从一个样品到下一个样品的展弦角都会发生变化。

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

锥的返回也可以类似地生成。为了创建训练集,对任意选择的5个圆柱半径重复上述过程。此外,对于每个半径,通过改变入射角,以10条随机生成的正弦曲线围绕视距模拟10条运动剖面。每个运动剖面有701个样本,所以有701 × 50个样本。对圆柱体目标重复该过程,结果是包含50个圆柱体和50个圆锥轮廓的701 × 100的训练数据矩阵。在测试集中,我们使用25个圆柱和25个圆锥轮廓来创建701 × 50的训练集。由于计算时间较长,训练数据预计算并加载如下。

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

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

subplot(2,2,1) plot(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个样本,即数据的长度。

小波散射(“SignalLength”, 701,“InvarianceScale”, 701,“QualityFactors”(4 - 2));

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

sTrain = sn.featureMatrix(RCSReturns{::},“转换”“日志”);sTest = sn.featureMatrix(RCSReturnsTest{:,:},“转换”“日志”);

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

TrainFeatures = squeeze(mean(sTrain,2))';TestFeatures = squeeze(mean(sTest,2))';

为培训和学习创建标签

TrainLabels = repelem(categorical({“气缸”“锥”}),[50 50])”;TestLabels = repelem(categorical({“气缸”“锥”}),[25] 25日)';

模型训练

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

template = templateSVM(“KernelFunction”多项式的...“PolynomialOrder”2,...“KernelScale”“汽车”...“BoxConstraint”, 1...“标准化”,真正的);分类svm = fitcecoc(...TrainFeatures,...TrainLabels,...“学习者”模板,...“编码”“onevsone”...“类名”分类({“气缸”“锥”}));partitionedModel = crossval(classificationSVM,“KFold”5);[validationforecasts, validationScores] = kfoldPredict(partitionedModel);validationAccuracy = (1 - kfoldLoss(partitionedModel,“LossFun”“ClassifError”)) * 100
validationAccuracy = 100

目标分类

利用训练好的支持向量机,对从测试集中获得的散射特征进行分类。

predLabels = predict(classificationSVM,TestFeatures);precision = sum(predLabels == TestLabels) / nummel (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),用于ImageNet大规模视觉识别挑战(ILSVRC)中1000类图像的训练。在这个例子中,我们重复使用预训练的SqueezeNet来分类属于两个类别之一的雷达数据。

负载SqueezeNet。

Snet =挤压;

SqueezeNet由68层组成。像所有的dcnn一样,SqueezeNet级联卷积运算符,然后是非线性和池化,或平均。SqueezeNet期望图像输入的大小为227 * 227 * 3,您可以用下面的代码看到。

snet.Layers (1)
ans = ImageInputLayer with properties: Name: 'data' InputSize:[227 227 3]超参数DataAugmentation: 'none'归一化:'zerocenter' NormalizationDimension: 'auto' Mean: [1×1×3 single]

此外,SqueezeNet被配置为可以识别1000个不同的类,您可以在下面的代码中看到。

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

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

连续小波变换

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来制作图像。这些图像被调整为与SqueezeNet的输入层兼容,我们利用SqueezeNet对结果图像进行分类。

形象准备

辅助函数,helpergenWaveletTFImg,获取每个雷达回波的CWT,将CWT重塑为与SqueezeNet兼容,并将CWT写入jpeg文件。运行helpergenWaveletTFImg,选择一个parentDir你有写权限。这个例子使用了tempdir,但你可以使用你机器上有写权限的任何文件夹。helper函数创建培训而且测试在下面设置文件夹parentDir以及创造油缸而且两者下的子文件夹培训而且测试.这些文件夹中填充了jpeg图像,用于作为SqueezeNet的输入。

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 = numel(categories(trainingData.Labels));newLearnableLayer = convolution2dLayer(1,numClasses,...“名字”“binaryconv”...“WeightLearnRateFactor”10...“BiasLearnRateFactor”10);lgraphSqueeze = replaceLayer(lgraphSqueeze,convLayer.Name,newLearnableLayer);classLayer = lgraphSqueeze.Layers(end);newClassLayer = classificationLayer(“名字”“二元”);lgraphSqueeze = replaceLayer(lgraphSqueeze,classLayer.Name,newClassLayer);

最后,设置重新训练SqueezeNet的选项。将初始学习速率设置为1e-4,将最大epoch数设置为15,将小批大小设置为10。使用随机梯度下降与动量。

Ilr = 1e-4;mxEpochs = 15;mbSize = 10;opts = trainingOptions(“个”“InitialLearnRate”劳工关系,...“MaxEpochs”mxEpochs,“MiniBatchSize”mbSize,...“阴谋”“训练进步”“ExecutionEnvironment”“cpu”);

培训网络。如果你有兼容的GPU,trainNetwork自动使用GPU,训练在一分钟内完成。如果你没有兼容的GPU,trainNetwork使用中央处理器,训练大约需要5分钟。训练时间确实会根据一些因素而有所不同。在本例中,通过设置ExecutionEnvironment参数cpu

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

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

predictedLabels =分类(CWTnet,testData,“ExecutionEnvironment”“cpu”);accuracy = sum(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(categorical({“气缸”“锥”}), 50 50);trainLabels = trainLabels(:);trainData = num2cell(table2array(RCSReturns)',2);testData = num2cell(table2array(RCSReturnsTest)',2);testLabels = repelem(categorical({“气缸”“锥”}), [25] 25);testLabels = testLabels(:);RNNnet = trainNetwork(trainData,trainLabels,LSTMlayers,options);

该系统的精度也被绘制出来。

predictedLabels =分类(RNNnet,testData,“ExecutionEnvironment”“cpu”);accuracy = sum(predictedLabels == testLabels)/50*100
准确度= 100

结论

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

有了这个数据集,我们也通过将原始数据输入LSTM来获得类似的精度。在更复杂的数据集中,原始数据可能固有的变量太大,以至于模型无法从原始数据中学习健壮的特征,在使用LSTM之前,您可能不得不求助于特征提取。