Как классифицировать звук с помощью БПФ и нейронной сети?Должен ли я использовать CNN или RNN? - PullRequest
2 голосов
/ 04 мая 2019

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

Я использую микроконтроллер, который запускается по звуку и сэмплирует звук @ 20usec.И микроконтроллер отправит эти необработанные данные АЦП на ПК для обработки Python.В настоящее время я беру 1000 очков и получаю БПФ, используя numpy (используя rfft и получая его абсолютное значение).

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

Я посмотрел на сверточную нейронную сеть, и возник другой вопрос, еслиЯ должен использовать 1-D или 2-D Conv. Keras.

Ответы [ 2 ]

1 голос
/ 04 мая 2019

Поскольку в этом случае система поезда / испытания не является встроенной, взгляните на VGGish (https://github.com/tensorflow/models/tree/master/research/audioset - также относится к бумаге и набору данных, включая хлопки в ладоши), в которых для вычисления набор функций:

VGGish был обучен звуковым функциям, рассчитанным следующим образом:

  • Все аудио передискретизированы до 16 кГц моно.
  • Спектрограмма вычисляется с использованием величин кратковременного преобразования Фурье с размером окна 25 мс, скачком окна 10 мс и периодическим окном Ганна.
  • Спектрограмма плавления вычисляется путем сопоставления спектрограммы с 64 ячейками плавления. охватывающий диапазон 125-7500 Гц.
  • Стабилизированная спектрограмма расплава рассчитывается путем применения log (mel-spectrum + 0.01), где смещение используется, чтобы избежать логарифма нуля.
  • Эти функции тогда в виде непересекающихся примеров продолжительностью 0,96 секунды, где каждый пример охватывает 64 полосы мель и 96 кадров по 10 мс каждая.

Примечание - хлопание уже закрыто (https://research.google.com/audioset/dataset/clapping.html)

1 голос
/ 04 мая 2019

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

Для сверточных нейронных сетей (CNN):

CNN могутизвлекать особенности из входов фиксированной длины.1D CNN с Max-Pooling лучше всего работают с данными сигнала (я лично использовал их для данных акселерометра).

Вы можете использовать их, если ваш вход имеет фиксированную длину и имеет существенные особенности.

Для рекуррентных нейронных сетей:

Следует использовать, когда сигнал имеет временную характеристику.

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

RNN и LSTM могут быть лучшим выбором, если они получают отличные функции.

Anгибридный Conv LSTM:

Этот NN является гибридом CNN и LSTM (RNN).Они используют CNN для извлечения признаков, а затем LSTM изучают эту последовательность.Функции, извлеченные CNN, также содержат временные функции.

Это может быть очень просто, если вы используете Keras.

Совет:

Как аудиоКлассификация выполнена, я также предложу использовать MFCC для извлечения функций.

Я думаю, вам следует попробовать все 3 подхода и посмотреть, какой из них подходит лучше всего.Скорее всего, RNN и ConvLSTM будут работать для вашего варианта использования.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...