主要内容

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

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

介绍

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

RCS合成

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

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

C = 3E8;FC = 850E6;[Cyrrcs,AZ,EL] = RCScylmerd(1,1,10,C,Fc);Helpertargetrcspatternplot(AZ,EL,Cylrcs);

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

cyltgt =分阶段。BackscatterRadarTarget (“PropagationSpeed”c...“OperatingFrequency”,fc,“AzimuthAngles”,AZ,'升级'埃尔,“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个样品。对气缸靶重复该过程,这导致具有50个气缸和50个锥形轮廓的701×100矩阵。在测试集中,我们使用25个气缸和25个锥形配置文件来创建701×50次训练集。由于计算时间长,训练数据预先计算并加载下面。

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

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

subplot(2,2,1) plot(cylinders aspectangle (1,:)) ylim([-90 90])) grid .标题('圆柱形角度与时间');包含(“时间指数”);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个小波,在第二滤波器组中每个八度音程。不变性刻度设置为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 (...训练疗法,...TrainLabels,...“学习者”模板,...“编码”“onevsone”...'classnames'分类({'圆筒'“锥”}));partitionedModel = crossval (classificationSVM,“KFold”5);[验证预期,验证算法] = kfoldpredict(partitionedmodel);ValidationAccuracy =(1  -  Kfoldloss(PartitionedModel,“LossFun”“ClassifError”)) * 100
validationAccuracy = 100

目标分类

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

predlabels = predict(分类,testfeatures);准确性= SUM(predlabels == testlabels)/ numel(testlabels)* 100
精度= 100

绘制混淆矩阵。

图('单位'“归一化”'位置',[0.2 . 0.2 . 0.5 .]);ccDCNN = confusionchart (TestLabels predLabels);ccDCNN。Title =“混乱图”;ccdcnn.columnsummary =“column-normalized”;ccDCNN。RowSummary ='行标准化'

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

CNN的迁移学习

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

负载SqueezeNet。

snet = squeezenet;

SqueezeNet由68层组成。与所有dcnn一样,SqueezeNet将卷积运算符级联起来,然后是非线性、池化或平均。SqueezeNet期望一个尺寸为227 * 227 * 3的图像输入,您可以通过下面的代码看到。

Sneter.Layers(1)
ans = ImageInputLayer with properties: Name: 'data' InputSize: [227 227 3] Hyperparameters DataAugmentation: 'none' normalize: 'zerocenter' normalize ationdimension: 'auto' Mean: [1×1×3 single]

此外,SqueezeNet被配置为能够识别1000个不同的类,您可以通过下面的代码看到这些类。

snet.Layers (68)
[1000×1 categorical] ClassWeights: 'none' OutputSize: 1000 Hyperparameters LossFunction: ' crossenropyex '

在接下来的一节中,我们将修改SqueezeNet的选择层,以便将其应用于我们的分类问题。

连续小波变换

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

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

很明显,前面所示的雷达回波以缓慢的变化变化为特征,加上前面所描述的大量瞬态下降。小波变换非常适合稀疏地表示这类信号。小波通过收缩来定位具有高时间分辨率的瞬态现象,通过拉伸来捕获缓慢变化的信号结构。获得并绘制一个圆柱体返回的连续小波变换。

CWT(RCSRETURNS {:,IDXcylinder(1)},“VoicesPerOctave”, 8)

连续小波变换同时捕捉到慢变(低频)波动和瞬态现象。对比圆柱返回的CWT和圆锥目标的CWT。

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

由于瞬态在确定目标回波是来自圆柱形目标还是圆锥目标时具有明显的重要性,我们选择连续小波变换作为理想的TFR。在获得每个目标回波的CWT后,我们将每个雷达回波的CWT做成图像。这些图像被调整大小以与SqueezeNet的输入层兼容,我们利用SqueezeNet对生成的图像进行分类。

图像准备

辅助功能,helpergenWaveletTFImg,获取每个雷达返回的CWT,重塑CWT以与SqueezeNet兼容,并将CWT写入jpeg文件。运行helpergenWaveletTFImg,选择一个parentDir你有写权限的地方。这个示例使用tempdir,但您可以使用机器上任何您有写权限的文件夹。助手函数创建培训测试设置文件夹下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层),使其具有与我们的新类数量2相同数量的1 × 1卷积。

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的选项。将初始学习速率设置为1e-4,将最大epoch数设置为15,迷你批处理大小设置为10。使用带动量的随机梯度下降。

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

训练网络。如果您有兼容的GPU,trainNetwork自动使用GPU和训练应该在一分钟内完成。如果你没有兼容的GPU,trainNetwork利用CPU,训练大约需要5分钟。训练时间会根据一些因素而有所不同。在本例中,通过设置execultenvironment.参数cpu

CWTnet = trainNetwork (trainingData lgraphSqueeze,选择);
初始化输入数据归一化。
|========================================================================================| | 时代| |迭代时间| Mini-batch | Mini-batch |基地学习  | | | | ( 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 |
|========================================================================================|

使用训练好的网络来预测保持测试集中的目标回报。

predictedLabels =分类(CWTnet testData,“ExecutionEnvironment”“cpu”);准确性= sum(predictedLabels == testData.Labels)/50*100
精度= 100

根据精确度和回忆度绘制混乱图。在这种情况下,100%的测试样本被正确分类。

图('单位'“归一化”'位置',[0.2 . 0.2 . 0.5 .]);ccDCNN = confusionchart (testData.Labels predictedLabels);ccDCNN。Title =“混乱图”;ccdcnn.columnsummary =“column-normalized”;ccDCNN。RowSummary ='行标准化'

LSTM

在本例的最后一节中,将描述一个LSTM工作流。首先定义LSTM层:

LSTMlayers = [...sequenceInputLayer (1) bilstmLayer (100“OutputMode”“最后一次”) full connectedlayer (2) softmaxLayer classiationlayer];选择= 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”);准确性= sum(predictedLabels == testLabels)/50*100
精度= 100

结论

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

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