exponenta event banner

Классификация пешеходов и велосипедистов с использованием глубокого обучения

Этот пример показывает, как классифицировать пешеходов и велосипедистов на основе их микродоплеровских характеристик с использованием сети глубокого обучения и частотно-временного анализа.

Движения различных частей объекта, помещенного перед радаром, дают микродоплеровские сигнатуры, которые можно использовать для идентификации объекта. В этом примере используется сверточная нейронная сеть (CNN) для идентификации пешеходов и велосипедистов на основе их подписей.

В этом примере обучается сеть глубокого обучения с использованием смоделированных данных, а затем рассматривается, как сеть выполняет классификацию двух случаев перекрывающихся сигнатур.

Создание синтетических данных путем моделирования

Данные, используемые для обучения сети, генерируются с помощью backscatterPedestrian и backscatterBicyclist от РЛС Toolbox™. Эти функции имитируют радиолокационное обратное рассеяние сигналов, отраженных от пешеходов и велосипедистов соответственно.

Вспомогательная функция helperBackScatterSignals формирует заданное число возвращений пешеходов, велосипедистов и автомобильных радаров. Поскольку целью примера является классификация пешеходов и велосипедистов, этот пример рассматривает автомобильные подписи только как источники шума. Чтобы получить представление о проблеме классификации для решения, изучите одну реализацию микродоплеровской сигнатуры от пешехода, велосипедиста и автомобиля. (Для каждой реализации обратные сигналы имеют размеры Nfast-by-Nslow, где Nfast - количество выборок быстрого времени, а Nslow - количество выборок медленного времени. Дополнительные сведения см. в разделе Куб радиолокационных данных.)

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);

Вспомогательная функция helperDopplerSignatures вычисляет кратковременное преобразование Фурье (STFT) радиолокационного возврата для генерации микродоплеровской сигнатуры. Для получения микродоплеровских сигнатур используйте вспомогательные функции для применения STFT и способа предварительной обработки к каждому сигналу.

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

Постройте график частотно-временных карт для реализации пешеходов, велосипедистов и автомобилей.

% 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

Нормализованные спектрограммы (абсолютные значения STFT) показывают, что три объекта имеют довольно различные сигнатуры. В частности, спектрограммы пешехода и велосипедиста имеют богатые микродоплеровские характеристики, вызванные качанием рук и ног и вращением колес соответственно. Напротив, в этом примере автомобиль моделируется как точечная мишень с жестким телом, поэтому спектрограмма автомобиля показывает, что кратковременный доплеровский сдвиг частоты мало изменяется, указывая на небольшой микродоплеровский эффект.

Объединение объектов

Классифицировать одну реализацию как пешехода или велосипедиста относительно просто, потому что микродоплеровские сигнатуры пешехода и велосипедиста различны. Однако классифицировать нескольких перекрывающихся пешеходов или велосипедистов, с добавлением гауссова шума или автомобильного шума, гораздо сложнее.

Если в области обнаружения РЛС одновременно существует несколько объектов, то принятый радиолокационный сигнал является суммированием сигналов обнаружения от всех объектов. Например, генерировать принятый радиолокационный сигнал для пешехода и велосипедиста с гауссовым фоновым шумом.

% 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

Затем получают микродоплеровские сигнатуры принятого сигнала с помощью 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')

Поскольку подписи пешеходов и велосипедистов перекрываются по времени и частоте, дифференцировать эти два объекта трудно.

Создание данных обучения

В этом примере вы обучаете CNN, используя данные, состоящие из моделируемых реализаций объектов с различными свойствами - например, велосипедисты, педалирующие на разных скоростях, и пешеходы с разными высотами, идущие на разных скоростях. Предполагая, что радар зафиксирован в начале координат, в одной реализации один объект или несколько объектов равномерно распределены в прямоугольной области [5, 45] и [-10, 10] метров по осям X и Y соответственно.

Другие свойства трех случайно настроенных объектов:

1) Пешеходы

  • Высота - равномерно распределена в интервале [1,5, 2] метров

  • Заголовок - Равномерно распределено в интервале [-180, 180] градусов

  • Скорость - равномерно распределена в интервале [0, 1.4 ч] м/с, где h - значение высоты

2) Велосипедисты

  • Заголовок - Равномерно распределено в интервале [-180, 180] градусов

  • Скорость - равномерно распределенная в интервале [1, 10] метров/с

  • Передаточное число - равномерно распределено в интервале [0,5, 6]

  • Педализация или кокасание - 50% вероятность педалирования (кокасание означает, что велосипедист движется без педалирования)

3) Автомобили

  • Скорость - равномерно распределена в интервале [0, 10] м/с вдоль направлений X и Y

Вход в сверточную сеть представляет собой микродоплеровские сигнатуры, состоящие из спектрограмм, выраженных в децибелах и нормированных к [0, 1], как показано на этом рисунке:

Возврат радара происходит от разных объектов и различных частей объектов. В зависимости от конфигурации некоторые возвраты намного сильнее других. Более сильная отдача, как правило, скрывает более слабые. Логарифмическое масштабирование увеличивает характеристики, делая возвращаемые значения сравнимыми. Нормализация амплитуды помогает CNN быстрее сходиться.

Набор данных содержит реализации следующих сцен:

  • Один пешеход, присутствующий на месте происшествия

  • Один велосипедист присутствует в сцене

  • Один пешеход и один велосипедист присутствуют на месте происшествия

  • В месте происшествия присутствуют два пешехода

  • В сцене присутствуют два велосипедиста

Загрузить данные

Данные для этого примера состоят из 20 000 пешеходов, 20 000 велосипедистов и 12 500 автомобильных сигналов, генерируемых с помощью функций помощника helperBackScatterSignals и helperDopplerSignatures. Сигналы делятся на два набора данных: один без отсчетов шума автомобиля и один с отсчетами шума автомобиля.

Для первого набора данных (без шума автомобиля) сигналы пешехода и велосипедиста были объединены, был добавлен гауссов шум, и микродоплеровские сигнатуры были вычислены для генерации 5000 сигнатур для каждой из пяти сцен, подлежащих классификации.

В каждой категории 80% подписей (то есть 4000 подписей) зарезервированы для набора данных обучения, в то время как 20% подписей (то есть 1000 подписей) зарезервированы для набора данных тестирования.

Для генерации второго набора данных (с автомобильным шумом) следовала процедура для первого набора данных, за исключением того, что автомобильный шум добавлялся к 50% подписей. Доля подписей с автомобильным шумом и без него одинакова в комплектах данных обучения и испытаний.

Скачайте и распакуйте данные во временном каталоге, расположение которого указано в MATLAB ® tempdir команда. Размер данных составляет 21 ГБ, и процесс загрузки может занять некоторое время. Если данные находятся в папке, отличной от tempdirизмените имя каталога в последующих инструкциях.

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

Файлы данных:

  • 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],'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

Укажите решатель оптимизации и гиперпараметры для обучения CNN с помощью trainingOptions. В этом примере используется оптимизатор ADAM и размер мини-пакета 128. Обучение сети с помощью ЦП или графического процессора. Для использования графического процессора требуется Toolbox™ параллельных вычислений. Сведения о том, какие графические процессоры поддерживаются, см. в разделе Поддержка графических процессоров по выпуску (Панель инструментов параллельных вычислений). Сведения о других параметрах см. в разделе trainingOptions (инструментарий глубокого обучения). В этом примере для обучения используется графический процессор.

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');

Классификация подписей без автомобильного шума

Загрузить набор данных без шума автомобиля и использовать функцию помощника helperPlotTrainData для построения графика одного примера каждой из пяти категорий в наборе данных обучения,

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)

Тренируйте созданный вами CNN. Вы можете просмотреть точность и потери в процессе обучения. За 30 эпох тренировочный процесс достигает почти 95% точности.

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

Использовать обученную сеть и classify функция получения прогнозируемых меток для набора тестовых данных testDataNoCar. Переменная predTestLabel содержит сетевые прогнозы. Сеть достигает точности около 95% для набора тестовых данных без шума автомобиля.

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

Используйте матрицу путаницы для просмотра подробной информации о производительности прогнозирования для каждой категории. Матрица путаницы для обученной сети показывает, что в каждой категории сеть предсказывает метки сигналов в наборе тестовых данных с высокой степенью точности.

figure
confusionchart(testLabelNoCar,predTestLabel);

Классифицировать подписи с автомобильным шумом

Для анализа влияния шума автомобиля классифицируйте данные, содержащие шум автомобиля, с помощью trainedNetNoCar сеть, которая обучалась без автомобильных шумов.

Загрузка набора тестовых данных с поврежденным автомобильным шумом testDataCarNoise.mat.

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

Введите в сеть набор тестовых данных с поврежденным автомобильным шумом. Точность прогнозирования для набора тестовых данных с автомобильным шумом значительно падает, примерно до 70%, потому что сеть никогда не видела обучающих образцов, содержащих автомобильный шум.

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

Матрица путаницы показывает, что большинство ошибок предсказания происходит, когда сеть принимает сцены из классов «пешеход», «пешеход + пешеход» или «пешеход + велосипедист» и классифицирует их как «велосипедист».

confusionchart(testLabelCarNoise,predTestLabel);

Автомобильный шум значительно затрудняет работу классификатора. Чтобы решить эту проблему, тренируйте CNN, используя данные, которые содержат автомобильный шум.

Переподготовка CNN путем добавления шума автомобиля к набору данных обучения

Загрузить набор учебных данных с поврежденным автомобильным шумом trainDataCarNoise.mat.

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

Переподготовка сети с помощью набора учебных данных, поврежденных автомобильным шумом. За 30 эпох тренировочный процесс достигает почти 90% точности.

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

Ввод в сеть набора тестовых данных, поврежденных автомобильным шумом trainedNetCarNoise. Точность прогнозирования составляет около 87%, что примерно на 15% выше, чем производительность сети, обученной без отсчетов шума автомобиля.

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

Матрица путаницы показывает, что сеть trainedNetCarNoise намного лучше выполняет прогнозирование сцен с одним пешеходом и сцен с двумя пешеходами.

confusionchart(testLabelCarNoise,predTestLabel);

Тематическое исследование

Чтобы лучше понять производительность сети, проверьте ее производительность при классификации перекрывающихся подписей. Этот раздел предназначен только для иллюстрации. Из-за недетерминированного поведения обучения GPU при повторном запуске этого примера в этом разделе могут не быть получены такие же результаты классификации.

Например, сигнатура # 4 поврежденных автомобильным шумом тестовых данных, которая не имеет автомобильного шума, имеет два велосипеда с перекрывающимися микро-доплеровскими сигнатурами. В сети правильно прогнозируют, что сцена имеет двух велосипедистов.

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)))

Из сюжета подпись, по-видимому, только от одного велосипедиста. Загрузить данные CaseStudyData.mat из двух объектов в сцене. Данные содержат обратные сигналы, суммированные по быстрому времени. Примените STFT к каждому сигналу.

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

Амплитуды сигнатуры Bicyclist 2 значительно слабее, чем у Bicyclist 1, и сигнатуры двух bicyclist перекрываются. Когда они перекрываются, невозможно визуально различить две подписи. Однако нейросеть правильно классифицирует сцену.

Другой интересный случай, когда сеть путает автомобильный шум с велосипедистом, как в сигнатуре # 267 данных теста, поврежденных автомобильным шумом:

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)))

Подпись велосипедиста слаба по сравнению с подписью автомобиля, а подпись имеет шипы от шума автомобиля. Поскольку подпись автомобиля сильно напоминает подпись педалиста велосипедиста или пешехода, идущего с низкой скоростью, и имеет небольшой микродоплеровский эффект, существует высокая вероятность того, что сеть неправильно классифицирует сцену.

Ссылки

[1] Чен, V. C. Микро-доплеровский эффект в радаре. Лондон: Artech House, 2011.

[2] Гурбуз, С. З. и Амин, М. Г. «Радиолокационное распознавание человеческого движения с глубоким обучением: перспективные приложения для мониторинга в помещении». Журнал обработки сигналов IEEE. Том 36, выпуск 4, 2019, стр. 16-28.

[3] Belgiovane, D. и К. К. Чен. «Микродоплеровские характеристики пешеходов и велосипедов для автомобильных радиолокационных датчиков на частоте 77 ГГц». В 11-й Европейской конференции по антеннам и распространению (EuCAP), 2912-2916. Париж: Европейская ассоциация по антеннам и распространению, 2017.

[4] Ангелов, А., А. Робертсон, Р. Мюррей-Смит и Ф. Фиоранелли. «Практическая классификация различных движущихся целей с использованием автомобильных радаров и глубоких нейронных сетей». ИЭТ радар, сонар и навигация. Том 12, номер 10, 2017, стр. 1082-1089.

[5] Парашар, К. Н., М. К. Овенеке, М. Рыкунов, Х. Сахли и А. Бурду. «Извлечение микродоплеровских признаков с использованием сверточных автоматических кодеров для классификации целей с низкой задержкой». В 2017 году IEEE Radar Conference (RadarConf), 1739 - 1744. Сиэтл: IEEE, 2017.