主要内容

使用深度学习的行人和自行车分类

这个例子展示了如何使用深度学习网络和时频分析,根据行人和骑自行车的人的微多普勒特征进行分类。

放置在雷达前的物体不同部分的运动产生可用于识别物体的微多普勒特征。这个例子使用卷积神经网络(CNN)根据他们的签名来识别行人和骑自行车的人。

这个例子使用模拟数据训练深度学习网络,然后检查网络如何对两种重叠签名进行分类。

仿真合成数据生成

用于训练网络的数据是使用backscatterPedestrianbackscatterBicyclist从雷达工具箱™。这些功能分别模拟了行人和骑自行车者反射信号的雷达后向散射。

辅助函数helperBackScatterSignals生成指定数量的行人、自行车和汽车雷达返回值。由于示例的目的是对行人和骑自行车的人进行分类,因此本示例仅将汽车签名视为噪声源。为了了解要解决的分类问题,请检查行人、骑自行车者和汽车的微多普勒信号的一个实现。(对于每种实现,返回信号都有维度 N ——- - - - - - N ,在那里 N 的数量是多少?夏令时间样品和 N 的数量是多少?标准时间样本。看到雷达数据立方体了解更多信息。)

numPed = 1;%行人实现的数量numBic = 1;%骑自行车的人实现的数量numCar = 1;%汽车实现的数量[xPedRec, xbicrecc, xcarrecc,Tsamp] = helperBackScatterSignals(numPed,numBic,numCar);

辅助函数helperDopplerSignatures计算雷达回波的短时傅里叶变换(STFT)以生成微多普勒特征。为了获得微多普勒特征,使用辅助函数对每个信号应用STFT和预处理方法。

[SPed,T,F] = helperDopplerSignatures(xPedRec,Tsamp);[SBic,~,~] = helperDopplerSignatures(xBicRec,Tsamp);[SCar,~,~] = helperDopplerSignatures(xcarc,Tsamp);

绘制行人、自行车和汽车实现的时频图。

绘制第一个实现的对象图subplot(1,3,1) imagesc(T,F,SPed(:,:,1)) ylabel(的频率(赫兹))标题(“行人”)轴广场xysubplot(1,3,2) imagesc(T,F,SBic(:,:,1)) xlabel(“时间(s)”)标题(“自行车”)轴广场xysubplot(1,3,3) imagesc(T,F,SCar(:,:,1))“汽车”)轴广场xy

归一化谱图(STFT绝对值)表明,这三个物体具有相当明显的特征。具体而言,行人和骑自行车的人的频谱图分别由手臂和腿的摆动和车轮的旋转引起丰富的微多普勒特征。相比之下,在本例中,汽车被建模为具有刚体的点目标,因此汽车的频谱图显示短期多普勒频移变化较小,表明微多普勒效应较小。

结合对象

将单个实现分类为行人或骑自行车者相对简单,因为行人和骑自行车者的微多普勒特征不同。然而,在加上高斯噪声或汽车噪声的情况下,对多个重叠的行人或骑自行车的人进行分类要困难得多。

如果雷达的探测区域内同时存在多个目标,则接收到的雷达信号为所有目标的探测信号之和。作为示例,生成具有高斯背景噪声的行人和自行车的接收雷达信号。

%在接收器上配置高斯噪声水平Rx =相位。ReceiverPreamp (“获得”25岁的“NoiseFigure”10);xradarec = complex(0 (size(xPedRec)));2 = 1:尺寸(xPedRec, 3) xRadarRec(:,:,(二)= rx (xPedRec (:,:, ii) + xBicRec(:,:,(二));结束

然后利用STFT获得接收信号的微多普勒特征。

[S,~,~] = helperDopplerSignatures(xradarec,Tsamp);图显示亮度图像(T、F S (:,: 1))绘制第一个实现xy包含(“时间(s)”) ylabel (的频率(赫兹))标题(“行人和骑自行车的人的频谱图”

由于行人和自行车的特征在时间和频率上重叠,很难区分这两个对象。

生成训练数据

在本例中,您通过使用由具有不同属性的对象的模拟实现组成的数据来训练CNN——例如,骑自行车的人以不同的速度踩踏板,不同高度的行人以不同的速度行走。假设雷达固定在原点,在一种实现中,一个或多个目标分别沿X轴和Y轴均匀分布在[5,45]和[- 10,10]米的矩形区域内。

随机调整的三个对象的其他属性如下:

1)行人

  • 高度-均匀分布在[1.5,2]米的间隔内

  • 航向-均匀分布在[- 180,180]度区间内

  • 速度-均匀分布在[0,1.4]区间内h米/秒,其中h是高度值

2)骑自行车

  • 航向-均匀分布在[- 180,180]度区间内

  • 速度-均匀分布在[1,10]米/秒的间隔内

  • 齿轮传动比-均匀分布在[0.5,6]区间内

  • 踩踏板或滑行- 50%踩踏板的可能性(滑行是指骑单车者在不踩踏板的情况下移动)

3)汽车

  • 速度-沿X和Y方向均匀分布在[0,10]米/秒的间隔内

卷积网络的输入是由以分贝表示的频谱图组成的微多普勒特征,归一化为[0,1],如图所示:

雷达回波来自不同的物体和物体的不同部位。根据配置的不同,一些返回值比其他返回值强得多。较强的回报往往会掩盖较弱的回报。对数缩放通过使返回强度具有可比性来增强特征。幅度归一化有助于CNN更快收敛。

该数据集包含以下场景的实现:

  • 现场有一名行人

  • 现场有一名骑自行车的人

  • 现场有一名行人和一名骑车人

  • 现场有两名行人

  • 现场有两名骑自行车的人

下载数据

本例的数据由使用辅助函数生成的20,000个行人、20,000个骑自行车的人和12,500个汽车信号组成helperBackScatterSignalshelperDopplerSignatures。将信号分为两个数据集:一个是没有汽车噪声样本的数据集,一个是有汽车噪声样本的数据集。

对于第一个数据集(没有汽车噪声),将行人和自行车信号合并,加入高斯噪声,并计算微多普勒特征,为待分类的五个场景中的每个场景生成5000个特征。

在每个类别中,80%的签名(即4000个签名)保留给训练数据集,20%的签名(即1000个签名)保留给测试数据集。

为了生成第二个数据集(带有汽车噪声),遵循了第一个数据集的过程,只是汽车噪声被添加到50%的签名中。在训练数据集和测试数据集中,有和没有汽车噪声的特征所占的比例是相同的。

下载并解压缩临时目录中的数据,其位置由MATLAB®指定tempdir命令。数据大小为21gb,下载过程可能需要一些时间。如果您将数据放在不同的文件夹中tempdir,在后续说明中修改目录名称。

%下载数据dataURL =“https://ssd.mathworks.com/金宝appsupportfiles/SPT/data/PedBicCarData.zip”;saveFolder = fullfile(tempdir,“PedBicCarData”);zipFile = fullfile(tempdir,“PedBicCarData.zip”);如果~存在(zipFile“文件”) websave (zipFile dataURL);elseif~存在(saveFolder“dir”%解压缩数据解压缩(zipFile tempdir)结束

数据文件如下:

  • trainDataNoCar.mat包含训练数据集trainDataNoCar它的标签集trainLabelNoCar

  • testDataNoCar.mat包含测试数据集testDataNoCar它的标签集testLabelNoCar

  • trainDataCarNoise.mat包含训练数据集trainDataCarNoise它的标签集trainLabelCarNoise

  • testDataCarNoise.mat包含测试数据集testDataCarNoise它的标签集testLabelCarNoise

  • TF.mat包含微多普勒信号的时间和频率信息。

网络体系结构

创建一个具有五个卷积层和一个完全连接层的CNN。前四个卷积层之后是一个批归一化层、一个整流线性单元(ReLU)激活层和一个最大池化层。在最后一个卷积层中,将最大池化层替换为平均池化层。输出层是softmax激活后的分类层。有关网络设计指导,请参见深度学习技巧和技巧(深度学习工具箱)

layers = [imageInputLayer([size(S,1),size(S,2),1],“归一化”“没有”16) convolution2dLayer(10日,“填充”“相同”) batchNormalizationLayer reluLayer maxPooling2dLayer(10,“步”32岁的,2)convolution2dLayer (5“填充”“相同”) batchNormalizationLayer reluLayer maxPooling2dLayer(10,“步”32岁的,2)convolution2dLayer (5“填充”“相同”) batchNormalizationLayer reluLayer maxPooling2dLayer(10,“步”32岁的,2)convolution2dLayer (5“填充”“相同”) batchNormalizationLayer reluLayer maxPooling2dLayer(5,“步”32岁的,2)convolution2dLayer (5“填充”“相同”) batchNormalizationLayer reluLayer averagePooling2dLayer(2,“步”,2) fulllyconnectedlayer (5) softmaxLayer classificationLayer
layers = 24x1层数组1”图像输入400 x144x1图片2”卷积16 10 x10旋转步[1]和填充“相同”3“批量标准化批量标准化4”ReLU ReLU 5”麦克斯池10 x10马克斯池步(2 - 2)和填充[0 0 0 0]6”卷积32 5 x5旋转步[1]和填充“相同”7“批量标准化批量标准化8”ReLU ReLU 9”麦克斯池10 x10马克斯池步(2 - 2)和填充[0 0 0 0]10”卷积32 5 x5的隆起步[1]和填充“相同”11“批量标准化批量标准化12”ReLU ReLU 13“马克斯池10 x10马克斯池步[2 2]和填充[0 0 0 0]14“卷积32 5 x5旋转步[1]和填充“相同”15“批量标准化批量标准化16”ReLU ReLU 17”麦克斯池5 x5 Max池步(2 - 2)和填充[0 0 0 0]18“卷积32 5 x5旋转步[1]和填充相同19”批量标准化批量标准化20 " ReLU ReLU 21 "平均池化2x2平均池化与跨距[2 2]和填充[0 0 0 0]22 "完全连接5完全连接层23 " Softmax Softmax 24 "分类输出交叉

指定用于训练CNN的优化求解器和超参数trainingOptions。本例使用ADAM优化器,小批大小为128。使用CPU或GPU训练网络。使用GPU需要Parallel Computing Toolbox™。要查看支持哪些gpu,请参见金宝appGPU计算要求(并行计算工具箱)。其他参数请参见trainingOptions(深度学习工具箱)。本例使用GPU进行训练。

options = trainingOptions(“亚当”“ExecutionEnvironment”“图形”“MiniBatchSize”, 128,“MaxEpochs”30岁的“InitialLearnRate”1飞行,“LearnRateSchedule”“分段”“LearnRateDropFactor”, 0.1,“LearnRateDropPeriod”10“洗牌”“every-epoch”“详细”假的,“阴谋”“训练进步”);

分类签名没有汽车噪音

加载没有汽车噪音的数据集,并使用辅助函数helperPlotTrainData要在训练数据集中为这五个类别中的每一个绘制一个例子,

负载(fullfile (tempdir“PedBicCarData”“trainDataNoCar.mat”))%负载训练数据集负载(fullfile (tempdir“PedBicCarData”“testDataNoCar.mat”))%负载测试数据集负载(fullfile (tempdir“PedBicCarData”“TF.mat”))%加载时间和频率信息helperPlotTrainData (trainDataNoCar trainLabelNoCar T、F)

训练你创建的CNN。您可以查看在训练过程中的准确性和损失。在30次训练中,训练过程达到了近95%的准确率。

trainedNetNoCar = trainNetwork(trainDataNoCar,trainLabelNoCar,layers,options);

使用训练有素的网络和分类函数来获取测试数据集的预测标签testDataNoCar。的变量predTestLabel包含网络预测。对于不含汽车噪声的测试数据集,该网络的准确率达到95%左右。

predTestLabel = classified (trainedNetNoCar,testDataNoCar);testAccuracy = mean(predTestLabel == testLabelNoCar)
testAccuracy = 0.9530

使用混淆矩阵查看有关每个类别的预测性能的详细信息。训练后网络的混淆矩阵表明,在每个类别中,网络预测测试数据集中信号的标签具有很高的准确性。

图confusionchart (testLabelNoCar predTestLabel);

用汽车噪音分类签名

为了分析汽车噪声的影响,将包含汽车噪声的数据与trainedNetNoCar网络,在没有汽车噪音的情况下训练。

加载汽车噪声损坏的测试数据集testDataCarNoise.mat

负载(fullfile (tempdir“PedBicCarData”“testDataCarNoise.mat”))

将汽车噪声损坏的测试数据集输入网络。带有汽车噪声的测试数据集的预测精度显著下降到70%左右,因为网络从未看到包含汽车噪声的训练样本。

predTestLabel = classification (trainedNetNoCar,testDataCarNoise);testAccuracy = mean(predTestLabel == testLabelCarNoise)
testAccuracy = 0.7176

混淆矩阵显示,大多数预测错误发生在网络从“行人”、“行人+行人”或“行人+骑自行车者”类别中提取场景并将其分类为“骑自行车者”时。

confusionchart (testLabelCarNoise predTestLabel);

汽车噪声严重影响了分类器的性能。为了解决这个问题,使用包含汽车噪声的数据来训练CNN。

通过在训练数据集中加入汽车噪声对CNN进行再训练

加载汽车噪声损坏的训练数据集trainDataCarNoise.mat

负载(fullfile (tempdir“PedBicCarData”“trainDataCarNoise.mat”))

利用被汽车噪声破坏的训练数据集对网络进行重新训练。在30次训练中,训练过程达到了近90%的准确率。

trainedNetCarNoise = trainNetwork(trainDataCarNoise,trainLabelCarNoise,layers,options);

将汽车噪声损坏的测试数据集输入网络trainedNetCarNoise。预测精度约为87%,比未使用汽车噪声样本训练的网络性能提高了约15%。

predTestLabel = classification (trainedNetCarNoise,testDataCarNoise);testAccuracy = mean(predTestLabel == testLabelCarNoise)
testAccuracy = 0.8728

混淆矩阵表明网络trainedNetCarNoise在预测只有一个行人和两个行人的场景时表现得更好。

confusionchart (testLabelCarNoise predTestLabel);

案例研究

为了更好地理解网络的性能,我们可以检查一下网络对重叠签名进行分类的性能。本节只是为了说明。由于GPU训练的不确定性行为,当您重新运行此示例时,您可能不会在本节中获得相同的分类结果。

例如,汽车噪声损坏的测试数据的签名#4,没有汽车噪声,有两个骑自行车的人重叠的微多普勒特征。网络正确地预测了场景中有两个骑自行车的人。

K = 4;显示亮度图像(T、F testDataCarNoise (:,:,:, k))轴xy包含(“时间(s)”) ylabel (的频率(赫兹))标题(“真相:”+ +字符串(testLabelCarNoise (k))预测:+字符串(predTestLabel (k)))

从图上看,这个签名似乎只有一个骑自行车的人。加载数据CaseStudyData.mat场景中的两个物体。数据包含沿快速时间求和的返回信号。将STFT应用于每个信号。

负载CaseStudyData.matM = 200;% FFT窗口长度β = 6;%窗口参数w = kaiser(M,beta);%凯撒窗R = floor(1.7*(M-1)/(beta+1));%粗略估计overlap = M-R;重叠长度%[Sc,F,T] = stft(x,1/Tsamp,)“窗口”w,“FFTLength”M * 2,“OverlapLength”, noverlap);2 = 1:2次要情节(1、2、2)显示亮度图像(T F 10 * log10 (abs (Sc (:,: ii))))包含(“时间(s)”) ylabel (的频率(赫兹))标题(“自行车”)轴广场xy标题([“自行车”Num2str (ii)]) = colorbar;c.Label.String =“数据库”;结束

骑车者2的信号振幅比骑车者1弱得多,并且两个骑车者的信号重叠。当两个签名重叠时,无法从视觉上区分。然而,神经网络对场景进行了正确的分类。

另一个有趣的例子是,当网络将汽车噪声与骑自行车的人混淆时,就像汽车噪声损坏的测试数据的签名#267一样:

图k = 267;显示亮度图像(T、F testDataCarNoise (:,:,:, k))轴xy包含(“时间(s)”) ylabel (的频率(赫兹))标题(“真相:”+ +字符串(testLabelCarNoise (k))预测:+字符串(predTestLabel (k)))

与汽车的信号相比,骑自行车的人的信号较弱,而且汽车噪声的信号有尖峰。由于汽车的特征与骑自行车的人或低速行走的行人的特征非常相似,并且微多普勒效应很小,因此网络对场景进行错误分类的可能性很大。

参考文献

[1]陈,V. C.。雷达中的微多普勒效应。伦敦:Artech House, 2011。

[2] Gurbuz, s.z和Amin, m.g。基于雷达的人体运动识别与深度学习:在室内监测中的应用前景。IEEE信号处理杂志。第36卷,第4期,2019年,第16-28页。

[3] belbelovane, D., C. C. Chen。77 GHz汽车雷达传感器行人和自行车的微多普勒特性在第十一届欧洲天线与传播会议,2912 - 2916。巴黎:欧洲天线与传播协会,2017。

bbbangelov, A. A. Robertson, R. Murray-Smith和F. Fioranelli。利用汽车雷达和深度神经网络对不同运动目标进行实用分类IET雷达,声纳和导航。第12卷,第10期,2017年,第1082-1089页。

[10]帕拉沙尔,K. N., M. C. ovenke, M. Rykunov, H. Sahli, A. Bourdoux。使用卷积自编码器进行低延迟目标分类的微多普勒特征提取在2017 IEEE雷达大会(RadarConf), 1739 - 1744。西雅图:IEEE, 2017。