Этот пример показывает, как классифицировать пешеходов и велосипедистов на основе их микродоплеровских характеристик с использованием сети глубокого обучения и частотно-временного анализа.
Движения различных частей объекта, помещенного перед радаром, производят микродоплеровские сигнатуры, которые могут быть использованы для идентификации объекта. В этом примере используется сверточная нейронная сеть (CNN) для идентификации пешеходов и велосипедистов на основе их подписей.
В этом примере обучается сеть глубокого обучения с использованием смоделированных данных, а затем рассматривается, как сеть выполняет классификацию двух случаев перекрывающихся сигнатур.
Данные, используемые для обучения сети, генерируются с помощью backscatterPedestrian (Панель радиолокационных средств) и backscatterBicyclist (Radar Toolbox) от Radar Toolbox™. Эти функции имитируют радиолокационное обратное рассеяние сигналов, отраженных от пешеходов и велосипедистов соответственно.
Вспомогательная функция helperBackScatterSignals формирует заданное число возвращений пешеходов, велосипедистов и автомобильных радаров. Поскольку целью примера является классификация пешеходов и велосипедистов, этот пример рассматривает автомобильные подписи только как источники шума. Чтобы получить представление о проблеме классификации для решения, изучите одну реализацию микродоплеровской сигнатуры от пешехода, велосипедиста и автомобиля. (Для каждой реализации обратные сигналы имеют размеры Nfast-by-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, используя данные, которые содержат автомобильный шум.
Загрузить набор учебных данных с поврежденным автомобильным шумом 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.
batchNormalizationLayer | classify | convolution2dLayer | layerGraph | trainingOptions | trainNetwork