Esta página es para la versión anterior. La página correspondiente en inglés ha sido eliminada en la versión actual.

Clasificación de peatones y ciclistas mediante el aprendizaje profundo

En este ejemplo se muestra cómo clasificar a peatones y ciclistas en función de sus características de micro-Doppler mediante una red de aprendizaje profundo y análisis de frecuencia de tiempo.

Los movimientos de diferentes partes de un objeto colocados delante de un radar producen firmas micro-Doppler que se pueden utilizar para identificar el objeto. En este ejemplo se utiliza una red neuronal convolucional (CNN) para identificar a peatones y ciclistas en función de sus firmas.

En este ejemplo se entrena la red de aprendizaje profundo mediante datos simulados y, a continuación, se examina el rendimiento de la red al clasificar dos casos de firmas superpuestas.

Generación de datos sintéticos por simulación

Los datos utilizados para entrenar la red se generan mediante y desde Phased Array System Toolbox™.backscatterPedestrianbackscatterBicyclist Estas funciones simulan la retrodispersión del radar de las señales reflejadas por peatones y ciclistas, respectivamente.

La función auxiliar helperBackScatterSignals genera un número especificado de retornos de radar de peatones, ciclistas y automóviles. Dado que el propósito del ejemplo es clasificar a peatones y ciclistas, este ejemplo considera las firmas de automóviles solo como fuentes de ruido. Para tener una idea del problema de clasificación a resolver, examine una realización de una firma micro-Doppler de un peatón, un ciclista y un coche. (Para cada realización, las señales de retorno tienen dimensiones

<math display="inline">
<mrow>
<msub>
<mrow>
<mi mathvariant="italic">N</mi>
</mrow>
<mrow>
<mi mathvariant="normal">fast</mi>
</mrow>
</msub>
</mrow>
</math>
-por-
<math display="inline">
<mrow>
<msub>
<mrow>
<mi mathvariant="italic">N</mi>
</mrow>
<mrow>
<mi mathvariant="normal">slow</mi>
</mrow>
</msub>
</mrow>
</math>
Dónde
<math display="inline">
<mrow>
<msub>
<mrow>
<mi mathvariant="italic">N</mi>
</mrow>
<mrow>
<mi mathvariant="normal">fast</mi>
</mrow>
</msub>
</mrow>
</math>
es el número de muestras ytiempo rápido
<math display="inline">
<mrow>
<msub>
<mrow>
<mi mathvariant="italic">N</mi>
</mrow>
<mrow>
<mi mathvariant="normal">slow</mi>
</mrow>
</msub>
</mrow>
</math>
es el número de muestras.lento Consulte para obtener más información.)Radar Data Cube (Phased Array System Toolbox)

numPed = 1; % Number of pedestrian realizations numBic = 1; % Number of bicyclist realizations numCar = 1; % Number of car realizations [xPedRec,xBicRec,xCarRec,Tsamp] = helperBackScatterSignals(numPed,numBic,numCar);

La función auxiliar helperDopplerSignatures calcula la transformación de Fourier (STFT) de corta distancia de un retorno de radar para generar la firma micro-Doppler. Para obtener las firmas micro-Doppler, utilice las funciones auxiliares para aplicar el STFT y un método de preprocesamiento a cada señal.

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

Trazar los mapas de frecuencia de tiempo para las realizaciones de peatones, ciclistas y coches.

% Plot the first realization of objects figure subplot(1,3,1) imagesc(T,F,SPed(:,:,1)) ylabel('Frequency (Hz)') title('Pedestrian') axis square xy  subplot(1,3,2) imagesc(T,F,SBic(:,:,1)) xlabel('Time (s)') title('Bicyclist')  axis square xy  subplot(1,3,3) imagesc(T,F,SCar(:,:,1)) title('Car') axis square xy

Los espectrogramas normalizados (valores absolutos STFT) muestran que los tres objetos tienen firmas bastante distintas. Específicamente, los espectrogramas del peatón y el ciclista tienen ricas firmas micro-Doppler causadas por el balanceo de brazos y piernas y la rotación de ruedas, respectivamente. Por el contrario, en este ejemplo, el coche se modela como un objetivo de punto con cuerpo rígido, por lo que el espectrograma del coche muestra que el cambio de frecuencia Doppler a corto plazo varía poco, lo que indica poco efecto micro-Doppler.

Combinación de objetos

Clasificar una sola realización como peatón o ciclista es relativamente simple porque las firmas de micro-Doppler de peatones y ciclistas son diferentes. Sin embargo, clasificar a varios peatones o ciclistas superpuestos, con la adición de ruido gaussiano o ruido del coche, es mucho más difícil.

Si existen varios objetos en la región de detección del radar al mismo tiempo, la señal de radar recibida es una suma de las señales de detección de todos los objetos. Como ejemplo, genere la señal de radar recibida para un peatón y ciclista con ruido de fondo gaussiano.

% Configure Gaussian noise level at the receiver rx = phased.ReceiverPreamp('Gain',25,'NoiseFigure',10);  xRadarRec = complex(zeros(size(xPedRec))); for ii = 1:size(xPedRec,3)     xRadarRec(:,:,ii) = rx(xPedRec(:,:,ii) + xBicRec(:,:,ii)); end

A continuación, obtenga las firmas micro-Doppler de la señal recibida utilizando el STFT.

[S,~,~] = helperDopplerSignatures(xRadarRec,Tsamp);  figure imagesc(T,F,S(:,:,1)) % Plot the first realization axis xy xlabel('Time (s)') ylabel('Frequency (Hz)') title('Spectrogram of a Pedestrian and a Bicyclist')

Debido a que las firmas de peatones y ciclistas se superponen en el tiempo y la frecuencia, diferenciar entre los dos objetos es difícil.

Generar datos de formación

En este ejemplo, se entrena una CNN mediante el uso de datos que consisten en realizaciones simuladas de objetos con diferentes propiedades, por ejemplo, ciclistas que pedalean a diferentes velocidades y peatones con diferentes alturas caminando a diferentes velocidades. Suponiendo que el radar esté fijado en el origen, en una sola realización, un objeto o varios objetos se distribuyen uniformemente en un área rectangular de [5, 45] y [–10, 10] metros a lo largo de los ejes X e Y, respectivamente.

Las otras propiedades de los tres objetos que se ajustan aleatoriamente son las siguientes:

1) Peatones

  • Altura — Distribuida uniformemente en el intervalo de [1,5, 2] metros

  • Encabezado — Distribuido uniformemente en el intervalo de [–180, 180] grados

  • Velocidad — Distribuida uniformemente en el intervalo de [0, 1,4 ] metros/segundo, dondeh h es el valor de altura

2) Ciclistas

  • Encabezado — Distribuido uniformemente en el intervalo de [–180, 180] grados

  • Velocidad — Distribuida uniformemente en el intervalo de [1, 10] metros/segundo

  • Relación de transmisión de engranajes — Distribuida uniformemente en el intervalo de [0,5, 6]

  • Pedaleo o costamiento — 50% de probabilidad de pedalear (costar significa que el ciclista se está moviendo sin pedalear)

3) Coches

  • Velocidad — Distribuido uniformemente en el intervalo de [0, 10] metros/segundo a lo largo de las direcciones X e Y

La entrada a la red convolucional es las firmas micro-Doppler que consisten en espectrogramas expresados en decibelios y normalizados a [0, 1], como se muestra en esta figura:

Los retornos de radar se originan a partir de diferentes objetos y diferentes partes de objetos. Dependiendo de la configuración, algunos retornos son mucho más fuertes que otros. Los retornos más fuertes tienden a oscurecer a los más débiles. La escala logarítmica aumenta las características al hacer que las fortalezas de retorno sean comparables. La normalización de amplitud ayuda a la CNN a converger más rápido.

El conjunto de datos contiene realizaciones de las siguientes escenas:

  • Un peatón presente en la escena

  • Un ciclista presente en la escena

  • Un peatón y un ciclista presentes en la escena

  • Dos peatones presentes en la escena

  • Dos ciclistas presentes en la escena

Descargar datos

Los datos de este ejemplo consisten en 20.000 señales de peatones, 20.000 ciclistas y 12.500 señales de coche generadas mediante las funciones auxiliares y .helperBackScatterSignalshelperDopplerSignatures Las señales se dividen en dos conjuntos de datos: uno sin muestras de ruido de coche y otro con muestras de ruido de coche.

Para el primer conjunto de datos (sin ruido del coche), se combinaron las señales de peatones y ciclistas, se añadió ruido gaussiano y se calcularon las firmas micro-Doppler para generar 5000 firmas para cada una de las cinco escenas que se clasificarán.

En cada categoría, el 80% de las firmas (es decir, 4000 firmas) se reservan para el conjunto de datos de entrenamiento, mientras que el 20% de las firmas (es decir, 1000 firmas) se reservan para el conjunto de datos de prueba.

Para generar el segundo conjunto de datos (con ruido de coche), se siguió el procedimiento para el primer conjunto de datos, excepto que el ruido del coche se agregó al 50% de las firmas. La proporción de firmas con y sin ruido del coche es la misma en los conjuntos de datos de entrenamiento y prueba.

Descargue y descomprima los datos en el directorio temporal, cuya ubicación se especifica mediante el mandato de MATLAB®.tempdir Debido al gran tamaño del conjunto de datos, este proceso puede tardar varios minutos. Si tiene los datos en una carpeta diferente de , cambie el nombre del directorio en las instrucciones posteriores.tempdir

% Download the data dataURL = 'https://www.mathworks.com/supportfiles/SPT/data/PedBicCarData.zip'; saveFolder = fullfile(tempdir,'PedBicCarData');  zipFile = fullfile(tempdir,'PedBicCarData.zip'); if ~exist(saveFolder,'dir')     websave(zipFile,dataURL); end  % Unzip the data unzip(zipFile,tempdir)

Los archivos de datos son los siguientes:

  • contiene el conjunto de datos de entrenamiento y su conjunto de etiquetas.trainDataNoCar.mattrainDataNoCartrainLabelNoCar

  • contiene el conjunto de datos de prueba y su conjunto de etiquetas .testDataNoCar.mattestDataNoCartestLabelNoCar

  • contiene el conjunto de datos de entrenamiento y su conjunto de etiquetas.trainDataCarNoise.mattrainDataCarNoisetrainLabelCarNoise

  • contiene el conjunto de datos de prueba y su conjunto de etiquetas .testDataCarNoise.mattestDataCarNoisetestLabelCarNoise

  • contiene la información de tiempo y frecuencia para las firmas micro-Doppler.TF.mat

Arquitectura de red

Cree una CNN con cinco capas de convolución y una capa totalmente conectada. Las primeras cuatro capas de convolución van seguidas de una capa de normalización por lotes, una capa de activación de unidad lineal rectificada (ReLU) y una capa de agrupación máxima. En la última capa de convolución, la capa de agrupación máxima se sustituye por una capa de agrupación media. La capa de salida es una capa de clasificación después de la activación de softmax. Para obtener instrucciones sobre el diseño de red, consulte .Deep Learning Tips and Tricks (Deep Learning Toolbox)

layers = [     imageInputLayer([size(S,1),size(S,2),1],'Normalization','none')          convolution2dLayer(10,16,'Padding','same')     batchNormalizationLayer     reluLayer     maxPooling2dLayer(10,'Stride',2)          convolution2dLayer(5,32,'Padding','same')     batchNormalizationLayer     reluLayer     maxPooling2dLayer(10,'Stride',2)          convolution2dLayer(5,32,'Padding','same')     batchNormalizationLayer     reluLayer     maxPooling2dLayer(10,'Stride',2)          convolution2dLayer(5,32,'Padding','same')     batchNormalizationLayer     reluLayer     maxPooling2dLayer(5,'Stride',2)          convolution2dLayer(5,32,'Padding','same')     batchNormalizationLayer     reluLayer     averagePooling2dLayer(2,'Stride',2)          fullyConnectedLayer(5)     softmaxLayer          classificationLayer]
layers =    24x1 Layer array with layers:       1   ''   Image Input             400x144x1 images      2   ''   Convolution             16 10x10 convolutions with stride [1  1] and padding 'same'      3   ''   Batch Normalization     Batch normalization      4   ''   ReLU                    ReLU      5   ''   Max Pooling             10x10 max pooling with stride [2  2] and padding [0  0  0  0]      6   ''   Convolution             32 5x5 convolutions with stride [1  1] and padding 'same'      7   ''   Batch Normalization     Batch normalization      8   ''   ReLU                    ReLU      9   ''   Max Pooling             10x10 max pooling with stride [2  2] and padding [0  0  0  0]     10   ''   Convolution             32 5x5 convolutions with stride [1  1] and padding 'same'     11   ''   Batch Normalization     Batch normalization     12   ''   ReLU                    ReLU     13   ''   Max Pooling             10x10 max pooling with stride [2  2] and padding [0  0  0  0]     14   ''   Convolution             32 5x5 convolutions with stride [1  1] and padding 'same'     15   ''   Batch Normalization     Batch normalization     16   ''   ReLU                    ReLU     17   ''   Max Pooling             5x5 max pooling with stride [2  2] and padding [0  0  0  0]     18   ''   Convolution             32 5x5 convolutions with stride [1  1] and padding 'same'     19   ''   Batch Normalization     Batch normalization     20   ''   ReLU                    ReLU     21   ''   Average Pooling         2x2 average pooling with stride [2  2] and padding [0  0  0  0]     22   ''   Fully Connected         5 fully connected layer     23   ''   Softmax                 softmax     24   ''   Classification Output   crossentropyex 

Especifique el solucionador de optimización y los hiperparámetros para entrenar la CNN mediante .trainingOptions En este ejemplo se utiliza el optimizador ADAM y un tamaño de minilote de 128. Entrene la red mediante una CPU o GPU. El uso de una GPU requiere Parallel Computing Toolbox™ y una GPU NVIDIA® habilitada® con CUDA con capacidad de computación 3.0 o superior. Para obtener información sobre otros parámetros, consulte .trainingOptions En este ejemplo se utiliza una GPU para el entrenamiento.

options = trainingOptions('adam', ...     'ExecutionEnvironment','gpu',...     'MiniBatchSize',128, ...     'MaxEpochs',30, ...     'InitialLearnRate',1e-2, ...     'LearnRateSchedule','piecewise', ...     'LearnRateDropFactor',0.1, ...     'LearnRateDropPeriod',10, ...     'Shuffle','every-epoch', ...     'Verbose',false, ...     'Plots','training-progress');

Clasificar firmas sin ruido del coche

Cargue el conjunto de datos sin ruido del coche y utilice la función auxiliar helperPlotTrainData para trazar un ejemplo de cada una de las cinco categorías del conjunto de datos de entrenamiento,

load(fullfile(tempdir,'PedBicCarData','trainDataNoCar.mat')) % load training data set load(fullfile(tempdir,'PedBicCarData','testDataNoCar.mat')) % load test data set load(fullfile(tempdir,'PedBicCarData','TF.mat')) % load time and frequency information  helperPlotTrainData(trainDataNoCar,trainLabelNoCar,T,F)

Entrena a la CNN que creaste. Puede ver la precisión y la pérdida durante el proceso de entrenamiento. En 30 épocas, el proceso de entrenamiento alcanza una precisión de casi el 95%.

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

Utilice la red entrenada y la función para obtener las etiquetas predichas para el conjunto de datos de prueba.classifytestDataNoCar La variable contiene las predicciones de red.predTestLabel La red alcanza una precisión de alrededor del 95% para el conjunto de datos de prueba sin el ruido del coche.

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

Utilice una matriz de confusión para ver información detallada sobre el rendimiento de la predicción para cada categoría. La matriz de confusión para la red entrenada muestra que, en cada categoría, la red predice las etiquetas de las señales en el conjunto de datos de prueba con un alto grado de precisión.

figure confusionchart(testLabelNoCar,predTestLabel);

Clasificar firmas con ruido de coche

Para analizar los efectos del ruido del coche, clasifique los datos que contienen el ruido del coche con la red, que se entrenó sin ruido del coche.trainedNetNoCar

Cargue el conjunto de datos de prueba dañado por el ruido del coche.testDataCarNoise.mat

load(fullfile(tempdir,'PedBicCarData','testDataCarNoise.mat'))

Introduzca el conjunto de datos de prueba dañado por el ruido del coche en la red. La precisión de predicción para el conjunto de datos de prueba con el ruido del coche disminuye significativamente, a alrededor del 70%, porque la red nunca vio muestras de entrenamiento que contienen el ruido del coche.

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

La matriz de confusión muestra que la mayoría de los errores de predicción se producen cuando la red toma escenas de las clases "peatonal", "peatonal+peatonal" o "peatonal+ciclista" y las clasifica como "ciclistas".

confusionchart(testLabelCarNoise,predTestLabel);

El ruido del coche impide significativamente el rendimiento del clasificador. Para resolver este problema, entrene a CNN utilizando datos que contengan ruido del coche.

Reentrene a CNN añadiendo ruido de coche al conjunto de datos de entrenamiento

Cargue el conjunto de datos de entrenamiento dañado por el ruido del coche.trainDataCarNoise.mat

load(fullfile(tempdir,'PedBicCarData','trainDataCarNoise.mat'))

Vuelva a entrenar la red mediante el conjunto de datos de entrenamiento dañado por el ruido del coche. En 30 épocas, el proceso de entrenamiento alcanza una precisión de casi el 90%.

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

Introduzca el conjunto de datos de prueba dañado por el ruido del coche en la red.trainedNetCarNoise La precisión de predicción es de aproximadamente 87%, que es aproximadamente 15% mayor que el rendimiento de la red entrenada sin muestras de ruido del coche.

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

La matriz de confusión muestra que la red funciona mucho mejor en la predicción de escenas con un peatón y escenas con dos peatones.trainedNetCarNoise

confusionchart(testLabelCarNoise,predTestLabel);

Caso práctico

Para comprender mejor el rendimiento de la red, examine su rendimiento en la clasificación de las firmas superpuestas. Esta sección es sólo para la ilustración. Debido al comportamiento no determinista del entrenamiento de GPU, es posible que no obtenga los mismos resultados de clasificación en esta sección al volver a ejecutar este ejemplo.

Por ejemplo, la firma #4 de los datos de prueba dañados por el ruido del coche, que no tiene ruido del coche, tiene dos ciclistas con firmas micro-Doppler superpuestas. La red predice correctamente que la escena tiene dos ciclistas.

k = 4; imagesc(T,F,testDataCarNoise(:,:,:,k)) axis xy xlabel('Time (s)') ylabel('Frequency (Hz)') title('Ground Truth: '+string(testLabelCarNoise(k))+', Prediction: '+string(predTestLabel(k)))

De la trama, la firma parece ser de un solo ciclista. Cargue los datos de los dos objetos de la escena.CaseStudyData.mat Los datos contienen señales de retorno sumadas a lo largo del tiempo rápido. Aplique el STFT a cada señal.

load CaseStudyData.mat M = 200; % FFT window length beta = 6; % window parameter w = kaiser(M,beta); % kaiser window R = floor(1.7*(M-1)/(beta+1)); % ROUGH estimate noverlap = M-R; % overlap length  [Sc,F,T] = stft(x,1/Tsamp,'Window',w,'FFTLength',M*2,'OverlapLength',noverlap);  for ii = 1:2     subplot(1,2,ii)     imagesc(T,F,10*log10(abs(Sc(:,:,ii))))     xlabel('Time (s)')     ylabel('Frequency (Hz)')     title('Bicyclist')      axis square xy     title(['Bicyclist ' num2str(ii)])     c = colorbar;     c.Label.String = 'dB'; end

Las amplitudes de la firma Ciclista 2 son mucho más débiles que las del ciclista 1, y las firmas de los dos ciclistas se superponen. Cuando se superponen, las dos firmas no se pueden distinguir visualmente. Sin embargo, la red neuronal clasifica la escena correctamente.

Otro caso de interés es cuando la red confunde el ruido del coche con un ciclista, como en la firma #267 de los datos de prueba dañados por el ruido del coche:

figure k = 267; imagesc(T,F,testDataCarNoise(:,:,:,k)) axis xy xlabel('Time (s)') ylabel('Frequency (Hz)') title('Ground Truth: '+string(testLabelCarNoise(k))+', Prediction: '+string(predTestLabel(k)))

La firma del ciclista es débil en comparación con la del coche, y la firma tiene picos por el ruido del coche. Debido a que la firma del coche se asemeja mucho a la de un ciclista pedaleando o a un peatón caminando a baja velocidad, y tiene poco efecto micro-Doppler, hay una alta posibilidad de que la red clasificará la escena incorrectamente.

Referencias

[1] Chen, V.C. .The Micro-Doppler Effect in Radar Londres: Casa Artech, 2011.

[2] Gurbuz, S. Z., y Amin, M. G. "Reconocimiento de movimiento humano basado en radar con aprendizaje profundo: Aplicaciones prometedoras para la monitorización en interiores." .IEEE Signal Processing Magazine Vol. 36, Número 4, 2019, págs. 16–28.

[3] Belgiovane, D., y C. C. Chen. "Características micro-doppler de peatones y bicicletas para sensores de radar automotriz a 77 GHz." En 2912-2916. 11th European Conference on Antennas and Propagation (EuCAP), París: Asociación Europea sobre Antenas y Propagación, 2017.

[4] Angelov, A., A. Robertson, R. Murray-Smith y F. Fioranelli. "Clasificación práctica de diferentes objetivos en movimiento utilizando radares automotrices y redes neuronales profundas." . IET Radar, Sonar & Navigation Vol. 12, Número 10, 2017, págs. 1082–1089.

[5] Parashar, K. N., M. C. Oveneke, M. Rykunov, H. Sahli y A. Bourdoux. "Extracción de características de Micro-Doppler mediante codificadores automáticos convolucionales para clasificación de objetivos de baja latencia." En , 1739-1744.2017 IEEE Radar Conference (RadarConf) Seattle: IEEE, 2017.