Какая спектрограмма лучше всего представляет особенности аудиофайла для модели на основе CNN? - PullRequest
0 голосов
/ 04 апреля 2019

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

Я посмотрел на линейные, log, mel и т. Д. И где-то читал, что для этого лучше всего использовать спектрограмму на основе mel. Но без надлежащей проверяемой информации. Я использовал простой следующий код для генерации спектрограммы.

y,sr= librosa.core.load(r'C:\Users\Tej\Desktop\NoiseWork\NoiseOnly\song.wav')
S = librosa.feature.melspectrogram(y=y, sr=sr)
librosa.display.specshow(librosa.power_to_db(S, ref=np.max))

Мой вопрос: какая спектрограмма лучше всего представляет особенности аудиофайла для обучения с CNN? Я использовал линейный, но в некоторых аудиофайлах линейная спектрограмма выглядит одинаково

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

Лог-масштабированные спектрограммы являются текущим «стандартом» для использования с сверточными нейронными сетями. Это было наиболее часто используемым в литературе Обнаружения аудио-событий и Аудио Классификации Сцены между 2015-2018.

Чтобы быть более инвариантным к изменениям амплитуды, обычно применяется нормализация. Либо для целых клипов или классифицируемых окон. Нормализация среднее / стандартное отклонение работает нормально.

Но с точки зрения CNN, существует относительно небольшая разница между различными вариациями спектрометра. Так что это вряд ли решит вашу проблему, если две или более спектрограммы в основном одинаковы.

0 голосов
/ 24 июня 2019

В дополнение к тому, что было сказано, я рекомендую прочитать Сравнение методов предварительной обработки аудиосигналов для глубоких нейронных сетей при пометке музыки , авторы Keunwoo Choi, György Fazekas, Kyunghyun Cho и Mark Sandler.

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

y,sr= librosa.core.load(r'C:\Users\Tej\Desktop\NoiseWork\NoiseOnly\song.wav')
S = librosa.feature.melspectrogram(y=y, sr=sr)
S_db = librosa.core.power_to_db(S)

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

И последнее, что следует упомянуть, - это несколько новый метод, называемый нормализацией энергии на канал. Я рекомендую прочитать Нормализация энергии на канал: почему и как Винсента Лостанлена, Джастина Саламона, Марка Картрайта, Брайана Макфи, Эндрю Фарнсворт, Стив Келлинг и Хуан Пабло Белло. К сожалению, есть некоторые параметры, которые нуждаются в корректировке в зависимости от данных, но во многих случаях кажется, что это так же хорошо или лучше, чем logmelspectrograms. Вы можете реализовать это в Librosa следующим образом:

y,sr= librosa.core.load(r'C:\Users\Tej\Desktop\NoiseWork\NoiseOnly\song.wav')
S = librosa.feature.melspectrogram(y=y, sr=sr)
S_pcen = librosa.pcen(S)

Хотя, как я уже говорил, в pcen есть параметры, которые нужно настроить! Вот документация Librosa для PCEN , чтобы вы могли начать, если вам интересно.

...