Как преобразовать аудиоданные в изображения

Автор оригинала: Tony Chen, Дмитрий Карабаш, Максим Коротков и Hyeongchan Kim
  • Перевод
  • Tutorial

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


Закройте глаза и прислушайтесь к звукам вокруг вас. Независимо от того, находитесь ли вы в переполненном офисе, уютном доме или на открытом пространстве, на природе, вы можете понять, где находитесь, по звукам вокруг вас. Слух — одно из пяти основных чувств человека. Звук играет важную роль в нашей жизни. Это значит, что организация и использование значений аудиоданных с помощью глубокого обучения — важный для ИИ процесс в понимании нашего мира. Кроме того, ключевая задача обработки звука — дать компьютерам возможность отличать один звук от другого. Эта возможность позволит вычислительным машинам выполнять самые разные задачи: от обнаружения износа металла на электростанциях до мониторинга и оптимизации топливной экономии автомобилей.

Сегодня, специально к старту нового потока курса по машинному обучению делюсь с вами статьей, в которой авторы, в качестве примера определяют вид птиц по их пению. Они находят в записях, сделанных в естественных условиях, фрагменты с пением птиц, и классифицируют виды. Преобразовав аудиоданные в данные изображений и применив модели компьютерного зрения, авторы этой статьи получили серебряную медаль (как лучшие 2 %) на соревновании Kaggle Cornell Birdcall Identification.




Обработка аудио как изображений


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

Те же рассуждения применимы к задачам обнаружения звука. Есть спектрограммы четырёх видов птиц. Прослушать оригинальные отрезки звука можно здесь. Глазами человек тем более мгновенно увидит различия видов по цвету и форме.

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

Понимание спектрограммы


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


Объяснение параметров звуковых волн

На спектрограмме аудиоклипа горизонтальное направление представляет время, а вертикальное направление представляет частоты. Наконец, амплитуда звуков определённой частоты, существующих в определённый момент, представлена цветом точки, который обозначается соответствующими координатами x-y.


Объяснение спектрограммы

Чтобы понять, как частоты отражаются в спектрограммах, посмотрите на трёхмерную визуализацию, которая демонстрирует амплитуду с помощью дополнительного измерения. По оси X отложено время, а по оси Y — значения частот. Ось z — это амплитуда звуков частоты координаты y в момент координаты x. По мере увеличения значения z цвет меняется с синего на красный, получается цвет, который мы видели в предыдущем примере 2D-спектрограммы.


Визуализация трёхмерной спектрограммы

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

Шкала мел и её спектрограмма


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

Однако человеческий слух не воспринимает различия во всех частотных диапазонах одинаково. По мере увеличения частот нам становится всё труднее различать их. Чтобы лучше имитировать поведение человеческого уха с помощью моделей глубокого обучения, мы измеряем частоты по шкале мел. В шкале мел любое равное расстояние между частотами звучит для человеческого уха одинаково. Единица мел (m) связана с герцами (f) таким уравнением:

$m = 2595 * log(1+f/700).$


Спектрограмма на мел-шкале — это просто спектрограмма с частотами, измеренными в мел.

Как мы используем спектрограмму?


Для создания мел-спектрограммы из звуковых волн мы воспользуемся библиотекой librosa.

import librosa
y, sr = librosa.load('img-tony/amered.wav', sr=32000, mono=True)
melspec = librosa.feature.melspectrogram(y, sr=sr, n_mels = 128)
melspec = librosa.power_to_db(melspec).astype(np.float32)

Где y обозначает необработанные данные волны, sr обозначает частоту дискретизации аудио-сэмпла, а n_mels определяет количество полос мел в сгенерированной спектрограмме. При использовании метода melspectrogram вы также можете установить параметры метода f_min и f_max. Можно установить Then и преобразовать спектрограмму в спектрограмму мел, выражающую амплитуду на прямоугольной шкале, к децибелам с помощью метода power_to_db.

Чтобы визуализировать сгенерированную спектрограмму, запустите код:

import librosa.display
librosa.display.specshow(melspec, x_axis='time',  y_axis='mel', sr=sr, fmax=16000)

В качестве альтернативы: если вы используете графический процессор, то можете ускорить процесс генерации спектрограммы с помощью библиотеки torchlibrosa.

from torchlibrosa.stft import Spectrogram, LogmelFilterBank
spectrogram_extractor = Spectrogram()
logmel_extractor = LogmelFilterBank()
y = spectrogram_extractor(y)
y = self.logmel_extractor(y)

Резюме


В заключение скажу, что мы можем воспользоваться преимуществами последних достижений компьютерного зрения в задачах, связанных со звуком, путём преобразования данных аудиоклипов в данные изображения. Мы достигаем этого с помощью спектрограмм, показывающих сведения о частоте, амплитуде и времени аудиоданных в изображении. Использование шкалы мел и спектрограммы шкалы мел помогает компьютерам имитировать человеческий слух, чтобы различать звуки разных частот. Для генерации спектрограмм мы могли бы воспользоваться библиотекой librosa или torchlibrosa для ускорения GPU на Python. Рассматривая таким образом задачи, связанные со звуком, мы можем создавать эффективные модели глубокого обучения для выявления и классификации звуков, так же, как, например, врачи диагностируют сердечные заболевания с помощью ЭКГ.




SkillFactory
Школа Computer Science. Скидка 10% по коду HABR

Комментарии 6

  • НЛО прилетело и опубликовало эту надпись здесь
      +1

      Проблема со спектрограммами в том, какую длину окна выбрать в преобразовании Фурье. Большое — и потеряются мелкие детали. Маленькое — и картинка окажется не наглядной для системы компьютерного зрения. Разные масштабирования, сжатие и растяжение осей (линейное, логарифмическое или мел) имеют ту же проблему — либо теряем детали, либо получаем избыток шума, что усложняет визуальное распознавание. А если использовать сразу несколько спектрограмм с разным шагом, то это получится примерно такой же объем данных, как анализировать звук напрямую.


      Поэтому будущее все же за прямым анализом. В синтезе звука, а на самом деле тоже распознавании — так как для хорошего синтеза нужно распознать характерные паттерны в звуке, чтобы их потом имитировать, уже давно ушли от спектрограмм к прямому анализу. Ещё начиная с древней WaveNet. Хотя в человеческом ухе действительно есть аналог спектрограммы, так как чувствительные клетки соединены и снимают сигнал с разных частей улитки, резонирующих на разных частотах (аналог быстрого преобразования Фурье), причем в логарифмическое масштабе (точнее, в мел масштабе). И распознавание паттернов звука дальше делается нейронами, аналогичными тем, что в зрительной системе. Поэтому для ограниченного круга задач и при удачном подборе параметров (шаг, масштабирование осей) спектрограммы использовать вполне можно. Но лучше анализировать напрямую звуковую wave волну.

        0
        Только у человека в этом мел масштабе грубо говоря 1000 отсчётов на всю шкалу (т.е. на частотах около 100 гц они идут с разницей по 1-2 герца), а у компьютера обычно всего штук 40.
        Давно хочу попробовать получить подробное человеческому разбиение и показать, как оно выглядит на картинке.
        0

        Получается, видеть можно ушами. Очень интересно

        0

        Не удержался.
        ZX-Spectrum отлично переводил аудио в картинку.
        https://m.vk.com/video1226296_456239051

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое